diff --git a/scripts/Contents/Panels/MakeFeed.gd b/scripts/Contents/Panels/MakeFeed.gd index c26cb26..99a3212 100644 --- a/scripts/Contents/Panels/MakeFeed.gd +++ b/scripts/Contents/Panels/MakeFeed.gd @@ -50,7 +50,11 @@ func updateValue(): countLabel.text = str(UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE] - selectedCount) needBB.count = refreshNeedBaseballCount func finish(): - WorldManager.rootNode.spawnWave() + var center = Vector2.ZERO + for player in EntityBase.getPlayers(): + center += player.position + center /= len(EntityBase.getPlayers()) + WorldManager.rootNode.spawnWave(center) UIState.closeCurrentPanel() func regenerateCards(): updateValue() diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 7622b7f..157174e 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -64,7 +64,7 @@ func startSingleplayerGame(): MultiplayerState.isMultiplayer = false MultiplayerState.playerName = playerNameInput.text EntityBase.generatePlayer(playerNameInput.text) - WorldManager.rootNode.spawnWave() + WorldManager.rootNode.spawnWave(Vector2.ZERO) UIState.closeCurrentPanel() func _ready(): diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index d73b394..cc6b255 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -82,13 +82,13 @@ static func entityCountOf(wave: Wave) -> int: elif !hasBoss(): return randi_range(ceil(wave.minCount), floor(wave.maxCount * (1 + GameRule.entityCountBoostPerWave * current))) return 0 -static func spawn() -> Array: +static func spawn(center: Vector2) -> Array: var result: Array = [] for i in range(len(data)): var wave: Wave = data[i] for j in range(entityCountOf(wave)): var currentWave = wave.duplicate() - currentWave.entityPosition = MathTool.randv2_range(500) + currentWave.entityPosition = MathTool.randv2_range(500) + center result.append(currentWave) return result static func next(waves: Array): diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 547bcda..05c4b93 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -466,7 +466,7 @@ func kill(): pass static func findPlayer(playerName: String) -> EntityBase: - for i in WorldManager.tree.get_nodes_in_group("players"): + for i in getPlayers(): if i.displayName == playerName: return i return null @@ -493,5 +493,15 @@ static func generate( if addToWorld: WorldManager.rootNode.spawn(instance) return instance -static func getMobs(): - return WorldManager.tree.get_nodes_in_group("mobs") +static func getMobs() -> Array[EntityBase]: + var result: Array[EntityBase] = [] + for entity in WorldManager.tree.get_nodes_in_group("mobs"): + if entity: + result.append(entity) + return result +static func getPlayers() -> Array[EntityBase]: + var result: Array[EntityBase] = [] + for entity in WorldManager.tree.get_nodes_in_group("players"): + if entity: + result.append(entity) + return result diff --git a/scripts/Tools/Managers/WorldManager.gd b/scripts/Tools/Managers/WorldManager.gd index ea0755b..918b887 100644 --- a/scripts/Tools/Managers/WorldManager.gd +++ b/scripts/Tools/Managers/WorldManager.gd @@ -19,16 +19,16 @@ func _physics_process(delta): UIState.setPanel("MakeFeed") @rpc("authority") -func nextWave(waves: Array): +func doNextWave(waves: Array): Wave.next(waves) func canNextWave(): return len(EntityBase.getMobs()) == 0 and len(ItemDropped.getDropsCanCollet()) == 0 -func spawnWave(): - var waves = Wave.spawn() - nextWave(waves) +func spawnWave(center: Vector2): + var waves = Wave.spawn(center) + doNextWave(waves) if MultiplayerState.isMultiplayer and multiplayer.is_server(): - nextWave.rpc(waves) + doNextWave.rpc(waves) func spawn(node: Node): if MultiplayerState.isMultiplayer: if multiplayer.is_server():