var peer = ENetMultiplayerPeer.new()
const PORT = 1027
@export var PlayerScene : PackedScene
@onready var AddressEntry : LineEdit = $CanvasLayer/AddressEntry
func _on_host_pressed():
peer.create_server(PORT)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(AddPlayer)
AddPlayer(multiplayer.get_unique_id())
$CanvasLayer.hide()
upnp_setup()
func _on_join_pressed():
$CanvasLayer.hide()
peer.create_client(AddressEntry.text, PORT)
multiplayer.multiplayer_peer = peer
func AddPlayer(id = 1):
var player = PlayerScene.instantiate()
player.name = str(id)
call_deferred("add_child", player)
func ExitGame(id):
multiplayer.peer_disconnected.connect(DelPlayer)
func DelPlayer (id):
rpc("DeletePlayer", id)
@rpc("any_peer", "call_local")
func DeletePlayer(id):
get_node(str(id)).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 Port Invalid Gateway")
var Map_Result = upnp.add_port_mapping(PORT)
assert(Map_Result == UPNP.UPNP_RESULT_SUCCESS, "UPNP port mapping Failed %s" % Map_Result)
print("Success! Join Address: %s" % upnp.query_external_address())