Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 26 additions & 17 deletions world.gd
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ extends Node
@onready var hud = $CanvasLayer/HUD
@onready var health_bar = $CanvasLayer/HUD/HealthBar

signal upnp_completed(error)

const PLAYER = preload("res://player.tscn")
const SERVER_PORT = 7777

const Player = preload("res://player.tscn")
const PORT = 9999
var enet_peer = ENetMultiplayerPeer.new()
var thread = null

func _unhandled_input(event):
if Input.is_action_just_pressed("quit"):
Expand All @@ -18,24 +21,24 @@ func _on_host_button_pressed():
main_menu.hide()
hud.show()

enet_peer.create_server(PORT)
enet_peer.create_server(SERVER_PORT)
multiplayer.multiplayer_peer = enet_peer
multiplayer.peer_connected.connect(add_player)
multiplayer.peer_disconnected.connect(remove_player)

add_player(multiplayer.get_unique_id())

upnp_setup()
_upnp_setup(SERVER_PORT)

func _on_join_button_pressed():
main_menu.hide()
hud.show()

enet_peer.create_client(address_entry.text, PORT)
enet_peer.create_client(address_entry.text, SERVER_PORT)
multiplayer.multiplayer_peer = enet_peer

func add_player(peer_id):
var player = Player.instantiate()
var player = PLAYER.instantiate()
player.name = str(peer_id)
add_child(player)
if player.is_multiplayer_authority():
Expand All @@ -53,18 +56,24 @@ func _on_multiplayer_spawner_spawned(node):
if node.is_multiplayer_authority():
node.health_changed.connect(update_health_bar)

func upnp_setup():
func _upnp_setup(server_port):
# UPNP queries take some time.
var upnp = UPNP.new()
var err = upnp.discover()

var discover_result = upnp.discover()
assert(discover_result == UPNP.UPNP_RESULT_SUCCESS, \
"UPNP Discover Failed! Error %s" % discover_result)
if err != OK:
push_error(str(err))
emit_signal("upnp_completed", err)
return
if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():
upnp.add_port_mapping(server_port, server_port, ProjectSettings.get_setting("application/config/name"), "UDP")
upnp.add_port_mapping(server_port, server_port, ProjectSettings.get_setting("application/config/name"), "TCP")
emit_signal("upnp_completed", OK)

assert(upnp.get_gateway() and upnp.get_gateway().is_valid_gateway(), \
"UPNP Invalid Gateway!")
func _ready():
thread = Thread.new()
thread.start(_upnp_setup.bind(SERVER_PORT))

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 Address: %s" % upnp.query_external_address())
func _exit_tree():
# Wait for thread finish here to handle game exit while the thread is running.
thread.wait_to_finish()