summaryrefslogtreecommitdiff
path: root/UI/lobby.gd
diff options
context:
space:
mode:
Diffstat (limited to 'UI/lobby.gd')
-rw-r--r--UI/lobby.gd85
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))