/* * Terrain.h, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #pragma once #include #include #include "ConstTransitivePtr.h" #include "GameConstants.h" #include "JsonNode.h" #include "IHandlerBase.h" VCMI_LIB_NAMESPACE_BEGIN class DLL_LINKAGE TerrainType : public EntityT { public: int32_t getIndex() const override { return id.getNum(); } int32_t getIconIndex() const override { return 0; } const std::string & getName() const override { return identifier;} const std::string & getJsonKey() const override { return identifier;} void registerIcons(const IconRegistar & cb) const override {} TerrainId getId() const override { return id;} enum PassabilityType : ui8 { LAND = 1, WATER = 2, SURFACE = 4, SUBTERRANEAN = 8, ROCK = 16 }; std::vector battleFields; std::vector prohibitTransitions; std::array minimapBlocked; std::array minimapUnblocked; std::string identifier; std::string shortIdentifier; std::string musicFilename; std::string tilesFilename; std::string nameTranslated; std::string terrainViewPatterns; std::string horseSound; TerrainId id; TerrainId rockTerrain; RiverId river; int moveCost; ui8 passabilityType; bool transitionRequired; TerrainType(); bool isLand() const; bool isWater() const; bool isPassable() const; bool isSurface() const; bool isUnderground() const; bool isTransitionRequired() const; bool isSurfaceCartographerCompatible() const; bool isUndergroundCartographerCompatible() const; template void serialize(Handler &h, const int version) { h & battleFields; h & prohibitTransitions; h & minimapBlocked; h & minimapUnblocked; h & identifier; h & musicFilename; h & tilesFilename; h & nameTranslated; h & shortIdentifier; h & terrainViewPatterns; h & rockTerrain; h & river; h & id; h & moveCost; h & horseSound; h & passabilityType; h & transitionRequired; } }; class DLL_LINKAGE RiverType : public EntityT { public: int32_t getIndex() const override { return id.getNum(); } int32_t getIconIndex() const override { return 0; } const std::string & getName() const override { return identifier;} const std::string & getJsonKey() const override { return identifier;} void registerIcons(const IconRegistar & cb) const override {} RiverId getId() const override { return id;} std::string tilesFilename; std::string identifier; std::string shortIdentifier; std::string deltaName; RiverId id; RiverType(); template void serialize(Handler& h, const int version) { h & tilesFilename; h & identifier; h & deltaName; h & id; } }; class DLL_LINKAGE RoadType : public EntityT { public: int32_t getIndex() const override { return id.getNum(); } int32_t getIconIndex() const override { return 0; } const std::string & getName() const override { return identifier;} const std::string & getJsonKey() const override { return identifier;} void registerIcons(const IconRegistar & cb) const override {} RoadId getId() const override { return id;} std::string tilesFilename; std::string identifier; std::string shortIdentifier; RoadId id; ui8 movementCost; RoadType(); template void serialize(Handler& h, const int version) { h & tilesFilename; h & identifier; h & id; h & movementCost; } }; class DLL_LINKAGE TerrainTypeService : public EntityServiceT { public: }; class DLL_LINKAGE RiverTypeService : public EntityServiceT { public: }; class DLL_LINKAGE RoadTypeService : public EntityServiceT { public: }; class DLL_LINKAGE TerrainTypeHandler : public CHandlerBase { public: virtual TerrainType * loadFromJson( const std::string & scope, const JsonNode & json, const std::string & identifier, size_t index) override; virtual const std::vector & getTypeNames() const override; virtual std::vector loadLegacyData(size_t dataSize) override; virtual std::vector getDefaultAllowed() const override; template void serialize(Handler & h, const int version) { h & objects; } }; class DLL_LINKAGE RiverTypeHandler : public CHandlerBase { public: virtual RiverType * loadFromJson( const std::string & scope, const JsonNode & json, const std::string & identifier, size_t index) override; RiverTypeHandler(); virtual const std::vector & getTypeNames() const override; virtual std::vector loadLegacyData(size_t dataSize) override; virtual std::vector getDefaultAllowed() const override; template void serialize(Handler & h, const int version) { h & objects; } }; class DLL_LINKAGE RoadTypeHandler : public CHandlerBase { public: virtual RoadType * loadFromJson( const std::string & scope, const JsonNode & json, const std::string & identifier, size_t index) override; RoadTypeHandler(); virtual const std::vector & getTypeNames() const override; virtual std::vector loadLegacyData(size_t dataSize) override; virtual std::vector getDefaultAllowed() const override; template void serialize(Handler & h, const int version) { h & objects; } }; VCMI_LIB_NAMESPACE_END