本文整理汇总了C++中SavedGame类的典型用法代码示例。如果您正苦于以下问题:C++ SavedGame类的具体用法?C++ SavedGame怎么用?C++ SavedGame使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SavedGame类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
/**
* Returns to the previous screen.
* @param action Pointer to an action.
*/
void NewGameState::btnOkClick(Action *)
{
GameDifficulty diff = DIFF_BEGINNER;
if (_difficulty == _btnBeginner)
{
diff = DIFF_BEGINNER;
}
else if (_difficulty == _btnExperienced)
{
diff = DIFF_EXPERIENCED;
}
else if (_difficulty == _btnVeteran)
{
diff = DIFF_VETERAN;
}
else if (_difficulty == _btnGenius)
{
diff = DIFF_GENIUS;
}
else if (_difficulty == _btnSuperhuman)
{
diff = DIFF_SUPERHUMAN;
}
SavedGame *save = _game->getMod()->newSave();
save->setDifficulty(diff);
save->setIronman(_btnIronman->getPressed());
_game->setSavedGame(save);
GeoscapeState *gs = new GeoscapeState;
_game->setState(gs);
gs->init();
_game->pushState(new BuildNewBaseState(_game->getSavedGame()->getBases()->back(), gs->getGlobe(), true));
}
示例2: XcomRuleset
/**
* Loads the selected save.
* @param action Pointer to an action.
*/
void LoadGameState::lstSavesClick(Action *action)
{
try
{
_game->setRuleset(new XcomRuleset());
SavedGame *s = new SavedGame(DIFF_BEGINNER);
s->load(Language::wstrToUtf8(_lstSaves->getCell(_lstSaves->getSelectedRow(), 0)->getText()), _game->getRuleset());
_game->setSavedGame(s);
if (_game->getSavedGame()->getBattleGame() == 0)
{
_game->setState(new GeoscapeState(_game));
}
else
{
_game->setState(new BattlescapeState(_game));
}
}
catch (Exception &e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
_game->pushState(new GeoscapeErrorState(_game, "STR_LOAD_UNSUCCESSFUL"));
}
catch (YAML::Exception &e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
_game->pushState(new GeoscapeErrorState(_game, "STR_LOAD_UNSUCCESSFUL"));
}
}
示例3: updateStatus
/**
* Loads the selected save.
* @param action Pointer to an action.
*/
void LoadState::lstSavesPress(Action *action)
{
if (action->getDetails()->button.button == SDL_BUTTON_LEFT)
{
updateStatus("STR_LOADING_GAME");
SavedGame *s = new SavedGame();
try
{
#ifdef _WIN32
std::string filename = Language::wstrToCp(_lstSaves->getCellText(_lstSaves->getSelectedRow(), 0));
#else
std::string filename = Language::wstrToUtf8(_lstSaves->getCellText(_lstSaves->getSelectedRow(), 0));
#endif
s->load(filename, _game->getRuleset());
_game->setSavedGame(s);
_game->setState(new GeoscapeState(_game));
if (_game->getSavedGame()->getBattleGame() != 0)
{
_game->getSavedGame()->getBattleGame()->loadMapResources(_game->getResourcePack());
BattlescapeState *bs = new BattlescapeState(_game);
_game->pushState(bs);
_game->getSavedGame()->getBattleGame()->setBattleState(bs);
}
}
catch (Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wstringstream error;
error << _game->getLanguage()->getString("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(0), "TAC00.SCR", -1));
delete s;
_game->setSavedGame(0);
}
catch (YAML::Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wstringstream error;
error << _game->getLanguage()->getString("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(0), "TAC00.SCR", -1));
delete s;
_game->setSavedGame(0);
}
}
else if (action->getDetails()->button.button == SDL_BUTTON_RIGHT)
{
if(_geo)
_game->pushState(new DeleteGameState(_game, _lstSaves->getCellText(_lstSaves->getSelectedRow(),0), Palette::blockOffset(8)+10, "BACK01.SCR", 6, this));
else
_game->pushState(new DeleteGameState(_game, _lstSaves->getCellText(_lstSaves->getSelectedRow(),0), Palette::blockOffset(0), "TAC00.SCR", -1, this));
}
}
示例4: SavedGame
/**
* Quick load game.
* @param filename16 name of file without ".sav"
*/
void LoadState::quickLoad(const std::wstring &filename16)
{
if (_showMsg) updateStatus("STR_LOADING_GAME");
#ifdef _WIN32
std::string filename = Language::wstrToCp(filename16);
#else
std::string filename = Language::wstrToUtf8(filename16);
#endif
SavedGame *s = new SavedGame();
try
{
s->load(filename, _game->getRuleset());
_game->setSavedGame(s);
_game->setState(new GeoscapeState(_game));
if (_game->getSavedGame()->getSavedBattle() != 0)
{
_game->getSavedGame()->getSavedBattle()->loadMapResources(_game);
BattlescapeState *bs = new BattlescapeState(_game);
_game->pushState(bs);
_game->getSavedGame()->getSavedBattle()->setBattleState(bs);
}
}
catch (Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wstringstream error;
error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(0), "TAC00.SCR", -1));
if (_game->getSavedGame() == s)
_game->setSavedGame(0);
else
delete s;
}
catch (YAML::Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wstringstream error;
error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error.str(), Palette::blockOffset(0), "TAC00.SCR", -1));
if (_game->getSavedGame() == s)
_game->setSavedGame(0);
else
delete s;
}
}
示例5: SavedGame
/**
* Loads the specified save.
*/
void LoadGameState::think()
{
State::think();
// Make sure it gets drawn properly
if (_firstRun < 10)
{
_firstRun++;
}
else
{
_game->popState();
// Load the game
SavedGame *s = new SavedGame();
try
{
s->load(_filename, _game->getMod());
_game->setSavedGame(s);
if (_game->getSavedGame()->getEnding() != END_NONE)
{
Options::baseXResolution = Screen::ORIGINAL_WIDTH;
Options::baseYResolution = Screen::ORIGINAL_HEIGHT;
_game->getScreen()->resetDisplay(false);
_game->setState(new StatisticsState);
}
else
{
Options::baseXResolution = Options::baseXGeoscape;
Options::baseYResolution = Options::baseYGeoscape;
_game->getScreen()->resetDisplay(false);
_game->setState(new GeoscapeState);
if (_game->getSavedGame()->getSavedBattle() != 0)
{
_game->getSavedGame()->getSavedBattle()->loadMapResources(_game->getMod());
Options::baseXResolution = Options::baseXBattlescape;
Options::baseYResolution = Options::baseYBattlescape;
_game->getScreen()->resetDisplay(false);
BattlescapeState *bs = new BattlescapeState;
_game->pushState(bs);
_game->getSavedGame()->getSavedBattle()->setBattleState(bs);
}
}
}
catch (Exception &e)
{
error(e.what(), s);
}
catch (YAML::Exception &e)
{
error(e.what(), s);
}
CrossPlatform::flashWindow();
}
}
示例6: load
/**
* Loads the UFO from a YAML file.
* @param node YAML node.
* @param ruleset The game rules. Use to access the trajectory rules.
* @param game The game data. Used to find the UFO's mission.
*/
void Ufo::load(const YAML::Node &node, const Ruleset &ruleset, SavedGame &game)
{
MovingTarget::load(node);
node["id"] >> _id;
node["damage"] >> _damage;
node["altitude"] >> _altitude;
node["direction"] >> _direction;
node["detected"] >> _detected;
node["hyperDetected"] >> _hyperDetected;
node["secondsRemaining"] >> _secondsRemaining;
node["inBattlescape"] >> _inBattlescape;
double lon, lat;
node["dest"]["lon"] >> lon;
node["dest"]["lat"] >> lat;
_dest = new Waypoint();
_dest->setLongitude(lon);
_dest->setLatitude(lat);
if (_altitude == "STR_GROUND")
{
_status = LANDED;
}
else
{
_status = FLYING;
}
if (_damage >= _rules->getMaxDamage())
{
_status = DESTROYED;
}
else if (_damage >= _rules->getMaxDamage() / 2)
{
_status = CRASHED;
}
int missionID;
node["mission"] >> missionID;
std::vector<AlienMission *>::const_iterator found = std::find_if(game.getAlienMissions().begin(), game.getAlienMissions().end(), matchMissionID(missionID));
if (found == game.getAlienMissions().end())
{
// Corrupt save file.
throw Exception("Unknown mission, save file is corrupt.");
}
_mission = *found;
std::string tid;
node["trajectory"] >> tid;
_trajectory = ruleset.getUfoTrajectory(tid);
node["trajectoryPoint"] >> _trajectoryPoint;
if (_inBattlescape)
setSpeed(0);
}
示例7: SavedGame
/**
* Loads the selected save.
* @param action Pointer to an action.
*/
void LoadGameState::lstSavesClick(Action *action)
{
//Ruleset *r = new XcomRuleset();
SavedGame *s = new SavedGame();
try
{
//_game->setRuleset(r);
s->load(Language::wstrToUtf8(_lstSaves->getCellText(_lstSaves->getSelectedRow(), 0)), _game->getRuleset());
_game->setSavedGame(s);
_game->setState(new GeoscapeState(_game));
if (_game->getSavedGame()->getBattleGame() != 0)
{
_game->getSavedGame()->getBattleGame()->loadMapResources(_game->getResourcePack());
_game->pushState(new BattlescapeState(_game));
}
}
catch (Exception &e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
std::wstring error = _game->getLanguage()->getString("STR_LOAD_UNSUCCESSFUL") + L'\x02' + Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error, Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error, Palette::blockOffset(0), "TAC00.SCR", -1));
//delete r;
delete s;
//_game->setRuleset(0);
_game->setSavedGame(0);
}
catch (YAML::Exception &e)
{
std::cerr << "ERROR: " << e.what() << std::endl;
std::wstring error = _game->getLanguage()->getString("STR_LOAD_UNSUCCESSFUL") + L'\x02' + Language::utf8ToWstr(e.what());
if (_geo)
_game->pushState(new ErrorMessageState(_game, error, Palette::blockOffset(8)+10, "BACK01.SCR", 6));
else
_game->pushState(new ErrorMessageState(_game, error, Palette::blockOffset(0), "TAC00.SCR", -1));
//delete r;
delete s;
//_game->setRuleset(0);
_game->setSavedGame(0);
}
}
示例8: addScore
/**
* Add alien points to the country and region at the coordinates given.
* @param lon Longitudinal coordinates to check.
* @param lat Latitudinal coordinates to check.
* @param game The saved game information.
*/
void AlienMission::addScore(const double lon, const double lat, SavedGame &game)
{
for (std::vector<Region *>::iterator region = game.getRegions()->begin(); region != game.getRegions()->end(); ++region)
{
if ((*region)->getRules()->insideRegion(lon, lat))
{
(*region)->addActivityAlien(_rule.getPoints());
break;
}
}
for (std::vector<Country *>::iterator country = game.getCountries()->begin(); country != game.getCountries()->end(); ++country)
{
if ((*country)->getRules()->insideCountry(lon, lat))
{
(*country)->addActivityAlien(_rule.getPoints());
break;
}
}
}
示例9: SoldierArmorState
/**
* Shows the Select Armor window.
* @param action Pointer to an action.
*/
void CraftArmorState::lstSoldiersClick(Action *action)
{
Soldier *s = _base->getSoldiers()->at(_lstSoldiers->getSelectedRow());
if (!(s->getCraft() && s->getCraft()->getStatus() == "STR_OUT"))
{
if (action->getDetails()->button.button == SDL_BUTTON_LEFT)
{
_game->pushState(new SoldierArmorState(_base, _lstSoldiers->getSelectedRow()));
}
else if (action->getDetails()->button.button == SDL_BUTTON_RIGHT)
{
SavedGame *save;
save = _game->getSavedGame();
Armor *a = _game->getMod()->getArmor(save->getLastSelectedArmor());
if (a && (a->getUnits().empty() || std::find(a->getUnits().begin(), a->getUnits().end(), s->getRules()->getType()) != a->getUnits().end()))
{
if (save->getMonthsPassed() != -1)
{
if (_base->getStorageItems()->getItem(a->getStoreItem()) > 0 || a->getStoreItem() == Armor::NONE)
{
if (s->getArmor()->getStoreItem() != Armor::NONE)
{
_base->getStorageItems()->addItem(s->getArmor()->getStoreItem());
}
if (a->getStoreItem() != Armor::NONE)
{
_base->getStorageItems()->removeItem(a->getStoreItem());
}
s->setArmor(a);
_lstSoldiers->setCellText(_lstSoldiers->getSelectedRow(), 2, tr(a->getType()));
}
}
else
{
s->setArmor(a);
_lstSoldiers->setCellText(_lstSoldiers->getSelectedRow(), 2, tr(a->getType()));
}
}
}
}
}
示例10: load
/**
* @param node The YAML node containing the data.
* @param game The game data, required to locate the alien base.
*/
void AlienMission::load(const YAML::Node& node, SavedGame &game)
{
_region = node["region"].as<std::string>(_region);
_race = node["race"].as<std::string>(_race);
_nextWave = node["nextWave"].as<unsigned>(_nextWave);
_nextUfoCounter = node["nextUfoCounter"].as<unsigned>(_nextUfoCounter);
_spawnCountdown = node["spawnCountdown"].as<unsigned>(_spawnCountdown);
_liveUfos = node["liveUfos"].as<unsigned>(_liveUfos);
_uniqueID = node["uniqueID"].as<int>(_uniqueID);
if (const YAML::Node &base = node["alienBase"])
{
int id = base.as<int>();
std::vector<AlienBase*>::const_iterator found = std::find_if(game.getAlienBases()->begin(), game.getAlienBases()->end(), matchById(id));
if (found == game.getAlienBases()->end())
{
throw Exception("Corrupted save: Invalid base for mission.");
}
_base = *found;
}
}
示例11: getBaseNameFromDirectory
void SaveLoadMenu::addSavedGameItems(WidgetListBox *listBox) {
Common::FileList dirs;
Common::UString savesDir = Common::FilePath::normalize(ConfigMan.getString("path") + "/saves");
dirs.addSubDirectories(savesDir);
Common::UString slotTextFormat = TalkMan.getString(1594);
dirs.sort(true);
for (Common::FileList::const_iterator it = dirs.begin(); it != dirs.end(); ++it) {
Common::UString saveDir = *it;
Common::UString baseName;
try {
baseName = getBaseNameFromDirectory(saveDir);
} catch (Common::Exception &e) {
e.add("Failed to get save base name from directory \"%s\"", saveDir.c_str());
printException(e, "WARNING: ");
continue;
}
if (_type == kSaveLoadMenuTypeSave && !baseName.contains("Game"))
continue;
_saveDirs.push_back(saveDir);
SavedGame *save = SavedGame::load(saveDir);
uint32 timePlayed = save->getTimePlayed();
Common::UString slotText(slotTextFormat);
slotText.replaceAll("Game <CUSTOM0>", baseName);
slotText.replaceAll("<CUSTOM1>", Common::composeString(timePlayed / 3600));
slotText.replaceAll("<CUSTOM2>", Common::composeString(timePlayed % 3600 / 60));
if (baseName.contains("Game"))
slotText += "\r\n" + save->getName();
delete save;
listBox->addItem(slotText);
}
}
示例12: SavedGame
/**
* Loads the specified save.
*/
void LoadGameState::think()
{
State::think();
// Make sure it gets drawn properly
if (_firstRun < 10)
{
_firstRun++;
}
else
{
_game->popState();
// Load the game
SavedGame *s = new SavedGame();
try
{
s->load(_filename, _game->getMod());
_game->setSavedGame(s);
Options::baseXResolution = Options::baseXGeoscape;
Options::baseYResolution = Options::baseYGeoscape;
_game->getScreen()->resetDisplay(false);
_game->setState(new GeoscapeState);
if (_game->getSavedGame()->getSavedBattle() != 0)
{
_game->getSavedGame()->getSavedBattle()->loadMapResources(_game->getMod());
Options::baseXResolution = Options::baseXBattlescape;
Options::baseYResolution = Options::baseYBattlescape;
_game->getScreen()->resetDisplay(false);
BattlescapeState *bs = new BattlescapeState;
_game->pushState(bs);
_game->getSavedGame()->getSavedBattle()->setBattleState(bs);
}
}
catch (Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wostringstream error;
error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::fsToWstr(e.what());
if (_origin != OPT_BATTLESCAPE)
_game->pushState(new ErrorMessageState(error.str(), _palette, _game->getMod()->getInterface("errorMessages")->getElement("geoscapeColor")->color, "BACK01.SCR", _game->getMod()->getInterface("errorMessages")->getElement("geoscapePalette")->color));
else
_game->pushState(new ErrorMessageState(error.str(), _palette, _game->getMod()->getInterface("errorMessages")->getElement("battlescapeColor")->color, "TAC00.SCR", _game->getMod()->getInterface("errorMessages")->getElement("battlescapePalette")->color));
if (_game->getSavedGame() == s)
_game->setSavedGame(0);
else
delete s;
}
catch (YAML::Exception &e)
{
Log(LOG_ERROR) << e.what();
std::wostringstream error;
error << tr("STR_LOAD_UNSUCCESSFUL") << L'\x02' << Language::fsToWstr(e.what());
if (_origin != OPT_BATTLESCAPE)
_game->pushState(new ErrorMessageState(error.str(), _palette, _game->getMod()->getInterface("errorMessages")->getElement("geoscapeColor")->color, "BACK01.SCR", _game->getMod()->getInterface("errorMessages")->getElement("geoscapePalette")->color));
else
_game->pushState(new ErrorMessageState(error.str(), _palette, _game->getMod()->getInterface("errorMessages")->getElement("battlescapeColor")->color, "TAC00.SCR", _game->getMod()->getInterface("errorMessages")->getElement("battlescapePalette")->color));
if (_game->getSavedGame() == s)
_game->setSavedGame(0);
else
delete s;
}
CrossPlatform::flashWindow();
}
}
示例13: load
/**
* Loads the UFO from a YAML file.
* @param node YAML node.
* @param ruleset The game rules. Use to access the trajectory rules.
* @param game The game data. Used to find the UFO's mission.
*/
void Ufo::load(const YAML::Node &node, const Ruleset &ruleset, SavedGame &game)
{
MovingTarget::load(node);
_id = node["id"].as<int>(_id);
_crashId = node["crashId"].as<int>(_crashId);
_landId = node["landId"].as<int>(_landId);
_damage = node["damage"].as<int>(_damage);
_altitude = node["altitude"].as<std::string>(_altitude);
_direction = node["direction"].as<std::string>(_direction);
_detected = node["detected"].as<bool>(_detected);
_hyperDetected = node["hyperDetected"].as<bool>(_hyperDetected);
_secondsRemaining = node["secondsRemaining"].as<size_t>(_secondsRemaining);
_inBattlescape = node["inBattlescape"].as<bool>(_inBattlescape);
double lon = _lon;
double lat = _lat;
if (const YAML::Node &dest = node["dest"])
{
lon = dest["lon"].as<double>();
lat = dest["lat"].as<double>();
}
_dest = new Waypoint();
_dest->setLongitude(lon);
_dest->setLatitude(lat);
if (const YAML::Node &status = node["status"])
{
_status = (UfoStatus)status.as<int>();
}
else
{
if (_damage >= _rules->getMaxDamage())
{
_status = DESTROYED;
}
else if (_damage >= _rules->getMaxDamage() / 2)
{
_status = CRASHED;
}
else if (_altitude == "STR_GROUND")
{
_status = LANDED;
}
else
{
_status = FLYING;
}
}
if (game.getMonthsPassed() != -1)
{
int missionID = node["mission"].as<int>();
std::vector<AlienMission *>::const_iterator found = std::find_if (game.getAlienMissions().begin(), game.getAlienMissions().end(), matchMissionID(missionID));
if (found == game.getAlienMissions().end())
{
// Corrupt save file.
throw Exception("Unknown mission, save file is corrupt.");
}
_mission = *found;
std::string tid = node["trajectory"].as<std::string>();
_trajectory = ruleset.getUfoTrajectory(tid);
_trajectoryPoint = node["trajectoryPoint"].as<size_t>(_trajectoryPoint);
}
_fireCountdown = node["fireCountdown"].as<int>(_fireCountdown);
_escapeCountdown = node["escapeCountdown"].as<int>(_escapeCountdown);
if (_inBattlescape)
setSpeed(0);
}
示例14: DebriefingStat
/**
* Prepares debriefing: gathers Aliens, Corpses, Artefacts, UFO Components.
* Adds the items to the craft.
* Also calculates the soldiers experience, and possible promotions.
* If aborted, only the things on the exit area are recovered.
*/
void DebriefingState::prepareDebriefing()
{
_stats.push_back(new DebriefingStat("STR_ALIENS_KILLED", false));
_stats.push_back(new DebriefingStat("STR_ALIEN_CORPSES_RECOVERED", false));
_stats.push_back(new DebriefingStat("STR_LIVE_ALIENS_RECOVERED", false));
_stats.push_back(new DebriefingStat("STR_ALIEN_ARTIFACTS_RECOVERED", false));
_stats.push_back(new DebriefingStat("STR_ALIEN_BASE_CONTROL_DESTROYED", false));
_stats.push_back(new DebriefingStat("STR_CIVILIANS_KILLED_BY_ALIENS", false));
_stats.push_back(new DebriefingStat("STR_CIVILIANS_KILLED_BY_XCOM_OPERATIVES", false));
_stats.push_back(new DebriefingStat("STR_CIVILIANS_SAVED", false));
_stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_KILLED", false));
//_stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_RETIRED_THROUGH_INJURY", false));
_stats.push_back(new DebriefingStat("STR_XCOM_OPERATIVES_MISSING_IN_ACTION", false));
_stats.push_back(new DebriefingStat("STR_TANKS_DESTROYED", false));
_stats.push_back(new DebriefingStat("STR_XCOM_CRAFT_LOST", false));
_stats.push_back(new DebriefingStat("STR_UFO_POWER_SOURCE", true));
_stats.push_back(new DebriefingStat("STR_UFO_NAVIGATION", true));
_stats.push_back(new DebriefingStat("STR_UFO_CONSTRUCTION", true));
_stats.push_back(new DebriefingStat("STR_ALIEN_FOOD", true));
_stats.push_back(new DebriefingStat("STR_ALIEN_REPRODUCTION", true));
_stats.push_back(new DebriefingStat("STR_ALIEN_ENTERTAINMENT", true));
_stats.push_back(new DebriefingStat("STR_ALIEN_SURGERY", true));
_stats.push_back(new DebriefingStat("STR_EXAMINATION_ROOM", true));
_stats.push_back(new DebriefingStat("STR_ALIEN_ALLOYS", true));
_stats.push_back(new DebriefingStat("STR_ELERIUM_115", true));
SavedGame *save = _game->getSavedGame();
SavedBattleGame *battle = save->getBattleGame();
bool aborted = battle->isAborted();
Craft* craft = 0;
std::vector<Craft*>::iterator craftIterator;
Base* base = 0;
int playerInExitArea = 0; // if this stays 0 the craft is lost...
int playersSurvived = 0; // if this stays 0 the craft is lost...
for (std::vector<Base*>::iterator i = save->getBases()->begin(); i != save->getBases()->end(); ++i)
{
// in case we have a craft - check which craft it is about
for (std::vector<Craft*>::iterator j = (*i)->getCrafts()->begin(); j != (*i)->getCrafts()->end(); ++j)
{
if ((*j)->isInBattlescape())
{
craft = (*j);
base = (*i);
craftIterator = j;
craft->returnToBase();
craft->setLowFuel(true);
craft->setInBattlescape(false);
}
}
}
// UFO crash/landing site disappears
for (std::vector<Ufo*>::iterator i = save->getUfos()->begin(); i != save->getUfos()->end(); ++i)
{
if ((*i)->isInBattlescape())
{
delete *i;
save->getUfos()->erase(i);
break;
}
}
// lets see what happens with units
for (std::vector<BattleUnit*>::iterator j = battle->getUnits()->begin(); j != battle->getUnits()->end(); ++j)
{
UnitStatus status = (*j)->getStatus();
UnitFaction faction = (*j)->getFaction();
int value = (*j)->getValue();
Soldier *soldier = save->getSoldier((*j)->getId());
if (status == STATUS_DEAD)
{
if (faction == FACTION_HOSTILE)
{
addStat("STR_ALIENS_KILLED", 1, value);
}
if (faction == FACTION_PLAYER)
{
if (soldier != 0)
{
addStat("STR_XCOM_OPERATIVES_KILLED", 1, -value);
for (std::vector<Soldier*>::iterator i = base->getSoldiers()->begin(); i != base->getSoldiers()->end(); ++i)
{
if ((*i) == soldier)
{
delete (*i);
base->getSoldiers()->erase(i);
break;
}
}
}
//.........这里部分代码省略.........
示例15: listStats
void StatisticsState::listStats()
{
SavedGame *save = _game->getSavedGame();
std::ostringstream ss;
GameTime *time = save->getTime();
if (save->getEnding() == END_WIN)
{
ss << tr("STR_VICTORY");
}
else if (save->getEnding() == END_LOSE)
{
ss << tr("STR_DEFEAT");
}
else
{
ss << tr("STR_STATISTICS");
}
ss << Unicode::TOK_NL_SMALL << time->getDayString(_game->getLanguage()) << " " << tr(time->getMonthString()) << " " << time->getYear();
_txtTitle->setText(ss.str());
int monthlyScore = sumVector(save->getResearchScores()) / save->getResearchScores().size();
int64_t totalIncome = sumVector(save->getIncomes());
int64_t totalExpenses = sumVector(save->getExpenditures());
int alienBasesDestroyed = 0, xcomBasesLost = 0;
int missionsWin = 0, missionsLoss = 0, nightMissions = 0;
int bestScore = -9999, worstScore = 9999;
for (std::vector<MissionStatistics*>::const_iterator i = save->getMissionStatistics()->begin(); i != save->getMissionStatistics()->end(); ++i)
{
if ((*i)->success)
{
missionsWin++;
}
else
{
missionsLoss++;
}
bestScore = std::max(bestScore, (*i)->score);
worstScore = std::min(worstScore, (*i)->score);
if ((*i)->daylight > 5)
{
nightMissions++;
}
if ((*i)->isAlienBase() && (*i)->success)
{
alienBasesDestroyed++;
}
if ((*i)->isBaseDefense() && !(*i)->success)
{
xcomBasesLost++;
}
}
// Make sure dummy values aren't left in
bestScore = (bestScore == -9999) ? 0 : bestScore;
worstScore = (worstScore == 9999) ? 0 : worstScore;
std::vector<Soldier*> allSoldiers;
for (std::vector<Base*>::const_iterator i = save->getBases()->begin(); i != save->getBases()->end(); ++i)
{
allSoldiers.insert(allSoldiers.end(), (*i)->getSoldiers()->begin(), (*i)->getSoldiers()->end());
}
allSoldiers.insert(allSoldiers.end(), save->getDeadSoldiers()->begin(), save->getDeadSoldiers()->end());
int soldiersRecruited = allSoldiers.size();
int soldiersLost = save->getDeadSoldiers()->size();
int aliensKilled = 0, aliensCaptured = 0, friendlyKills = 0;
int daysWounded = 0, longestMonths = 0;
int shotsFired = 0, shotsLanded = 0;
std::map<std::string, int> weaponKills, alienKills;
for (std::vector<Soldier*>::iterator i = allSoldiers.begin(); i != allSoldiers.end(); ++i)
{
SoldierDiary *diary = (*i)->getDiary();
aliensKilled += diary->getKillTotal();
aliensCaptured += diary->getStunTotal();
daysWounded += diary->getDaysWoundedTotal();
longestMonths = std::max(longestMonths, diary->getMonthsService());
std::map<std::string, int> weaponTotal = diary->getWeaponTotal();
shotsFired += diary->getShotsFiredTotal();
shotsLanded += diary->getShotsLandedTotal();
for (std::map<std::string, int>::const_iterator j = weaponTotal.begin(); j != weaponTotal.end(); ++j)
{
if (weaponKills.find(j->first) == weaponKills.end())
{
weaponKills[j->first] = j->second;
}
else
{
weaponKills[j->first] += j->second;
}
}
if ((*i)->getDeath() != 0 && (*i)->getDeath()->getCause() != 0)
{
const BattleUnitKills *kills = (*i)->getDeath()->getCause();
if (kills->faction == FACTION_PLAYER)
{
friendlyKills++;
}
if (!kills->race.empty())
//.........这里部分代码省略.........