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

Method load

src/Menu/NewBattleState.cpp:280–346  ·  view source on GitHub ↗

* Loads new battle data from a YAML file. * @param filename YAML filename. */

Source from the content-addressed store, hash-verified

278 * @param filename YAML filename.
279 */
280void NewBattleState::load(const std::string &filename)
281{
282 std::string s = Options::getConfigFolder() + filename + ".cfg";
283 try
284 {
285 YAML::Node doc = YAML::LoadFile(s);
286 _cbxMission->setSelected(std::min(doc["mission"].as<size_t>(0), _missionTypes.size()-1));
287 _cbxCraft->setSelected(std::min(doc["craft"].as<size_t>(0), _crafts.size()-1));
288 _slrDarkness->setValue(doc["darkness"].as<size_t>(0));
289 _cbxTerrain->setSelected(std::min(doc["terrain"].as<size_t>(0), _terrainTypes.size()-1));
290 _cbxAlienRace->setSelected(std::min(doc["alienRace"].as<size_t>(0), _alienRaces.size()-1));
291 _cbxDifficulty->setSelected(doc["difficulty"].as<size_t>(0));
292 _slrAlienTech->setValue(doc["alienTech"].as<size_t>(0));
293 cbxMissionChange(NULL);
294
295 if (doc["base"])
296 {
297 const Ruleset *rule = _game->getRuleset();
298 SavedGame *save = new SavedGame();
299
300 Base *base = new Base(rule);
301 base->load(doc["base"], save, false);
302 save->getBases()->push_back(base);
303
304 // Add research
305 const std::vector<std::string> &research = rule->getResearchList();
306 for (std::vector<std::string>::const_iterator i = research.begin(); i != research.end(); ++i)
307 {
308 save->addFinishedResearch(rule->getResearch(*i));
309 }
310
311 // Generate items
312 base->getItems()->getContents()->clear();
313 const std::vector<std::string> &items = rule->getItemsList();
314 for (std::vector<std::string>::const_iterator i = items.begin(); i != items.end(); ++i)
315 {
316 RuleItem *rule = _game->getRuleset()->getItem(*i);
317 if (rule->getBattleType() != BT_CORPSE && rule->isRecoverable())
318 {
319 base->getItems()->addItem(*i, 1);
320 }
321 }
322
323 // Clear invalid contents
324 _craft = base->getCrafts()->front();
325 for (std::map<std::string, int>::iterator i = _craft->getItems()->getContents()->begin(); i != _craft->getItems()->getContents()->end(); ++i)
326 {
327 RuleItem *rule = _game->getRuleset()->getItem(i->first);
328 if (!rule)
329 {
330 i->second = 0;
331 }
332 }
333
334 _game->setSavedGame(save);
335 }
336 else
337 {

Callers 1

initSaveMethod · 0.45

Calls 15

getConfigFolderFunction · 0.85
setSelectedMethod · 0.80
getBasesMethod · 0.80
addFinishedResearchMethod · 0.80
getResearchMethod · 0.80
getContentsMethod · 0.80
getBattleTypeMethod · 0.80
isRecoverableMethod · 0.80
setSavedGameMethod · 0.80
whatMethod · 0.80
setValueMethod · 0.45
getRulesetMethod · 0.45

Tested by

no test coverage detected