Map::Map(char *nodesFile, char *buildingsFile) :Object3d(Point()), topLeftMapPoint(Point(+1000000, 0, +1000000)), bottomRightPoint(Point(-1000000, 0, -100000)) { currentWayName = NULL; loadNodes(nodesFile); loadBuildings(buildingsFile); initQuadTree(); initMinimap(); }
void CTownHandler::loadTown(CTown &town, const JsonNode & source) { auto resIter = boost::find(GameConstants::RESOURCE_NAMES, source["primaryResource"].String()); if (resIter == std::end(GameConstants::RESOURCE_NAMES)) town.primaryRes = Res::WOOD_AND_ORE; //Wood + Ore else town.primaryRes = resIter - std::begin(GameConstants::RESOURCE_NAMES); VLC->modh->identifiers.requestIdentifier("creature", source["warMachine"], [&town](si32 creature) { town.warMachine = CArtHandler::creatureToMachineID(CreatureID(creature)); }); town.moatDamage = source["moatDamage"].Float(); town.mageLevel = source["mageGuild"].Float(); town.names = source["names"].convertTo<std::vector<std::string> >(); // Horde building creature level for(const JsonNode &node : source["horde"].Vector()) { town.hordeLvl[town.hordeLvl.size()] = node.Float(); } const JsonVector & creatures = source["creatures"].Vector(); town.creatures.resize(creatures.size()); for (size_t i=0; i< creatures.size(); i++) { const JsonVector & level = creatures[i].Vector(); town.creatures[i].resize(level.size()); for (size_t j=0; j<level.size(); j++) { VLC->modh->identifiers.requestIdentifier("creature", level[j], [=, &town](si32 creature) { town.creatures[i][j] = CreatureID(creature); }); } } /// set chance of specific hero class to appear in this town for(auto &node : source["tavern"].Struct()) { int chance = node.second.Float(); VLC->modh->identifiers.requestIdentifier(node.second.meta, "heroClass",node.first, [=, &town](si32 classID) { VLC->heroh->classes.heroClasses[classID]->selectionProbability[town.faction->index] = chance; }); } for(auto &node : source["guildSpells"].Struct()) { int chance = node.second.Float(); VLC->modh->identifiers.requestIdentifier(node.second.meta, "spell", node.first, [=, &town](si32 spellID) { SpellID(spellID).toSpell()->probabilities[town.faction->index] = chance; }); } for (const JsonNode &d : source["adventureMap"]["dwellings"].Vector()) { town.dwellings.push_back (d["graphics"].String()); town.dwellingNames.push_back (d["name"].String()); } loadBuildings(town, source["buildings"]); loadClientData(town,source); }