Renamed a bunch of player stuff to pawn stuff and implemented extensive work on getting single-address 'netplay' code working. Not sure if I've created issues with single player but in theory it should all transfer across as if the player is simply always the host.

This commit is contained in:
2026-01-08 07:15:20 -05:00
parent 9fe376e27e
commit ec02685065
69 changed files with 1525 additions and 708 deletions

View File

@@ -7,6 +7,9 @@ var handle : String
var id : int = 1
var players : Dictionary = {}
signal client_added(handle : String, id : int)
signal all_ready()
var player_readiness : Dictionary[int, bool] = {}
var waiting : bool = false
func become_host() -> void:
print("Starting host!")
@@ -14,6 +17,7 @@ func become_host() -> void:
var server_peer = ENetMultiplayerPeer.new()
server_peer.create_server(SERVER_PORT)
players[handle] = 1
player_readiness[1] = false
multiplayer.multiplayer_peer = server_peer
id = multiplayer.get_unique_id()
print("%s %d t" % [handle, multiplayer.get_unique_id()])
@@ -29,13 +33,33 @@ func join_game(new_handle : String) -> Error:
multiplayer.multiplayer_peer = client_peer
handle = new_handle
id = multiplayer.get_unique_id()
players[handle] = id
player_readiness[id] = false
if !error:
print("%s %d" % [handle, multiplayer.get_unique_id()])
await get_tree().create_timer(0.5).timeout
get_handle_from_peer(1)
return !error
func is_server() -> bool:
return multiplayer && multiplayer.is_server()
func is_host() -> bool:
return id == 1
func _process(delta: float) -> void:
if waiting:
var ready : bool = true
for pr in player_readiness.values():
if !pr:
ready = false
break
if ready:
all_ready.emit()
waiting = false
for pr in player_readiness.keys():
player_readiness[pr] = false
func _add_player_to_game(id : int) -> void:
print("Player %s joined the game!" % id)
await get_tree().create_timer(0.5).timeout
@@ -47,10 +71,15 @@ func _remove_player_from_game(id : int) -> void:
func get_handle_from_peer(peer_id) -> void:
rpc_id(peer_id, "report_handle_to_peer", id)
@rpc("call_local", "any_peer", "reliable")
func set_player_ready(peer_id : int) -> void:
player_readiness[peer_id] = true
@rpc("any_peer", "call_remote")
func receive_peer_handle(peer_id, peer_handle) -> void:
print("Player %s identified as %s!" % [peer_id, peer_handle])
players[peer_handle] = peer_id
player_readiness[peer_id] = false
client_added.emit(peer_handle, peer_id)
@rpc("any_peer", "call_remote")