game/MultiplayerController.gd

102 lines
2.7 KiB
GDScript

extends CanvasLayer
@export var address = "127.0.0.1"
@export var port = 8910
var peer
#var nick = "NO_NICKNAME"
# Called when the node enters the scene tree for the first time.
func _ready():
multiplayer.peer_connected.connect(peer_connected)
multiplayer.peer_disconnected.connect(peer_disconnected)
multiplayer.connected_to_server.connect(connected_to_server)
multiplayer.connection_failed.connect(connection_failed)
pass # Replace with function body.
### Server and Client
func peer_connected(id):
print("Peer connected: ", id)
### Server and Client
func peer_disconnected(id):
print("Peer disconnected: ", id)
GameManager.players.erase(id)
if id == 1:
print("Server Disconnected !!!!!")
var tree = get_children()
print("Children: ", tree)
for child in $Map.get_children():
child.queue_free()
self.show()
var players = get_tree().get_nodes_in_group("Player")
for i in players:
if i.name == str(id):
i.queue_free()
break
### Client
func connected_to_server():
print("Connected to server :)")
SendPlayerInformation.rpc_id(1, $Nickname.text, multiplayer.get_unique_id())
#SendPlayerInformation(nick, multiplayer.get_unique_id())
### Client
func connection_failed():
print("Disconnected from server :(")
@rpc("any_peer")
func SendPlayerInformation(nickname, id):
var me = multiplayer.get_unique_id()
var sender_id = multiplayer.get_remote_sender_id()
print(me, ": got info on ", id, " from ", sender_id)
if !GameManager.players.has(id):
GameManager.players[id] ={
"name" : nickname,
"id" : id,
"score": 0
}
if multiplayer.is_server():
print(me, ": Is Server!")
for i in GameManager.players:
print(me, ": Sending(?) player ", i)
SendPlayerInformation.rpc(GameManager.players[i].name, i)
@rpc("any_peer","call_local")
func StartGame():
var me = multiplayer.get_unique_id()
print(me, ": Starting Game\n", me, ": Players: ", GameManager.players)
var scene = load("res://test_map.tscn").instantiate()
#get_tree().root.add_child(scene)
$Map.add_child(scene)
self.hide()
func hostGame():
peer = ENetMultiplayerPeer.new()
var error = peer.create_server(port, 2)
if error != OK:
print("cannot host: " + error)
return
peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
multiplayer.set_multiplayer_peer(peer)
print("Waiting For Players!")
func _on_host_button_down():
hostGame()
SendPlayerInformation($Nickname.text, multiplayer.get_unique_id())
#SendPlayerInformation(nick, multiplayer.get_unique_id())
func _on_join_button_down():
peer = ENetMultiplayerPeer.new()
peer.create_client(address, port)
peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER)
multiplayer.set_multiplayer_peer(peer)
func _on_start_button_down():
StartGame.rpc()