/* * MapReaderH3M.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 "../GameConstants.h" #include "../ResourceSet.h" #include "MapFeaturesH3M.h" #include "MapIdentifiersH3M.h" VCMI_LIB_NAMESPACE_BEGIN class CBinaryReader; class CInputStream; struct MapFormatFeaturesH3M; class int3; enum class EMapFormat : uint8_t; class MapReaderH3M { public: explicit MapReaderH3M(CInputStream * stream); void setFormatLevel(const MapFormatFeaturesH3M & features); void setIdentifierRemapper(const MapIdentifiersH3M & remapper); ArtifactID readArtifact(); ArtifactID readArtifact8(); ArtifactID readArtifact32(); CreatureID readCreature(); HeroTypeID readHero(); HeroTypeID readHeroPortrait(); TerrainId readTerrain(); RoadId readRoad(); RiverId readRiver(); PrimarySkill readPrimary(); SecondarySkill readSkill(); SpellID readSpell(); SpellID readSpell32(); GameResID readGameResID(); PlayerColor readPlayer(); PlayerColor readPlayer32(); void readBitmaskBuildings(std::set & dest, std::optional faction); void readBitmaskFactions(std::set & dest, bool invert); void readBitmaskPlayers(std::set & dest, bool invert); void readBitmaskResources(std::set & dest, bool invert); void readBitmaskHeroClassesSized(std::set & dest, bool invert); void readBitmaskHeroes(std::set & dest, bool invert); void readBitmaskHeroesSized(std::set & dest, bool invert); void readBitmaskArtifacts(std::set & dest, bool invert); void readBitmaskArtifactsSized(std::set & dest, bool invert); void readBitmaskSpells(std::set & dest, bool invert); void readBitmaskSkills(std::set & dest, bool invert); int3 readInt3(); std::shared_ptr readObjectTemplate(); void skipUnused(size_t amount); void skipZero(size_t amount); void readResources(TResources & resources); bool readBool(); uint8_t readUInt8(); int8_t readInt8(); int8_t readInt8Checked(int8_t lowerLimit, int8_t upperLimit); uint16_t readUInt16(); uint32_t readUInt32(); int32_t readInt32(); std::string readBaseString(); private: template Identifier remapIdentifier(const Identifier & identifier); template void readBitmask(std::set & dest, int bytesToRead, int objectsToRead, bool invert); MapFormatFeaturesH3M features; MapIdentifiersH3M remapper; std::unique_ptr reader; }; VCMI_LIB_NAMESPACE_END