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:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user