game/MultiplayerController.gd

83 lines
2.3 KiB
GDScript

extends Control
@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.
func peer_connected(id):
print("Peer connected: " + str(id))
if multiplayer.is_server():
for p in GameManager.players:
SendPlayerInformation(p["name"], p["id"]).rpc_id(id)
func peer_disconnected(id):
print("Peer disconnected: " + str(id))
func connected_to_server():
print("Connected to server :)")
SendPlayerInformation(nick, multiplayer.get_unique_id())
func connection_failed():
print("Disconnected from server :(")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
@rpc("any_peer")
func SendPlayerInformation(name, id):
print("got info on " + str(id))
var sender_id = multiplayer.get_remote_sender_id()
#TODO: clients to only accept data from server
print(" from " + str(sender_id))
if !GameManager.players.has(id):
GameManager.players[id] ={
"name" : name,
"id" : id,
"score": 0
}
if multiplayer.is_server():
for i in GameManager.Players:
SendPlayerInformation.rpc(GameManager.Players[i].name, i)
@rpc("any_peer","call_local")
func StartGame():
var scene = load("res://test_map.tscn").instantiate()
get_tree().root.add_child(scene)
self.hide()
func _on_host_button_down():
peer = ENetMultiplayerPeer.new()
var err = peer.create_server(port, 32)
if err != OK:
print("Error Starting Server :(")
return
multiplayer.set_multiplayer_peer(peer)
print("Waiting for players...")
func _on_join_button_down():
peer = ENetMultiplayerPeer.new()
peer.create_client(address, port)
multiplayer.set_multiplayer_peer(peer)
func _on_start_button_down():
StartGame.rpc()
func _on_apply_button_down():
get_node("Apply").disabled = true
nick = $Nickname.text
if peer.is_connected():
SendPlayerInformation(nick, multiplayer.get_unique_id())
pass # Replace with function body.
func _on_nickname_text_changed():
if $Apply.disabled && $Nickname.text != nick:
$Apply.disabled = false