* Loads new battle data from a YAML file. * @param filename YAML filename. */
| 278 | * @param filename YAML filename. |
| 279 | */ |
| 280 | void 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 | { |
no test coverage detected