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:
@@ -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 = "玩家名"
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user