/** * Enters the mission. * @param action Pointer to an action. */ void ConfirmLandingState::btnYesClick(Action *action) { _game->popState(); Ufo* u = dynamic_cast<Ufo*>(_craft->getDestination()); TerrorSite* t = dynamic_cast<TerrorSite*>(_craft->getDestination()); AlienBase* b = dynamic_cast<AlienBase*>(_craft->getDestination()); if (u != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); if(u->getStatus() == Ufo::CRASHED) bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); else bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setUfo(u); bgen.setAlienRace(u->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } else if (t != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_TERROR_MISSION"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setTerrorSite(t); bgen.setAlienRace(t->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } else if (b != 0) { SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType("STR_ALIEN_BASE_ASSAULT"); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); bgen.setAlienBase(b); bgen.setAlienRace(b->getAlienRace()); bgen.setAlienItemlevel(0); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); } }
/** * Spawn an alien base. * @param globe The earth globe, required to get access to land checks. * @param engine The game engine, required to get access to game data and game rules. * @param zone The mission zone, required for determining the base coordinates. */ void AlienMission::spawnAlienBase(const Globe &globe, Game &engine, int zone) { SavedGame &game = *engine.getSavedGame(); const Ruleset &ruleset = *engine.getRuleset(); // Once the last UFO is spawned, the aliens build their base. const RuleRegion ®ionRules = *ruleset.getRegion(_region); std::pair<double, double> pos = getLandPoint(globe, regionRules, zone); AlienBase *ab = new AlienBase(); ab->setAlienRace(_race); ab->setId(game.getId("STR_ALIEN_BASE")); ab->setLongitude(pos.first); ab->setLatitude(pos.second); game.getAlienBases()->push_back(ab); addScore(pos.first, pos.second, game); }
/** * Enters the mission. * @param action Pointer to an action. */ void ConfirmLandingState::btnYesClick(Action *) { _game->popState(); _state->musicStop(); Ufo* u = dynamic_cast<Ufo*>(_craft->getDestination()); TerrorSite* t = dynamic_cast<TerrorSite*>(_craft->getDestination()); AlienBase* b = dynamic_cast<AlienBase*>(_craft->getDestination()); size_t month = _game->getSavedGame()->getMonthsPassed(); if (month > _game->getRuleset()->getAlienItemLevels().size()-1) month = _game->getRuleset()->getAlienItemLevels().size()-1; SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); BattlescapeGenerator bgen = BattlescapeGenerator(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); if (u != 0) { if(u->getStatus() == Ufo::CRASHED) bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); else bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); bgen.setUfo(u); bgen.setAlienRace(u->getAlienRace()); } else if (t != 0) { bgame->setMissionType("STR_TERROR_MISSION"); bgen.setTerrorSite(t); bgen.setAlienRace(t->getAlienRace()); } else if (b != 0) { bgame->setMissionType("STR_ALIEN_BASE_ASSAULT"); bgen.setAlienBase(b); bgen.setAlienRace(b->getAlienRace()); } else { throw Exception("No mission available!"); } bgen.setAlienItemlevel(_game->getRuleset()->getAlienItemLevels().at(month).at(RNG::generate(0,9))); bgen.run(); _game->pushState(new BriefingState(_game, _craft)); }
/** * Enters the mission. * @param action Pointer to an action. */ void ConfirmLandingState::btnYesClick(Action *) { _game->popState(); Ufo* u = dynamic_cast<Ufo*>(_craft->getDestination()); MissionSite* m = dynamic_cast<MissionSite*>(_craft->getDestination()); AlienBase* b = dynamic_cast<AlienBase*>(_craft->getDestination()); SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); BattlescapeGenerator bgen(_game); bgen.setWorldTexture(_texture); bgen.setWorldShade(_shade); bgen.setCraft(_craft); if (u != 0) { if (u->getStatus() == Ufo::CRASHED) bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); else bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); bgen.setUfo(u); bgen.setAlienRace(u->getAlienRace()); } else if (m != 0) { bgame->setMissionType(m->getDeployment()->getType()); bgen.setMissionSite(m); bgen.setAlienRace(m->getAlienRace()); } else if (b != 0) { bgame->setMissionType(b->getDeployment()->getType()); bgen.setAlienBase(b); bgen.setAlienRace(b->getAlienRace()); bgen.setWorldTexture(0); } else { throw Exception("No mission available!"); } bgen.run(); _game->pushState(new BriefingState(_craft)); }
/** * Starts the battle. * @param action Pointer to an action. */ void NewBattleState::btnOkClick(Action *) { save(); if (_missionTypes[_cbxMission->getSelected()] != "STR_BASE_DEFENSE" && _craft->getNumSoldiers() == 0 && _craft->getNumVehicles() == 0) { return; } SavedBattleGame *bgame = new SavedBattleGame(); _game->getSavedGame()->setBattleGame(bgame); bgame->setMissionType(_missionTypes[_cbxMission->getSelected()]); BattlescapeGenerator bgen = BattlescapeGenerator(_game); Base *base = 0; bgen.setTerrain(_game->getMod()->getTerrain(_terrainTypes[_cbxTerrain->getSelected()])); // base defense if (_missionTypes[_cbxMission->getSelected()] == "STR_BASE_DEFENSE") { base = _craft->getBase(); bgen.setBase(base); _craft = 0; } // alien base else if (_game->getMod()->getDeployment(bgame->getMissionType())->isAlienBase()) { AlienBase *b = new AlienBase(_game->getMod()->getDeployment(bgame->getMissionType())); b->setId(1); b->setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); _craft->setDestination(b); bgen.setAlienBase(b); _game->getSavedGame()->getAlienBases()->push_back(b); } // ufo assault else if (_craft && _game->getMod()->getUfo(_missionTypes[_cbxMission->getSelected()])) { Ufo *u = new Ufo(_game->getMod()->getUfo(_missionTypes[_cbxMission->getSelected()])); u->setId(1); _craft->setDestination(u); bgen.setUfo(u); // either ground assault or ufo crash if (RNG::generate(0,1) == 1) { u->setStatus(Ufo::LANDED); bgame->setMissionType("STR_UFO_GROUND_ASSAULT"); } else { u->setStatus(Ufo::CRASHED); bgame->setMissionType("STR_UFO_CRASH_RECOVERY"); } _game->getSavedGame()->getUfos()->push_back(u); } // mission site else { const AlienDeployment *deployment = _game->getMod()->getDeployment(bgame->getMissionType()); const RuleAlienMission *mission = _game->getMod()->getAlienMission(_game->getMod()->getAlienMissionList().front()); // doesn't matter MissionSite *m = new MissionSite(mission, deployment); m->setId(1); m->setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); _craft->setDestination(m); bgen.setMissionSite(m); _game->getSavedGame()->getMissionSites()->push_back(m); } if (_craft) { _craft->setSpeed(0); bgen.setCraft(_craft); } _game->getSavedGame()->setDifficulty((GameDifficulty)_cbxDifficulty->getSelected()); bgen.setWorldShade(_slrDarkness->getValue()); bgen.setAlienRace(_alienRaces[_cbxAlienRace->getSelected()]); bgen.setAlienItemlevel(_slrAlienTech->getValue()); bgame->setDepth(_slrDepth->getValue()); bgen.run(); _game->popState(); _game->popState(); _game->pushState(new BriefingState(_craft, base)); _craft = 0; }