| 151 | }; |
| 152 | |
| 153 | void AlienMission::think(Game &engine, const Globe &globe) |
| 154 | { |
| 155 | const Ruleset &ruleset = *engine.getRuleset(); |
| 156 | SavedGame &game = *engine.getSavedGame(); |
| 157 | if (_nextWave >= _rule.getWaveCount()) |
| 158 | return; |
| 159 | if (_spawnCountdown > 30) |
| 160 | { |
| 161 | _spawnCountdown -= 30; |
| 162 | return; |
| 163 | } |
| 164 | const MissionWave &wave = _rule.getWave(_nextWave); |
| 165 | RuleUfo &ufoRule = *ruleset.getUfo(wave.ufoType); |
| 166 | const UfoTrajectory &trajectory = *ruleset.getUfoTrajectory(wave.trajectory); |
| 167 | Ufo *ufo = spawnUfo(game, ruleset, globe, ufoRule, trajectory); |
| 168 | if (ufo) |
| 169 | { |
| 170 | //Some missions may not spawn a UFO! |
| 171 | game.getUfos()->push_back(ufo); |
| 172 | } |
| 173 | ++_nextUfoCounter; |
| 174 | if (_nextUfoCounter == wave.ufoCount) |
| 175 | { |
| 176 | _nextUfoCounter = 0; |
| 177 | ++_nextWave; |
| 178 | } |
| 179 | if (_rule.getType() == "STR_ALIEN_INFILTRATION" && _nextWave == _rule.getWaveCount()) |
| 180 | { |
| 181 | for (std::vector<Country*>::iterator c = game.getCountries()->begin(); c != game.getCountries()->end(); ++c) |
| 182 | { |
| 183 | if (!(*c)->getPact() && !(*c)->getNewPact() && ruleset.getRegion(_region)->insideRegion((*c)->getRules()->getLabelLongitude(), (*c)->getRules()->getLabelLatitude())) |
| 184 | { |
| 185 | (*c)->setNewPact(); |
| 186 | spawnAlienBase(globe, engine); |
| 187 | break; |
| 188 | } |
| 189 | } |
| 190 | |
| 191 | |
| 192 | // Infiltrations loop for ever. |
| 193 | _nextWave = 0; |
| 194 | } |
| 195 | if (_rule.getType() == "STR_ALIEN_BASE" && _nextWave == _rule.getWaveCount()) |
| 196 | { |
| 197 | spawnAlienBase(globe, engine); |
| 198 | } |
| 199 | if (_nextWave != _rule.getWaveCount()) |
| 200 | { |
| 201 | size_t spawnTimer = _rule.getWave(_nextWave).spawnTimer / 30; |
| 202 | _spawnCountdown = (spawnTimer/2 + RNG::generate(0, spawnTimer)) * 30; |
| 203 | } |
| 204 | } |
| 205 | |
| 206 | /** |
| 207 | * This function will spawn a UFO according the the mission rules. |
nothing calls this directly
no test coverage detected