本文整理汇总了C++中Ufo::getTrajectoryPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ Ufo::getTrajectoryPoint方法的具体用法?C++ Ufo::getTrajectoryPoint怎么用?C++ Ufo::getTrajectoryPoint使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Ufo
的用法示例。
在下文中一共展示了Ufo::getTrajectoryPoint方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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 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;
}
}
示例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 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;
}
}
示例3: 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"));
//.........这里部分代码省略.........
示例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();
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
//.........这里部分代码省略.........