本文整理汇总了C++中Ufo::getRules方法的典型用法代码示例。如果您正苦于以下问题:C++ Ufo::getRules方法的具体用法?C++ Ufo::getRules怎么用?C++ Ufo::getRules使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Ufo
的用法示例。
在下文中一共展示了Ufo::getRules方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ufoLifting
/**
* This function is called when one of the mission's UFOs has finished it's time on the ground.
* It takes care of sending the UFO to the next waypoint and marking them for removal as required.
* It must set the game data in a way that the rest of the code understands what to do.
* @param ufo The UFO that reached it's waypoint.
* @param game The saved game information.
* @param globe The earth globe, required to get access to land checks.
*/
void AlienMission::ufoLifting(Ufo &ufo, SavedGame &game, const Globe &globe)
{
switch (ufo.getStatus())
{
case Ufo::FLYING:
assert(0 && "Ufo is already on the air!");
break;
case Ufo::LANDED:
{
// base missions only get points when they are completed.
if (_rule.getPoints() > 0 && _rule.getObjective() != OBJECTIVE_BASE)
{
addScore(ufo.getLongitude(), ufo.getLatitude(), game);
}
ufo.setAltitude("STR_VERY_LOW");
ufo.setSpeed((int)(ufo.getRules()->getMaxSpeed() * ufo.getTrajectory().getSpeedPercentage(ufo.getTrajectoryPoint())));
}
break;
case Ufo::CRASHED:
// Mission expired
ufo.setDetected(false);
ufo.setStatus(Ufo::DESTROYED);
break;
case Ufo::DESTROYED:
assert(0 && "UFO can't fly!");
break;
}
}
示例2: ufoLifting
/**
* This function is called when one of the mission's UFOs has finished it's time on the ground.
* It takes care of sending the UFO to the next waypoint and marking them for removal as required.
* It must set the game data in a way that the rest of the code understands what to do.
* @param ufo The UFO that reached it's waypoint.
* @param engine The game engine, required to get access to game data and game rules.
* @param globe The earth globe, required to get access to land checks.
*/
void AlienMission::ufoLifting(Ufo &ufo, Game &engine, const Globe &globe)
{
const Ruleset &rules = *engine.getRuleset();
switch (ufo.getStatus())
{
case Ufo::FLYING:
assert(0 && "Ufo is already on the air!");
break;
case Ufo::LANDED:
{
if ((ufo.getRules()->getType() == "STR_HARVESTER" && _rule.getType() == "STR_ALIEN_HARVEST") ||
(ufo.getRules()->getType() == "STR_ABDUCTOR" && _rule.getType() == "STR_ALIEN_ABDUCTION"))
{
addScore(ufo.getLongitude(), ufo.getLatitude(), engine);
}
assert(ufo.getTrajectoryPoint() != ufo.getTrajectory().getWaypointCount() - 1);
ufo.setSpeed((int)(ufo.getRules()->getMaxSpeed() * ufo.getTrajectory().getSpeedPercentage(ufo.getTrajectoryPoint())));
ufo.setAltitude("STR_VERY_LOW");
// Set next waypoint.
Waypoint *wp = new Waypoint();
RuleRegion *region = rules.getRegion(_region);
std::pair<double, double> pos;
if (ufo.getTrajectory().getAltitude(ufo.getTrajectoryPoint() + 1) == "STR_GROUND")
{
pos = getLandPoint(globe, *region, ufo.getTrajectory().getZone(ufo.getTrajectoryPoint() + 1));
}
else
{
pos = region->getRandomPoint(ufo.getTrajectory().getZone(ufo.getTrajectoryPoint() + 1));
}
wp->setLongitude(pos.first);
wp->setLatitude(pos.second);
ufo.setDestination(wp);
ufo.setTrajectoryPoint(ufo.getTrajectoryPoint() + 1);
}
break;
case Ufo::CRASHED:
// Mission expired
ufo.setDetected(false);
ufo.setStatus(Ufo::DESTROYED);
break;
case Ufo::DESTROYED:
assert(0 && "UFO can't fly!");
break;
}
}
示例3: if
/**
* Initializes all the elements in the Briefing screen.
* @param game Pointer to the core game.
* @param craft Pointer to the craft in the mission.
* @param base Pointer to the base in the mission.
*/
BriefingState::BriefingState(Craft *craft, Base *base)
{
_screen = true;
// Create objects
_window = new Window(this, 320, 200, 0, 0);
_btnOk = new TextButton(120, 18, 100, 164);
_txtTitle = new Text(300, 32, 16, 24);
_txtTarget = new Text(300, 17, 16, 40);
_txtCraft = new Text(300, 17, 16, 56);
_txtBriefing = new Text(274, 64, 16, 72);
std::string mission = _game->getSavedGame()->getSavedBattle()->getMissionType();
AlienDeployment *deployment = _game->getRuleset()->getDeployment(mission);
Ufo * ufo = 0;
if (!deployment && craft)
{
ufo = dynamic_cast <Ufo*> (craft->getDestination());
if (ufo) // landing site or crash site.
{
deployment = _game->getRuleset()->getDeployment(ufo->getRules()->getType());
}
}
std::string title = mission;
std::string desc = title + "_BRIEFING";
if (!deployment) // none defined - should never happen, but better safe than sorry i guess.
{
setPalette("PAL_GEOSCAPE", 0);
_musicId = "GMDEFEND";
_window->setBackground(_game->getResourcePack()->getSurface("BACK16.SCR"));
}
else
{
BriefingData data = deployment->getBriefingData();
setPalette("PAL_GEOSCAPE", data.palette);
_window->setBackground(_game->getResourcePack()->getSurface(data.background));
_txtCraft->setY(56 + data.textOffset);
_txtBriefing->setY(72 + data.textOffset);
_txtTarget->setVisible(data.showTarget);
_txtCraft->setVisible(data.showCraft);
_cutsceneId = data.cutscene;
_musicId = data.music;
if (!data.title.empty())
{
title = data.title;
}
if (!data.desc.empty())
{
desc = data.desc;
}
}
add(_window, "window", "briefing");
add(_btnOk, "button", "briefing");
add(_txtTitle, "text", "briefing");
add(_txtTarget, "text", "briefing");
add(_txtCraft, "text", "briefing");
add(_txtBriefing, "text", "briefing");
centerAllSurfaces();
// Set up objects
_btnOk->setText(tr("STR_OK"));
_btnOk->onMouseClick((ActionHandler)&BriefingState::btnOkClick);
_btnOk->onKeyboardPress((ActionHandler)&BriefingState::btnOkClick, Options::keyOk);
_btnOk->onKeyboardPress((ActionHandler)&BriefingState::btnOkClick, Options::keyCancel);
_txtTitle->setBig();
_txtTarget->setBig();
_txtCraft->setBig();
std::wstring s;
if (craft)
{
if (craft->getDestination())
{
_txtTarget->setText(craft->getDestination()->getName(_game->getLanguage()));
}
s = tr("STR_CRAFT_").arg(craft->getName(_game->getLanguage()));
}
else if (base)
{
s = tr("STR_BASE_UC_").arg(base->getName());
}
_txtCraft->setText(s);
_txtTitle->setText(tr(title));
_txtBriefing->setWordWrap(true);
_txtBriefing->setText(tr(desc));
if (mission == "STR_BASE_DEFENSE")
{
//.........这里部分代码省略.........
示例4: ufoReachedWaypoint
/**
* This function is called when one of the mission's UFOs arrives at it's current destination.
* It takes care of sending the UFO to the next waypoint, landing UFOs and
* marking them for removal as required. It must set the game data in a way that the rest of the code
* understands what to do.
* @param ufo The UFO that reached it's waypoint.
* @param engine The game engine, required to get access to game data and game rules.
* @param globe The earth globe, required to get access to land checks.
*/
void AlienMission::ufoReachedWaypoint(Ufo &ufo, Game &engine, const Globe &globe)
{
const Ruleset &rules = *engine.getRuleset();
SavedGame &game = *engine.getSavedGame();
if (ufo.getTrajectoryPoint() == ufo.getTrajectory().getWaypointCount() - 1)
{
ufo.setDetected(false);
ufo.setStatus(Ufo::DESTROYED);
return;
}
ufo.setAltitude(ufo.getTrajectory().getAltitude(ufo.getTrajectoryPoint() + 1));
if (ufo.getAltitude() != "STR_GROUND")
{
if (ufo.getLandId() != 0)
{
ufo.setLandId(0);
}
ufo.setTrajectoryPoint(ufo.getTrajectoryPoint() + 1);
// Set next waypoint.
Waypoint *wp = new Waypoint();
RuleRegion *region = rules.getRegion(_region);
ufo.setSpeed((int)(ufo.getRules()->getMaxSpeed() * ufo.getTrajectory().getSpeedPercentage(ufo.getTrajectoryPoint())));
std::pair<double, double> pos;
if (ufo.getTrajectory().getAltitude(ufo.getTrajectoryPoint()) == "STR_GROUND")
{
pos = getLandPoint(globe, *region, ufo.getTrajectory().getZone(ufo.getTrajectoryPoint()));
}
else
{
pos = region->getRandomPoint(ufo.getTrajectory().getZone(ufo.getTrajectoryPoint()));
}
wp->setLongitude(pos.first);
wp->setLatitude(pos.second);
ufo.setDestination(wp);
}
else
{
// UFO landed.
if (ufo.getRules()->getType() == "STR_TERROR_SHIP" && _rule.getType() == "STR_ALIEN_TERROR" && ufo.getTrajectory().getZone(ufo.getTrajectoryPoint()) == 0)
{
// Specialized: STR_ALIEN_TERROR
// Remove UFO, replace with TerrorSite.
addScore(ufo.getLongitude(), ufo.getLatitude(), engine);
ufo.setStatus(Ufo::DESTROYED);
TerrorSite *terrorSite = new TerrorSite();
terrorSite->setLongitude(ufo.getLongitude());
terrorSite->setLatitude(ufo.getLatitude());
terrorSite->setId(game.getId("STR_TERROR_SITE"));
terrorSite->setSecondsRemaining(4 * 3600 + RNG::generate(0, 6) * 3600);
terrorSite->setAlienRace(_race);
const City *city = rules.locateCity(ufo.getLongitude(), ufo.getLatitude());
assert(city);
game.getTerrorSites()->push_back(terrorSite);
for (std::vector<Target*>::iterator t = ufo.getFollowers()->begin(); t != ufo.getFollowers()->end();)
{
Craft* c = dynamic_cast<Craft*>(*t);
if (c && c->getNumSoldiers() != 0)
{
c->setDestination(terrorSite);
t = ufo.getFollowers()->begin();
}
else
{
++t;
}
}
}
else if (_rule.getType() == "STR_ALIEN_RETALIATION" && ufo.getTrajectory().getID() == "__RETALIATION_ASSAULT_RUN")
{
// Ignore what the trajectory might say, this is a base assault.
// Remove UFO, replace with Base defense.
ufo.setDetected(false);
std::vector<Base *>::const_iterator found =
std::find_if(game.getBases()->begin(), game.getBases()->end(),
MatchBaseCoordinates(ufo.getLongitude(), ufo.getLatitude()));
if (found == game.getBases()->end())
{
ufo.setStatus(Ufo::DESTROYED);
// Only spawn mission if the base is still there.
return;
}
ufo.setDestination(*found);
}
else
{
// Set timer for UFO on the ground.
ufo.setSecondsRemaining(ufo.getTrajectory().groundTimer());
if (ufo.getDetected() && ufo.getLandId() == 0)
{
ufo.setLandId(engine.getSavedGame()->getId("STR_LANDING_SITE"));
//.........这里部分代码省略.........
示例5: ufoReachedWaypoint
/**
* This function is called when one of the mission's UFOs arrives at it's current destination.
* It takes care of sending the UFO to the next waypoint, landing UFOs and
* marking them for removal as required. It must set the game data in a way that the rest of the code
* understands what to do.
* @param ufo The UFO that reached it's waypoint.
* @param engine The game engine, required to get access to game data and game rules.
* @param globe The earth globe, required to get access to land checks.
*/
void AlienMission::ufoReachedWaypoint(Ufo &ufo, Game &engine, const Globe &globe)
{
const Ruleset &rules = *engine.getRuleset();
SavedGame &game = *engine.getSavedGame();
const size_t curWaypoint = ufo.getTrajectoryPoint();
const size_t nextWaypoint = curWaypoint + 1;
const UfoTrajectory &trajectory = ufo.getTrajectory();
int waveNumber = _nextWave - 1;
if (waveNumber < 0)
{
waveNumber = _rule.getWaveCount() - 1;
}
const MissionWave &wave = _rule.getWave(waveNumber);
if (nextWaypoint >= trajectory.getWaypointCount())
{
ufo.setDetected(false);
ufo.setStatus(Ufo::DESTROYED);
return;
}
ufo.setAltitude(trajectory.getAltitude(nextWaypoint));
ufo.setTrajectoryPoint(nextWaypoint);
const RuleRegion ®ionRules = *rules.getRegion(_region);
std::pair<double, double> pos = getWaypoint(trajectory, nextWaypoint, globe, regionRules);
Waypoint *wp = new Waypoint();
wp->setLongitude(pos.first);
wp->setLatitude(pos.second);
ufo.setDestination(wp);
if (ufo.getAltitude() != "STR_GROUND")
{
if (ufo.getLandId() != 0)
{
ufo.setLandId(0);
}
// Set next waypoint.
ufo.setSpeed((int)(ufo.getRules()->getMaxSpeed() * trajectory.getSpeedPercentage(nextWaypoint)));
}
else
{
// UFO landed.
if (wave.objective && trajectory.getZone(curWaypoint) == (size_t)(_rule.getSpawnZone()))
{
// Remove UFO, replace with MissionSite.
addScore(ufo.getLongitude(), ufo.getLatitude(), game);
ufo.setStatus(Ufo::DESTROYED);
MissionArea area = regionRules.getMissionPoint(trajectory.getZone(curWaypoint), &ufo);
Texture *texture = rules.getGlobe()->getTexture(area.texture);
AlienDeployment *deployment = rules.getDeployment(texture->getDeployment());
MissionSite *missionSite = new MissionSite(&_rule, deployment);
missionSite->setLongitude(ufo.getLongitude());
missionSite->setLatitude(ufo.getLatitude());
missionSite->setId(game.getId(deployment->getMarkerName()));
missionSite->setSecondsRemaining(RNG::generate(deployment->getDurationMin(), deployment->getDurationMax()) * 3600);
missionSite->setAlienRace(_race);
missionSite->setTexture(area.texture);
missionSite->setCity(area.name);
game.getMissionSites()->push_back(missionSite);
for (std::vector<Target*>::iterator t = ufo.getFollowers()->begin(); t != ufo.getFollowers()->end();)
{
Craft* c = dynamic_cast<Craft*>(*t);
if (c && c->getNumSoldiers() != 0)
{
c->setDestination(missionSite);
t = ufo.getFollowers()->begin();
}
else
{
++t;
}
}
}
else if (trajectory.getID() == "__RETALIATION_ASSAULT_RUN")
{
// Ignore what the trajectory might say, this is a base assault.
// Remove UFO, replace with Base defense.
ufo.setDetected(false);
std::vector<Base *>::const_iterator found =
std::find_if (game.getBases()->begin(), game.getBases()->end(),
MatchBaseCoordinates(ufo.getLongitude(), ufo.getLatitude()));
if (found == game.getBases()->end())
{
ufo.setStatus(Ufo::DESTROYED);
// Only spawn mission if the base is still there.
return;
}
ufo.setDestination(*found);
}
else
//.........这里部分代码省略.........