MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / think

Method think

src/Savegame/AlienMission.cpp:153–204  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

151};
152
153void 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.

Callers

nothing calls this directly

Calls 15

generateFunction · 0.85
getSavedGameMethod · 0.80
getWaveCountMethod · 0.80
getUfoTrajectoryMethod · 0.80
getUfosMethod · 0.80
getCountriesMethod · 0.80
getPactMethod · 0.80
getNewPactMethod · 0.80
insideRegionMethod · 0.80
getRegionMethod · 0.80
getLabelLongitudeMethod · 0.80
getLabelLatitudeMethod · 0.80

Tested by

no test coverage detected