/* * 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 readArtifact32(); CreatureID readCreature(); HeroTypeID readHero(); HeroTypeID readHeroPortrait(); TerrainId readTerrain(); RoadId readRoad(); RiverId readRiver(); SecondarySkill readSkill(); SpellID readSpell(); SpellID readSpell32(); 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::vector & dest, bool invert); void readBitmaskHeroesSized(std::vector & dest, bool invert); void readBitmaskArtifacts(std::vector & dest, bool invert); void readBitmaskArtifactsSized(std::vector & dest, bool invert); void readBitmaskSpells(std::vector & dest, bool invert); void readBitmaskSpells(std::set & dest, bool invert); void readBitmaskSkills(std::vector & 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 readResourses(TResources & resources); bool readBool(); ui8 readUInt8(); si8 readInt8(); ui16 readUInt16(); si16 readInt16(); ui32 readUInt32(); si32 readInt32(); std::string readBaseString(); CBinaryReader & getInternalReader(); private: template Identifier remapIdentifier(const Identifier & identifier); template void readBitmask(std::set & dest, int bytesToRead, int objectsToRead, bool invert); template void readBitmask(std::vector & dest, int bytesToRead, int objectsToRead, bool invert); MapFormatFeaturesH3M features; MapIdentifiersH3M remapper; std::unique_ptr reader; }; VCMI_LIB_NAMESPACE_END