149 lines
4.2 KiB
GDScript
149 lines
4.2 KiB
GDScript
extends Control
|
|
|
|
@onready var lobby_container = $VBoxContainer
|
|
var current_players = {}
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
#multiplayer.peer_connected.connect(_on_player_connected)
|
|
#multiplayer.peer_disconnected.connect(_on_player_disconnected)
|
|
#multiplayer.connected_to_server.connect(_on_connected_ok)
|
|
#multiplayer.connection_failed.connect(_on_connected_fail)
|
|
#multiplayer.server_disconnected.connect(_on_server_disconnected)
|
|
pass # Replace with function body.
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
var labels : Array[Label] = []
|
|
if current_players != ServerManager.Players:
|
|
for player in ServerManager.Players:
|
|
print("adding a player")
|
|
var label = Label.new()
|
|
label.text = str(player)
|
|
labels.push_back(label)
|
|
|
|
for label in labels:
|
|
print(label)
|
|
lobby_container.add_child(label)
|
|
current_players = ServerManager.Players
|
|
|
|
pass
|
|
|
|
var peer = ENetMultiplayerPeer.new()
|
|
|
|
signal player_connected(peer_id, player_info)
|
|
signal player_disconnected(peer_id)
|
|
signal server_disconnected
|
|
|
|
const MAX_CONNECTIONS = 20
|
|
|
|
var players_loaded = 0
|
|
|
|
var player_info = {"name": "Name"}
|
|
#var players = {}
|
|
|
|
# Create a server instance here
|
|
func _on_host_pressed() -> void:
|
|
var PORT = $PublishPort.text
|
|
var SERVER_IP = $HostToJoin
|
|
var peer = ENetMultiplayerPeer.new()
|
|
var error = peer.create_server(int(PORT), MAX_CONNECTIONS)
|
|
if error:
|
|
print(error)
|
|
if "--server" in OS.get_cmdline_user_args():
|
|
print("headless")
|
|
multiplayer.get_unique_id()
|
|
ServerManager.Players[multiplayer.get_unique_id()] = {"name": "host"}
|
|
start_game()
|
|
|
|
#else:
|
|
#multiplayer.multiplayer_peer = peer
|
|
#send_player_information.rpc("main", multiplayer.get_unique_id())
|
|
#ServerManager.Players[1] = player_info
|
|
#play er_connected.emit(1, player_info)
|
|
return
|
|
|
|
func remove_multiplayer_peer():
|
|
multiplayer.multiplayer_peer = null
|
|
|
|
# When the server decides to start the game from a UI scene,
|
|
# do Lobby.load_game.rpc(filepath)
|
|
@rpc("call_local", "reliable")
|
|
func load_game(game_scene_path):
|
|
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
|
|
|
# Every peer will call this when they have loaded the game scene.
|
|
@rpc("any_peer", "call_local", "reliable")
|
|
func player_loaded():
|
|
if multiplayer.is_server():
|
|
players_loaded += 1
|
|
if players_loaded == ServerManager.players.size():
|
|
|
|
players_loaded = 0
|
|
|
|
func _on_join_pressed() -> void:
|
|
var address = '127.0.0.1'
|
|
var peer = ENetMultiplayerPeer.new()
|
|
var PORT = $PublishPort.text
|
|
var error = peer.create_client(address, int(PORT))
|
|
if error:
|
|
print(error)
|
|
multiplayer.multiplayer_peer = peer
|
|
ServerManager.add_player.rpc_id(1, multiplayer.get_unique_id(), "test")
|
|
start_game()
|
|
#send_player_information.rpc_id(1, "test", multiplayer.get_unique_id())
|
|
|
|
|
|
|
|
func _on_player_connected(id: Variant, player_info: Variant) -> void:
|
|
print_debug("a player is trying to connect")
|
|
|
|
@rpc("any_peer", "reliable")
|
|
func _register_player(new_player_info):
|
|
pass
|
|
#var new_player_id = multiplayer.get_remote_sender_id()
|
|
#players[new_player_id] = new_player_info
|
|
#player_connected.emit(new_player_id, new_player_info)
|
|
|
|
|
|
func _on_player_disconnected(id: Variant) -> void:
|
|
pass
|
|
ServerManager.Players.erase(id)
|
|
player_disconnected.emit(id)
|
|
|
|
func _on_connected_ok():
|
|
var peer_id = multiplayer.get_unique_id()
|
|
#ServerManager.players[peer_id] = player_info
|
|
player_connected.emit(peer_id, player_info)
|
|
|
|
|
|
func _on_connected_fail():
|
|
multiplayer.multiplayer_peer = null
|
|
|
|
func _on_server_disconnected() -> void:
|
|
multiplayer.multiplayer_peer = null
|
|
ServerManager.Players.clear()
|
|
server_disconnected.emit()
|
|
|
|
@rpc("call_local", "any_peer")
|
|
func send_player_information(name, id):
|
|
if !ServerManager.Players.has(id):
|
|
print(name)
|
|
ServerManager.Players[id] = {
|
|
"name": name,
|
|
"id": id,
|
|
"score": 0
|
|
}
|
|
if multiplayer.is_server():
|
|
for i in ServerManager.Players:
|
|
send_player_information.rpc(ServerManager.Players[i], name, i)
|
|
|
|
@rpc("call_local", "reliable", "any_peer")
|
|
func start_game():
|
|
print("test")
|
|
if multiplayer.is_server():
|
|
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
|
|
|
|
func _on_start_pressed() -> void:
|
|
start_game.rpc()
|