multiplayer: added upnp

This commit is contained in:
Simon Ward 2026-01-27 12:55:18 +13:00
parent fa6a64fbaa
commit 4da6d0efba
2 changed files with 34 additions and 5 deletions

View file

@ -1,6 +1,7 @@
extends Node3D
@onready var menu = $UI/Menu
@onready var address_entry = $UI/Menu/MarginContainer/VBoxContainer/LineEdit
const PORT = 9999
const PLAYER = preload("res://player/player.tscn")
@ -13,15 +14,39 @@ func _on_server_button_pressed() -> void:
peer.create_server(PORT)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(add_player)
multiplayer.peer_disconnected.connect(remove_player)
add_player(multiplayer.get_unique_id())
upnp_setup()
func _on_client_button_pressed() -> void:
menu.hide()
peer.create_client("localhost",PORT)
peer.create_client(address_entry.text,PORT)
multiplayer.multiplayer_peer = peer
func add_player(peer_id):
var player = PLAYER.instantiate()
player.name = str(peer_id)
add_child(player)
func remove_player(peer_id):
var player = get_node_or_null(str(peer_id))
if player:
player.queue_free()
func upnp_setup():
var upnp = UPNP.new()
var discover_result = upnp.discover()
assert(discover_result == UPNP.UPNP_RESULT_SUCCESS, \
"UPNP Discover Failed! Error %s" % discover_result)
assert(upnp.get_gateway() and upnp.get_gateway().is_valid_gateway(), \
"UPNP Invalid Gateway!")
var map_result = upnp.add_port_mapping(PORT)
assert(map_result == UPNP.UPNP_RESULT_SUCCESS, \
"UPNP Port Mapping Failed ! Error %s" % map_result)
print("Success! Join Adress: %s" % upnp.query_external_address())