Пример #1
0
std::vector<ObjectTemplate> AObjectTypeHandler::getTemplates(si32 terrainType) const// FIXME: replace with ETerrainType
{
	std::vector<ObjectTemplate> templates = getTemplates();
	std::vector<ObjectTemplate> filtered;

	std::copy_if(templates.begin(), templates.end(), std::back_inserter(filtered), [&](const ObjectTemplate & obj)
	{
		return obj.canBePlacedAt(ETerrainType(terrainType));
	});
	// H3 defines allowed terrains in a weird way - artifacts, monsters and resources have faulty masks here
	// Perhaps we should re-define faulty templates and remove this workaround (already done for resources)
	if (type == Obj::ARTIFACT || type == Obj::MONSTER)
		return templates;
	else
		return filtered;
}
Пример #2
0
std::string nameFromType (int typ)
{
    switch(ETerrainType(typ))
	{
        case ETerrainType::DIRT:
			return std::string("DIRTTL.DEF");

        case ETerrainType::SAND:
			return std::string("SANDTL.DEF");

        case ETerrainType::GRASS:
			return std::string("GRASTL.DEF");

        case ETerrainType::SNOW:
			return std::string("SNOWTL.DEF");

        case ETerrainType::SWAMP:
			return std::string("SWMPTL.DEF");

        case ETerrainType::ROUGH:
			return std::string("ROUGTL.DEF");

        case ETerrainType::SUBTERRANEAN:
			return std::string("SUBBTL.DEF");

        case ETerrainType::LAVA:
			return std::string("LAVATL.DEF");

        case ETerrainType::WATER:
			return std::string("WATRTL.DEF");

        case ETerrainType::ROCK:
			return std::string("ROCKTL.DEF");

        case ETerrainType::BORDER:
		//TODO use me
		break;
		default:
		//TODO do something here
		break;
	}
	return std::string();
}
Пример #3
0
std::set<ETerrainType> CJsonRmgTemplateLoader::parseTerrainTypes(const JsonVector & terTypeStrings, const std::set<ETerrainType> & defaultTerrainTypes) const
{
	std::set<ETerrainType> terTypes;
	if (terTypeStrings.empty()) //nothing was specified
		return defaultTerrainTypes;

	for(const auto & node : terTypeStrings)
	{
		const auto & terTypeStr = node.String();
		if(terTypeStr == "all") return defaultTerrainTypes;
		auto pos = vstd::find_pos(GameConstants::TERRAIN_NAMES, terTypeStr);
		if (pos != -1)
		{
			terTypes.insert(ETerrainType(pos));
		}
		else
		{
			throw std::runtime_error("Terrain type is invalid.");
		}
	}
	return terTypes;
}
Пример #4
0
CFaction * CTownHandler::loadFromJson(const JsonNode &source)
{
	auto  faction = new CFaction();

	faction->name = source["name"].String();

	VLC->modh->identifiers.requestIdentifier ("creature", source["commander"],
		[=](si32 commanderID)
		{
			faction->commander = CreatureID(commanderID);
		});

	faction->creatureBg120 = source["creatureBackground"]["120px"].String();
	faction->creatureBg130 = source["creatureBackground"]["130px"].String();

	faction->nativeTerrain = ETerrainType(vstd::find_pos(GameConstants::TERRAIN_NAMES,
		source["nativeTerrain"].String()));
	int alignment = vstd::find_pos(EAlignment::names, source["alignment"].String());
	if (alignment == -1)
		faction->alignment = EAlignment::NEUTRAL;
	else
		faction->alignment = static_cast<EAlignment::EAlignment>(alignment);

	if (!source["town"].isNull())
	{
		faction->town = new CTown;
		faction->town->faction = faction;
		loadTown(*faction->town, source["town"]);
	}
	else
		faction->town = nullptr;

	if (!source["puzzleMap"].isNull())
		loadPuzzle(*faction, source["puzzleMap"]);

	return faction;
}