123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #pragma once
- /*
- * ResourceID.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
- *
- */
- /**
- * Specifies the resource type.
- *
- * Supported file extensions:
- *
- * Text: .txt .json
- * Animation: .def
- * Mask: .msk .msg
- * Campaign: .h3c
- * Map: .h3m
- * Font: .fnt
- * Image: .bmp, .jpg, .pcx, .png, .tga
- * Sound: .wav .82m
- * Video: .smk, .bik .mjpg .mpg
- * Music: .mp3, .ogg
- * Archive: .lod, .snd, .vid .pac .zip
- * Palette: .pal
- * Savegame: .v*gm1
- */
- namespace EResType
- {
- enum Type
- {
- TEXT,
- ANIMATION,
- MASK,
- CAMPAIGN,
- MAP,
- BMP_FONT,
- TTF_FONT,
- IMAGE,
- VIDEO,
- SOUND,
- MUSIC,
- ARCHIVE_VID,
- ARCHIVE_ZIP,
- ARCHIVE_SND,
- ARCHIVE_LOD,
- PALETTE,
- CLIENT_SAVEGAME,
- SERVER_SAVEGAME,
- DIRECTORY,
- ERM,
- ERT,
- ERS,
- OTHER,
- UNDEFINED
- };
- }
- /**
- * A struct which identifies a resource clearly.
- */
- class DLL_LINKAGE ResourceID
- {
- public:
- /**
- * Default c-tor.
- */
- //ResourceID();
- /**
- * Ctor. Can be used to create identifier for resource loading using one parameter
- *
- * @param fullName The resource name including extension.
- */
- explicit ResourceID(std::string fullName);
- /**
- * Ctor.
- *
- * @param name The resource name.
- * @param type The resource type. A constant from the enumeration EResType.
- */
- ResourceID(std::string name, EResType::Type type);
- /**
- * Compares this object with a another resource identifier.
- *
- * @param other The other resource identifier.
- * @return Returns true if both are equally, false if not.
- */
- inline bool operator==(ResourceID const & other) const
- {
- return name == other.name && type == other.type;
- }
- std::string getName() const {return name;}
- EResType::Type getType() const {return type;}
- //void setName(std::string name);
- //void setType(EResType::Type type);
- private:
- /**
- * Specifies the resource type. EResType::OTHER if not initialized.
- * Required to prevent conflicts if files with different types (e.g. text and image) have the same name.
- */
- EResType::Type type;
- /** Specifies the resource name. No extension so .pcx and .png can override each other, always in upper case. **/
- std::string name;
- };
- namespace std
- {
- template <> struct hash<ResourceID>
- {
- size_t operator()(const ResourceID & resourceIdent) const
- {
- std::hash<int> intHasher;
- std::hash<std::string> stringHasher;
- return stringHasher(resourceIdent.getName()) ^ intHasher(static_cast<int>(resourceIdent.getType()));
- }
- };
- }
- /**
- * A helper class which provides a functionality to convert extension strings to EResTypes.
- */
- class DLL_LINKAGE EResTypeHelper
- {
- public:
- /**
- * Converts a extension string to a EResType enum object.
- *
- * @param extension The extension string e.g. .BMP, .PNG
- * @return Returns a EResType enum object
- */
- static EResType::Type getTypeFromExtension(std::string extension);
- /**
- * Gets the EResType as a string representation.
- *
- * @param type the EResType
- * @return the type as a string representation
- */
- static std::string getEResTypeAsString(EResType::Type type);
- };
|