void CTownHandler::loadBuilding(CTown &town, const JsonNode & source) { auto ret = new CBuilding; static const std::string modes [] = {"normal", "auto", "special", "grail"}; ret->mode = static_cast<CBuilding::EBuildMode>(boost::find(modes, source["mode"].String()) - modes); ret->town = &town; ret->bid = BuildingID(source["id"].Float()); ret->name = source["name"].String(); ret->description = source["description"].String(); ret->resources = TResources(source["cost"]); for(const JsonNode &building : source["requires"].Vector()) ret->requirements.insert(BuildingID(building.Float())); if (!source["upgrades"].isNull()) { ret->requirements.insert(BuildingID(source["upgrades"].Float())); ret->upgrade = BuildingID(source["upgrades"].Float()); } else ret->upgrade = BuildingID::NONE; town.buildings[ret->bid] = ret; }
TResources CPlayerSpecificInfoCallback::getResourceAmount() const { //boost::shared_lock<boost::shared_mutex> lock(*gs->mx); ERROR_RET_VAL_IF(!player, "Applicable only for player callbacks", TResources()); return gs->players[*player].resources; }