diff options
Diffstat (limited to 'UI/lobby.gd')
-rw-r--r-- | UI/lobby.gd | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/UI/lobby.gd b/UI/lobby.gd new file mode 100644 index 0000000..86bfa4c --- /dev/null +++ b/UI/lobby.gd @@ -0,0 +1,85 @@ +extends Control + + +signal joined + +var current_map_idx := 0 + +@onready var list: VBoxContainer = %PlayersList + + +func _ready() -> void: + if not multiplayer.is_server(): + %StartButton.visible = false + %StartButton.queue_free() + + %PlayersList.remove_child(%PlayersList.get_child(0)) + %PlayersList.remove_child(%PlayersList.get_child(0)) + + if multiplayer.is_server(): + set_map.rpc(current_map_idx) + joined.connect(func(): + set_map.rpc(current_map_idx) + ) + for idx in %Maps.get_child_count(): + %Maps.get_child(idx).pressed.connect(func(): + current_map_idx = idx + set_map.rpc(idx) + ) + if not multiplayer.is_server(): + set_map(0) + for node: Control in %Maps.get_children(): + node.mouse_filter = Control.MOUSE_FILTER_IGNORE + + Network.players_changed.connect(update_players) + update_players() + + multiplayer.peer_disconnected.connect(remove_player) + + +func update_players(): + for id in Network.get_ordered_player_ids(): + var player: Player = Network.get_player(id) + + var control: Control = list.get_node_or_null(str(id)) + if not control: + control = MarginContainer.new() + control.name = str(id) + var label = Label.new() + label.add_theme_color_override("font_color", player.get_color()) + if id == multiplayer.get_unique_id(): + label.add_theme_color_override("font_outline_color", Color(0.75, 0.75, 0.75, 0.75)) + label.add_theme_constant_override("outline_size", 10) + control.add_child(label) + list.add_child(control) + joined.emit() + + control.get_child(0).text = str(player.username) + control.get_child(0).tooltip_text = str(id) + list.move_child(control, Network.get_ordered_player_ids().find(id) + 1) + + +func remove_player(id): + list.remove_child(list.get_node(str(id))) + + +func _on_start_button_pressed() -> void: + start.rpc() + + +func _on_cancel_button_pressed() -> void: + multiplayer.multiplayer_peer.close() + get_tree().change_scene_to_file("res://UI/Start.tscn") + + +@rpc("authority", "call_local") +func start(): + get_tree().change_scene_to_file("res://Stages/Wintermaul.tscn") + + +@rpc("authority", "call_local") +func set_map(index: int): + for node: Button in %Maps.get_children(): + node.add_theme_color_override("font_color", Color(1.0, 1.0, 1.0, 0.5)) + + %Maps.get_child(index).add_theme_color_override("font_color", Color(1.0, 1.0, 1.0, 1.0)) |