| 1174 | } |
| 1175 | |
| 1176 | sp<BattleExplosion> Battle::addExplosion(GameState &state, Vec3<int> position, |
| 1177 | StateRef<DoodadType> doodadType, |
| 1178 | StateRef<DamageType> damageType, int power, |
| 1179 | int depletionRate, StateRef<Organisation> ownerOrg, |
| 1180 | StateRef<BattleUnit> ownerUnit) |
| 1181 | { |
| 1182 | // Doodad |
| 1183 | if (!doodadType) |
| 1184 | { |
| 1185 | doodadType = {&state, "DOODAD_30_EXPLODING_PAYLOAD"}; |
| 1186 | } |
| 1187 | placeDoodad(doodadType, position); |
| 1188 | |
| 1189 | // Sound |
| 1190 | if (!damageType->explosionSounds.empty()) |
| 1191 | { |
| 1192 | fw().soundBackend->playSample(pickRandom(state.rng, damageType->explosionSounds), position); |
| 1193 | } |
| 1194 | |
| 1195 | // Explosion |
| 1196 | auto explosion = mksp<BattleExplosion>( |
| 1197 | position, damageType, power, depletionRate, |
| 1198 | !config().getBool("OpenApoc.NewFeature.InstantExplosionDamage"), ownerOrg, ownerUnit); |
| 1199 | explosions.insert(explosion); |
| 1200 | return explosion; |
| 1201 | } |
| 1202 | |
| 1203 | sp<BattleUnit> Battle::placeUnit(GameState &state, StateRef<Agent> agent) |
| 1204 | { |
no test coverage detected