Remove continue statements from chat iteration loop
authorTheSaminator <TheSaminator@users.noreply.github.com>
Fri, 10 Jun 2022 18:22:22 +0000 (14:22 -0400)
committerTheSaminator <TheSaminator@users.noreply.github.com>
Fri, 10 Jun 2022 18:22:22 +0000 (14:22 -0400)
src/commonMain/kotlin/net/starshipfights/game/ai/ai_behaviors.kt

index c1962dacf197951488b160477342dfda19f64dfd..f0d7377a00d8d82a1be3dd4bcb1a74f8e28ad958 100644 (file)
@@ -32,7 +32,7 @@ suspend fun AIPlayer.behave(instincts: Instincts, mySide: GlobalSide) {
                                for (state in gameState.produceIn(this)) {
                                        phasePipe.send(state.phase to (state.doneWithPhase != mySide && (!state.phase.usesInitiative || state.currentInitiative != mySide.other)))
                                        
-                                       chatLoop@ for (msg in state.chatBox.takeLastWhile { msg -> msg.sentAt > prevSentAt }) {
+                                       for (msg in state.chatBox.takeLastWhile { msg -> msg.sentAt > prevSentAt }) {
                                                if (msg.sentAt > prevSentAt)
                                                        prevSentAt = msg.sentAt
                                                
@@ -41,36 +41,41 @@ suspend fun AIPlayer.behave(instincts: Instincts, mySide: GlobalSide) {
                                                                // ignore
                                                        }
                                                        is ChatEntry.ShipIdentified -> {
-                                                               val identifiedShip = state.ships[msg.ship] ?: continue@chatLoop
-                                                               if (identifiedShip.owner != mySide)
-                                                                       brain[shipAttackPriority forShip identifiedShip.id] += (identifiedShip.ship.shipType.weightClass.tier.ordinal + 1.5).pow(instincts[combatTargetShipWeight])
+                                                               state.ships[msg.ship]?.let { identifiedShip ->
+                                                                       if (identifiedShip.owner != mySide)
+                                                                               brain[shipAttackPriority forShip identifiedShip.id] += (identifiedShip.ship.shipType.weightClass.tier.ordinal + 1.5).pow(instincts[combatTargetShipWeight])
+                                                               }
                                                        }
                                                        is ChatEntry.ShipEscaped -> {
                                                                // handle escaping ship
                                                        }
                                                        is ChatEntry.ShipAttacked -> {
-                                                               val targetedShip = state.ships[msg.ship] ?: continue@chatLoop
-                                                               if (targetedShip.owner != mySide)
-                                                                       brain[shipAttackPriority forShip targetedShip.id] -= Random.nextDouble(msg.damageInflicted - 0.5, msg.damageInflicted + 0.5) * instincts[combatForgiveTarget]
-                                                               else if (msg.attacker is ShipAttacker.EnemyShip)
-                                                                       brain[shipAttackPriority forShip msg.attacker.id] += Random.nextDouble(msg.damageInflicted - 0.5, msg.damageInflicted + 0.5) * instincts[combatAvengeAttacks]
+                                                               state.ships[msg.ship]?.let { targetedShip ->
+                                                                       if (targetedShip.owner != mySide)
+                                                                               brain[shipAttackPriority forShip targetedShip.id] -= Random.nextDouble(msg.damageInflicted.toDouble(), msg.damageInflicted + 1.0) * instincts[combatForgiveTarget]
+                                                                       else if (msg.attacker is ShipAttacker.EnemyShip)
+                                                                               brain[shipAttackPriority forShip msg.attacker.id] += Random.nextDouble(msg.damageInflicted.toDouble(), msg.damageInflicted + 1.0) * instincts[combatAvengeAttacks]
+                                                               }
                                                        }
                                                        is ChatEntry.ShipAttackFailed -> {
-                                                               val targetedShip = state.ships[msg.ship] ?: continue@chatLoop
-                                                               if (targetedShip.owner != mySide)
-                                                                       brain[shipAttackPriority forShip targetedShip.id] += instincts[combatFrustratedByFailedAttacks]
+                                                               state.ships[msg.ship]?.let { targetedShip ->
+                                                                       if (targetedShip.owner != mySide)
+                                                                               brain[shipAttackPriority forShip targetedShip.id] += instincts[combatFrustratedByFailedAttacks]
+                                                               }
                                                        }
                                                        is ChatEntry.ShipBoarded -> {
-                                                               val targetedShip = state.ships[msg.ship] ?: continue@chatLoop
-                                                               if (targetedShip.owner != mySide)
-                                                                       brain[shipAttackPriority forShip targetedShip.id] -= Random.nextDouble(msg.damageAmount - 0.5, msg.damageAmount + 0.5) * instincts[combatForgiveTarget]
-                                                               else
-                                                                       brain[shipAttackPriority forShip msg.boarder] += Random.nextDouble(msg.damageAmount - 0.5, msg.damageAmount + 0.5) * instincts[combatAvengeAttacks]
+                                                               state.ships[msg.ship]?.let { targetedShip ->
+                                                                       if (targetedShip.owner != mySide)
+                                                                               brain[shipAttackPriority forShip targetedShip.id] -= Random.nextDouble(msg.damageAmount.toDouble(), msg.damageAmount + 1.0) * instincts[combatForgiveTarget]
+                                                                       else
+                                                                               brain[shipAttackPriority forShip msg.boarder] += Random.nextDouble(msg.damageAmount.toDouble(), msg.damageAmount + 1.0) * instincts[combatAvengeAttacks]
+                                                               }
                                                        }
                                                        is ChatEntry.ShipDestroyed -> {
-                                                               val targetedShip = state.destroyedShips[msg.ship] ?: continue@chatLoop
-                                                               if (targetedShip.owner == mySide && msg.destroyedBy is ShipAttacker.EnemyShip)
-                                                                       brain[shipAttackPriority forShip msg.destroyedBy.id] += instincts[combatAvengeShipwrecks] * (targetedShip.ship.shipType.weightClass.tier.ordinal + 1.5).pow(instincts[combatAvengeShipWeight])
+                                                               state.destroyedShips[msg.ship]?.let { targetedShip ->
+                                                                       if (targetedShip.owner == mySide && msg.destroyedBy is ShipAttacker.EnemyShip)
+                                                                               brain[shipAttackPriority forShip msg.destroyedBy.id] += instincts[combatAvengeShipwrecks] * (targetedShip.ship.shipType.weightClass.tier.ordinal + 1.5).pow(instincts[combatAvengeShipWeight])
+                                                               }
                                                        }
                                                }
                                        }