void Controller::parseSpecFile(std::string file) { std::string expandedFilename; if(file[0] == '~') { file.erase(0,1); expandedFilename = std::string(getenv("HOME")); expandedFilename += file; } else { expandedFilename = file; } std::ifstream specFile(expandedFilename.c_str()); if(!specFile.fail()) { YAML::Parser specParser(specFile); YAML::Node specDoc; specParser.GetNextDocument(specDoc); for(int i=0; i<specDoc["commands"].size(); i++) { if(specDoc["commands"][i]["command"].GetType() == YAML::CT_SCALAR && specDoc["commands"][i]["source"].GetType() == YAML::CT_SEQUENCE) { std::string command; specDoc["commands"][i]["command"] >> command; // lets check whether this command is for us for(int s=0; s<specDoc["commands"][i]["source"].size(); s++) { std::string source; specDoc["commands"][i]["source"][s] >> source; if(source == "controller") { CommandParser *parser = new CommandParser(specDoc["commands"][i]); commands->insert(std::make_pair(command, parser)); if(parser->getCommand().length() > maxCommandNameLength) { maxCommandNameLength = parser->getCommand().length(); } } } } }
std::vector<JsonNode> CHeroHandler::loadLegacyData(size_t dataSize) { heroes.resize(dataSize); std::vector<JsonNode> h3Data; h3Data.reserve(dataSize); CLegacyConfigParser specParser("DATA/HEROSPEC.TXT"); CLegacyConfigParser bioParser("DATA/HEROBIOS.TXT"); CLegacyConfigParser parser("DATA/HOTRAITS.TXT"); parser.endLine(); //ignore header parser.endLine(); specParser.endLine(); //ignore header specParser.endLine(); for (int i=0; i<GameConstants::HEROES_QUANTITY; i++) { JsonNode heroData; heroData["texts"]["name"].String() = parser.readString(); heroData["texts"]["biography"].String() = bioParser.readString(); heroData["texts"]["specialty"]["name"].String() = specParser.readString(); heroData["texts"]["specialty"]["tooltip"].String() = specParser.readString(); heroData["texts"]["specialty"]["description"].String() = specParser.readString(); for(int x=0;x<3;x++) { JsonNode armySlot; armySlot["min"].Float() = parser.readNumber(); armySlot["max"].Float() = parser.readNumber(); armySlot["creature"].String() = genRefName(parser.readString()); heroData["army"].Vector().push_back(armySlot); } parser.endLine(); specParser.endLine(); bioParser.endLine(); h3Data.push_back(heroData); } return h3Data; }