58 lines
1.7 KiB
GDScript
58 lines
1.7 KiB
GDScript
extends Node
|
|
|
|
|
|
const SERVER_PORT = 8080
|
|
const SERVER_IP = "127.0.0.1"
|
|
var handle : String
|
|
var id : int
|
|
var players : Dictionary = {}
|
|
signal client_added(handle : String, id : int)
|
|
|
|
func become_host() -> void:
|
|
print("Starting host!")
|
|
|
|
var server_peer = ENetMultiplayerPeer.new()
|
|
server_peer.create_server(SERVER_PORT)
|
|
players[handle] = 1
|
|
multiplayer.multiplayer_peer = server_peer
|
|
id = multiplayer.get_unique_id()
|
|
print("%s %d t" % [handle, multiplayer.get_unique_id()])
|
|
multiplayer.peer_connected.connect(_add_player_to_game)
|
|
multiplayer.peer_disconnected.connect(_remove_player_from_game)
|
|
|
|
|
|
func join_game(new_handle : String) -> Error:
|
|
print("Player 2 joining.")
|
|
|
|
var client_peer = ENetMultiplayerPeer.new()
|
|
var error = client_peer.create_client(SERVER_IP, SERVER_PORT)
|
|
multiplayer.multiplayer_peer = client_peer
|
|
handle = new_handle
|
|
id = multiplayer.get_unique_id()
|
|
if !error:
|
|
print("%s %d" % [handle, multiplayer.get_unique_id()])
|
|
return !error
|
|
|
|
|
|
|
|
func _add_player_to_game(id : int) -> void:
|
|
print("Player %s joined the game!" % id)
|
|
await get_tree().create_timer(0.5).timeout
|
|
get_handle_from_peer(id)
|
|
|
|
func _remove_player_from_game(id : int) -> void:
|
|
print("Player %s left the game!" % id)
|
|
|
|
func get_handle_from_peer(peer_id) -> void:
|
|
rpc_id(peer_id, "report_handle_to_peer", id)
|
|
|
|
@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
|
|
client_added.emit(peer_handle, peer_id)
|
|
|
|
@rpc("any_peer", "call_remote")
|
|
func report_handle_to_peer(peer_id : int) -> void:
|
|
rpc_id(peer_id, "receive_peer_handle", multiplayer.get_unique_id(), handle)
|