56 lines
1.5 KiB
GDScript
56 lines
1.5 KiB
GDScript
extends Control
|
|
|
|
@onready var player_list: ItemList = %PlayerList
|
|
@onready var status_label: Label = %StatusLabel
|
|
@onready var start_button: Button = %StartButton
|
|
|
|
func _ready() -> void:
|
|
Net.peer_connected.connect(_refresh)
|
|
Net.peer_disconnected.connect(_refresh)
|
|
Net.server_disconnected.connect(_on_disconnect)
|
|
start_button.visible = Net.is_host()
|
|
if Net.is_host():
|
|
status_label.text = "Hosting on port %d — press Start when ready" % Net.DEFAULT_PORT
|
|
else:
|
|
status_label.text = "Joined — waiting for host to start"
|
|
_refresh(0)
|
|
|
|
func _refresh(_id: int) -> void:
|
|
player_list.clear()
|
|
var ids: Array = []
|
|
if multiplayer.multiplayer_peer == null:
|
|
ids.append(1)
|
|
else:
|
|
ids.append(multiplayer.get_unique_id())
|
|
for p in multiplayer.get_peers():
|
|
if not p in ids:
|
|
ids.append(p)
|
|
ids.sort()
|
|
for id in ids:
|
|
var n: String = Net.player_names.get(id, "Player %d" % id)
|
|
player_list.add_item("[%d] %s" % [id, n])
|
|
|
|
func _on_start_pressed() -> void:
|
|
if not Net.is_host():
|
|
return
|
|
_start_world.rpc()
|
|
|
|
@rpc("authority", "call_local", "reliable")
|
|
func _start_world() -> void:
|
|
GameState.change_scene(GameState.SCENE_WORLD)
|
|
|
|
var _leaving: bool = false
|
|
|
|
func _on_back_pressed() -> void:
|
|
if _leaving:
|
|
return
|
|
_leaving = true
|
|
Net.disconnect_net()
|
|
GameState.change_scene(GameState.SCENE_MAIN_MENU)
|
|
|
|
func _on_disconnect() -> void:
|
|
if _leaving:
|
|
return
|
|
_leaving = true
|
|
GameState.change_scene(GameState.SCENE_MAIN_MENU)
|