diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index f858141..355d026 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -53,11 +53,11 @@ func rebuildAllPlayers(playerNames: Array[String]): addPlayerName(i) @rpc("any_peer") func startMultiplayerGame(): - if multiplayer.is_server(): - for i in getPlayerNames(): - EntityBase.generatePlayer(i) - Wave.next() - UIState.closeCurrentPanel() + MultiplayerState.playerName = playerNameInput.text + for i in getPlayerNames(): + EntityBase.generatePlayer(i) + Wave.next() + UIState.closeCurrentPanel() func _ready(): historyStack = Composables.useHistoryStack(playerNameInput) diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 5170b2e..94cb0f5 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -169,13 +169,16 @@ func _physics_process(_delta: float) -> void: else: velocity = Vector2.ZERO if (isPlayer() or is_instance_valid(currentFocusedBoss)) and not charginup and canRunAi: - ai() + if isPlayer(): + if MultiplayerState.playerName == displayName: + ai() + else: + ai() elif isSummon(): ai() move_and_slide() storeEnergy(randf_range(0.01, 0.05 + fields.get(FieldStore.Entity.ENERGY_REGENERATION) - 1), true) trailParticle.emitting = trailing - rpc("syncPosition", displayName, position) # 通用方法 func rebuildWeaponIcons(): @@ -394,21 +397,6 @@ func summon(who: PackedScene, syncFields: bool = true, lockValue: bool = true) - get_parent().add_child(instance) return instance -# 多人游戏数据同步 -@rpc("any_peer") -func syncPosition(player: String, newPosition: Vector2): - if player == displayName: - position = newPosition -@rpc("any_peer") -func syncHealth(player: String, newHealth: float): - if player == displayName: - health = newHealth - healthChanged.emit(health) -@rpc("any_peer") -func syncAttack(player: String, index: int): - if player == displayName: - tryAttack(index) - # 关于追踪 func getTrackingAnchor() -> Vector2: return hurtbox.get_node("hitbox").global_position diff --git a/scripts/Tools/Managers/MultiplayerState.gd b/scripts/Tools/Managers/MultiplayerState.gd index 5e19ac4..95cccfa 100644 --- a/scripts/Tools/Managers/MultiplayerState.gd +++ b/scripts/Tools/Managers/MultiplayerState.gd @@ -21,6 +21,7 @@ static var stateColorMap = { } static var state: ConnectionState = ConnectionState.DISCONNECTED +static var playerName: String static var maxPlayer: int = 10