summaryrefslogtreecommitdiff
path: root/UI/lobby.gd
blob: 1cb4d5c2ecf55c48d441644ab2213e5d770e056a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
extends Control


signal joined

var current_map_idx := 2

@onready var list: VBoxContainer = %PlayersList


func _ready() -> void:
	if not multiplayer.is_server():
		%StartButton.disabled = true
		#%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)
	
	# reset map texture for clean load
	%Thumbnail.texture = null
	set_map(current_map_idx)


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():
	var scene = %Maps.get_child(current_map_idx).get_meta("map_scene")
	get_tree().change_scene_to_packed(scene)


@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))
	
	var node = %Maps.get_child(index)
	var thumbnail = node.get_meta("thumbnail")
	
	node.add_theme_color_override("font_color", Color(1.0, 1.0, 1.0, 1.0))
	%Thumbnail.texture = thumbnail