1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +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
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
theme_override_constants/separation = 30
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
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
size_flags_horizontal = 4
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
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
size_flags_horizontal = 4
text = "最大玩家数"
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
layout_mode = 2
size_flags_horizontal = 4
@@ -211,25 +211,15 @@ emoji_menu_enabled = false
virtual_keyboard_type = 2
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
[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
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
text = "玩家名"
[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 = "玩家名"
alignment = 1
+17 -2
View File
@@ -14,6 +14,16 @@ extends FullscreenPanelBase
@onready var disconnectBtn: Button = $"%disconnectBtn"
@onready var playerNameInput: LineEdit = $"%playerNameInput"
@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():
diffEdit.min_value = GameRule.difficultyRange.x
@@ -22,8 +32,9 @@ func _ready():
func():
setState(MultiplayerState.ConnectionState.DISCONNECTED)
)
multiplayer.peer_connected.connect(
multiplayer.connected_to_server.connect(
func():
joinPlayer.rpc(playerNameInput.text)
setState(MultiplayerState.ConnectionState.CONNECTED_CLIENT)
)
startBtn.pressed.connect(
@@ -42,7 +53,7 @@ func _ready():
)
launchBtn.pressed.connect(
func():
MultiplayerState.launchServer(int(portInput.text))
multiplayer.multiplayer_peer = MultiplayerState.launchServer(int(portInput.text))
setState(MultiplayerState.ConnectionState.CONNECTED_HOST)
)
connectBtn.pressed.connect(
@@ -54,6 +65,10 @@ func _ready():
func():
setState(MultiplayerState.ConnectionState.DISCONNECTED)
)
playerNameInput.text_changed.connect(
func(text):
setPlayerName.rpc(playerNameInput.text, text)
)
setState(MultiplayerState.ConnectionState.DISCONNECTED)
func _physics_process(_delta):
levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value]