open-strike-2/scenes/utils/menu.gd

110 lines
2.8 KiB
GDScript3
Raw Normal View History

extends Control
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
2025-01-22 06:22:43 +00:00
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:
pass
var peer = ENetMultiplayerPeer.new()
2025-01-22 06:22:43 +00:00
signal player_connected(peer_id, player_info)
signal player_disconnected(peer_id)
signal server_disconnected
const PORT = 7000
const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost
const MAX_CONNECTIONS = 20
var players_loaded = 0
var player_info = {"name": "Name"}
var players = {}
func _on_host_pressed() -> void:
2025-01-22 06:22:43 +00:00
var peer = ENetMultiplayerPeer.new()
var error = peer.create_server(PORT, MAX_CONNECTIONS)
if error:
print(error)
multiplayer.multiplayer_peer = peer
players[1] = player_info
player_connected.emit(1, player_info)
func remove_multiplayer_peer():
multiplayer.multiplayer_peer = null
2025-01-22 06:22:43 +00:00
# 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 == players.size():
players_loaded = 0
func _on_join_pressed() -> void:
2025-01-22 06:22:43 +00:00
var address = '127.0.0.1'
var peer = ENetMultiplayerPeer.new()
var error = peer.create_client(address, PORT)
if error:
print(error)
multiplayer.multiplayer_peer = peer
2025-01-22 06:22:43 +00:00
func _on_player_connected(id: Variant, player_info: Variant) -> void:
print(player_info)
_register_player.rpc_id(id, player_info)
@rpc("any_peer", "reliable")
func _register_player(new_player_info):
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
players.erase(id)
player_disconnected.emit(id)
func _on_connected_ok():
var peer_id = multiplayer.get_unique_id()
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
players.clear()
server_disconnected.emit()
@rpc("call_local", "reliable", "any_peer")
func start_game():
get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn")
func _on_start_pressed() -> void:
start_game.rpc()