diff --git a/components/Scenes/FullscreenPanels/Starter.tscn b/components/Scenes/FullscreenPanels/Starter.tscn index 6d21c9d..65b6a7f 100644 --- a/components/Scenes/FullscreenPanels/Starter.tscn +++ b/components/Scenes/FullscreenPanels/Starter.tscn @@ -183,6 +183,7 @@ alignment = 1 [node name="serverConfig" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/configs" index="0"] unique_name_in_owner = true +visible = false layout_mode = 2 [node name="title" type="Label" parent="content/wrapper/starter/multiplayer/configs/serverConfig" index="0"] @@ -212,6 +213,7 @@ virtual_keyboard_type = 2 select_all_on_focus = true [node name="players" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/configs" index="1"] +unique_name_in_owner = true layout_mode = 2 [node name="title" type="Label" parent="content/wrapper/starter/multiplayer/configs/players" index="0"] diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 4b04b7e..4134cb4 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -14,16 +14,30 @@ extends FullscreenPanelBase @onready var disconnectBtn: Button = $"%disconnectBtn" @onready var playerNameInput: LineEdit = $"%playerNameInput" @onready var serverConfig: VBoxContainer = $"%serverConfig" +@onready var players: VBoxContainer = $"%players" @onready var playersList: VBoxContainer = $"%list" @rpc("any_peer") func joinPlayer(player: String): - playersList.add_child(QuickUI.graySmallText(player)) + if multiplayer.is_server(): + addPlayerName(player) + rebuildAllPlayers.rpc(getPlayerNames()) +@rpc("any_peer") +func leavePlayer(playerName: String): + if multiplayer.is_server(): + removePlayerName(playerName) + rebuildAllPlayers.rpc(getPlayerNames()) @rpc("any_peer") func setPlayerName(oldName: String, newName: String): for i in playersList.get_children(): if i.text == oldName: i.text = newName +@rpc("any_peer") +func rebuildAllPlayers(playerNames: Array[String]): + for i in playersList.get_children(): + i.queue_free() + for i in playerNames: + addPlayerName(i) func _ready(): diffEdit.min_value = GameRule.difficultyRange.x @@ -54,6 +68,7 @@ func _ready(): launchBtn.pressed.connect( func(): multiplayer.multiplayer_peer = MultiplayerState.launchServer(int(portInput.text)) + joinPlayer(playerNameInput.text) setState(MultiplayerState.ConnectionState.CONNECTED_HOST) ) connectBtn.pressed.connect( @@ -63,6 +78,7 @@ func _ready(): ) disconnectBtn.pressed.connect( func(): + leavePlayer.rpc(playerNameInput.text) setState(MultiplayerState.ConnectionState.DISCONNECTED) ) playerNameInput.text_changed.connect( @@ -81,3 +97,15 @@ func setState(state: MultiplayerState.ConnectionState): disconnectBtn.disabled = not MultiplayerState.isConnected() startMultiplayerBtn.disabled = not MultiplayerState.isConnected() serverConfig.visible = MultiplayerState.state == MultiplayerState.ConnectionState.CONNECTED_HOST + players.visible = MultiplayerState.isConnected() +func addPlayerName(playerName: String): + playersList.add_child(QuickUI.graySmallText(playerName)) +func removePlayerName(playerName: String): + for i in playersList.get_children(): + if i.text == playerName: + i.queue_free() +func getPlayerNames() -> Array[String]: + var result: Array[String] = [] + for i in playersList.get_children(): + result.append(i.text) + return result