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
95
|
extends Control
signal joined
var current_map_idx := 0
@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():
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):
current_map_idx = index
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
|