1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-29 23:41:54 +08:00

feat(多人游戏): 实现基础多人游戏功能

- 添加玩家位置同步功能
- 实现服务器和客户端连接管理
- 添加玩家名称输入和生成逻辑
- 完善多人游戏UI界面
- 移除单机模式下的预设玩家角色
This commit is contained in:
2025-11-09 17:00:39 +08:00
parent c28d725d3e
commit 79bc956b71
5 changed files with 117 additions and 20 deletions
+28
View File
@@ -3,6 +3,7 @@ extends FullscreenPanelBase
@onready var diffEdit: HSlider = $"%diffEdit"
@onready var startBtn: Button = $"%startBtn"
@onready var startMultiplayerBtn: Button = $"%startMultiplayerBtn"
@onready var levelShow: Label = $"%levelShow"
@onready var hostInput: LineEdit = $"%hostInput"
@onready var portInput: LineEdit = $"%portInput"
@@ -11,15 +12,30 @@ extends FullscreenPanelBase
@onready var maxPlayerInput: LineEdit = $"%maxPlayerInput"
@onready var connectionState: Label = $"%connectionState"
@onready var disconnectBtn: Button = $"%disconnectBtn"
@onready var playerNameInput: LineEdit = $"%playerNameInput"
@onready var serverConfig: VBoxContainer = $"%serverConfig"
func _ready():
diffEdit.min_value = GameRule.difficultyRange.x
diffEdit.max_value = GameRule.difficultyRange.y
multiplayer.connection_failed.connect(
func():
setState(MultiplayerState.ConnectionState.DISCONNECTED)
)
multiplayer.peer_connected.connect(
func():
setState(MultiplayerState.ConnectionState.CONNECTED_CLIENT)
)
startBtn.pressed.connect(
func():
EntityBase.generatePlayer(playerNameInput.text)
Wave.next()
UIState.closeCurrentPanel()
)
startMultiplayerBtn.pressed.connect(
func():
pass
)
maxPlayerInput.text_changed.connect(
func(text):
MultiplayerState.maxPlayer = int(text)
@@ -27,6 +43,16 @@ func _ready():
launchBtn.pressed.connect(
func():
MultiplayerState.launchServer(int(portInput.text))
setState(MultiplayerState.ConnectionState.CONNECTED_HOST)
)
connectBtn.pressed.connect(
func():
multiplayer.multiplayer_peer = MultiplayerState.connectClient(hostInput.text, int(portInput.text))
setState(MultiplayerState.ConnectionState.CONNECTING)
)
disconnectBtn.pressed.connect(
func():
setState(MultiplayerState.ConnectionState.DISCONNECTED)
)
setState(MultiplayerState.ConnectionState.DISCONNECTED)
func _physics_process(_delta):
@@ -38,3 +64,5 @@ func setState(state: MultiplayerState.ConnectionState):
connectionState.text = "状态:%s" % MultiplayerState.stateTextMap[state]
connectionState.modulate = MultiplayerState.stateColorMap[state]
disconnectBtn.disabled = not MultiplayerState.isConnected()
startMultiplayerBtn.disabled = not MultiplayerState.isConnected()
serverConfig.visible = MultiplayerState.state == MultiplayerState.ConnectionState.CONNECTED_HOST