1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-30 15:22:30 +08:00

feat(多人游戏): 添加玩家列表管理功能

- 实现玩家加入时自动添加到列表
- 添加玩家名称修改同步功能
- 重构UI结构以支持玩家列表显示
This commit is contained in:
2025-11-09 17:29:57 +08:00
parent 79bc956b71
commit 9e78e01f08
2 changed files with 30 additions and 25 deletions
+13 -23
View File
@@ -176,31 +176,31 @@ size_flags_horizontal = 4
disabled = true disabled = true
text = "断开连接" text = "断开连接"
[node name="HBoxContainer" type="HBoxContainer" parent="content/wrapper/starter/multiplayer" index="1"] [node name="configs" type="HBoxContainer" parent="content/wrapper/starter/multiplayer" index="1"]
layout_mode = 2 layout_mode = 2
theme_override_constants/separation = 30 theme_override_constants/separation = 30
alignment = 1 alignment = 1
[node name="serverConfig" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/HBoxContainer" index="0"] [node name="serverConfig" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/configs" index="0"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
[node name="title" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/serverConfig" index="0"] [node name="title" type="Label" parent="content/wrapper/starter/multiplayer/configs/serverConfig" index="0"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
text = "服务器配置" text = "服务器配置"
[node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/starter/multiplayer/HBoxContainer/serverConfig" index="1"] [node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/starter/multiplayer/configs/serverConfig" index="1"]
layout_mode = 2 layout_mode = 2
alignment = 1 alignment = 1
[node name="title" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/serverConfig/maxPlayer" index="0"] [node name="title" type="Label" parent="content/wrapper/starter/multiplayer/configs/serverConfig/maxPlayer" index="0"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
text = "最大玩家数" text = "最大玩家数"
label_settings = SubResource("LabelSettings_i7qv0") label_settings = SubResource("LabelSettings_i7qv0")
[node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/starter/multiplayer/HBoxContainer/serverConfig/maxPlayer" index="1"] [node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/starter/multiplayer/configs/serverConfig/maxPlayer" index="1"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 4 size_flags_horizontal = 4
@@ -211,25 +211,15 @@ emoji_menu_enabled = false
virtual_keyboard_type = 2 virtual_keyboard_type = 2
select_all_on_focus = true select_all_on_focus = true
[node name="VBoxContainer" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/HBoxContainer" index="1"] [node name="players" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/configs" index="1"]
layout_mode = 2 layout_mode = 2
[node name="Label" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/VBoxContainer" index="0"] [node name="title" type="Label" parent="content/wrapper/starter/multiplayer/configs/players" index="0"]
layout_mode = 2 layout_mode = 2
text = "玩家名" size_flags_horizontal = 4
text = "玩家管理"
[node name="Label2" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/VBoxContainer" index="1"] [node name="list" type="VBoxContainer" parent="content/wrapper/starter/multiplayer/configs/players" index="1"]
unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "玩家名" alignment = 1
[node name="Label3" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/VBoxContainer" index="2"]
layout_mode = 2
text = "玩家名"
[node name="Label4" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/VBoxContainer" index="3"]
layout_mode = 2
text = "玩家名"
[node name="Label5" type="Label" parent="content/wrapper/starter/multiplayer/HBoxContainer/VBoxContainer" index="4"]
layout_mode = 2
text = "玩家名"
+17 -2
View File
@@ -14,6 +14,16 @@ extends FullscreenPanelBase
@onready var disconnectBtn: Button = $"%disconnectBtn" @onready var disconnectBtn: Button = $"%disconnectBtn"
@onready var playerNameInput: LineEdit = $"%playerNameInput" @onready var playerNameInput: LineEdit = $"%playerNameInput"
@onready var serverConfig: VBoxContainer = $"%serverConfig" @onready var serverConfig: VBoxContainer = $"%serverConfig"
@onready var playersList: VBoxContainer = $"%list"
@rpc("any_peer")
func joinPlayer(player: String):
playersList.add_child(QuickUI.graySmallText(player))
@rpc("any_peer")
func setPlayerName(oldName: String, newName: String):
for i in playersList.get_children():
if i.text == oldName:
i.text = newName
func _ready(): func _ready():
diffEdit.min_value = GameRule.difficultyRange.x diffEdit.min_value = GameRule.difficultyRange.x
@@ -22,8 +32,9 @@ func _ready():
func(): func():
setState(MultiplayerState.ConnectionState.DISCONNECTED) setState(MultiplayerState.ConnectionState.DISCONNECTED)
) )
multiplayer.peer_connected.connect( multiplayer.connected_to_server.connect(
func(): func():
joinPlayer.rpc(playerNameInput.text)
setState(MultiplayerState.ConnectionState.CONNECTED_CLIENT) setState(MultiplayerState.ConnectionState.CONNECTED_CLIENT)
) )
startBtn.pressed.connect( startBtn.pressed.connect(
@@ -42,7 +53,7 @@ func _ready():
) )
launchBtn.pressed.connect( launchBtn.pressed.connect(
func(): func():
MultiplayerState.launchServer(int(portInput.text)) multiplayer.multiplayer_peer = MultiplayerState.launchServer(int(portInput.text))
setState(MultiplayerState.ConnectionState.CONNECTED_HOST) setState(MultiplayerState.ConnectionState.CONNECTED_HOST)
) )
connectBtn.pressed.connect( connectBtn.pressed.connect(
@@ -54,6 +65,10 @@ func _ready():
func(): func():
setState(MultiplayerState.ConnectionState.DISCONNECTED) setState(MultiplayerState.ConnectionState.DISCONNECTED)
) )
playerNameInput.text_changed.connect(
func(text):
setPlayerName.rpc(playerNameInput.text, text)
)
setState(MultiplayerState.ConnectionState.DISCONNECTED) setState(MultiplayerState.ConnectionState.DISCONNECTED)
func _physics_process(_delta): func _physics_process(_delta):
levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value] levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value]