|
@@ -43,153 +43,50 @@ class CSkill;
|
|
|
class CGameInfoCallback;
|
|
|
class CNonConstInfoCallback;
|
|
|
|
|
|
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
-// Note: use template to force different type, blocking any Identifier<A> <=> Identifier<B> comparisons
|
|
|
-template<typename FinalClass>
|
|
|
-class Identifier : public IdentifierBase
|
|
|
+class ArtifactInstanceID : public StaticIdentifier<ArtifactInstanceID>
|
|
|
{
|
|
|
- using BaseClass = IdentifierBase;
|
|
|
public:
|
|
|
- constexpr Identifier()
|
|
|
- {}
|
|
|
-
|
|
|
- explicit constexpr Identifier(int32_t value):
|
|
|
- IdentifierBase(value)
|
|
|
- {}
|
|
|
-
|
|
|
- constexpr bool operator == (const Identifier & b) const { return BaseClass::num == b.num; }
|
|
|
- constexpr bool operator <= (const Identifier & b) const { return BaseClass::num <= b.num; }
|
|
|
- constexpr bool operator >= (const Identifier & b) const { return BaseClass::num >= b.num; }
|
|
|
- constexpr bool operator != (const Identifier & b) const { return BaseClass::num != b.num; }
|
|
|
- constexpr bool operator < (const Identifier & b) const { return BaseClass::num < b.num; }
|
|
|
- constexpr bool operator > (const Identifier & b) const { return BaseClass::num > b.num; }
|
|
|
-
|
|
|
- constexpr FinalClass & operator++()
|
|
|
- {
|
|
|
- ++BaseClass::num;
|
|
|
- return static_cast<FinalClass&>(*this);
|
|
|
- }
|
|
|
-
|
|
|
- constexpr FinalClass & operator--()
|
|
|
- {
|
|
|
- --BaseClass::num;
|
|
|
- return static_cast<FinalClass&>(*this);
|
|
|
- }
|
|
|
-
|
|
|
- constexpr FinalClass operator--(int)
|
|
|
- {
|
|
|
- FinalClass ret(num);
|
|
|
- --BaseClass::num;
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- constexpr FinalClass operator++(int)
|
|
|
- {
|
|
|
- FinalClass ret(num);
|
|
|
- ++BaseClass::num;
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ using StaticIdentifier<ArtifactInstanceID>::StaticIdentifier;
|
|
|
};
|
|
|
|
|
|
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
-template<typename FinalClass, typename BaseClass>
|
|
|
-class IdentifierWithEnum : public BaseClass
|
|
|
+class QueryID : public StaticIdentifier<QueryID>
|
|
|
{
|
|
|
- using EnumType = typename BaseClass::Type;
|
|
|
-
|
|
|
- static_assert(std::is_same_v<std::underlying_type_t<EnumType>, int32_t>, "Entity Identifier must use int32_t");
|
|
|
public:
|
|
|
- constexpr EnumType toEnum() const
|
|
|
- {
|
|
|
- return static_cast<EnumType>(BaseClass::num);
|
|
|
- }
|
|
|
-
|
|
|
- constexpr IdentifierWithEnum(const EnumType & enumValue)
|
|
|
- {
|
|
|
- BaseClass::num = static_cast<int32_t>(enumValue);
|
|
|
- }
|
|
|
-
|
|
|
- constexpr IdentifierWithEnum(int32_t _num = -1)
|
|
|
- {
|
|
|
- BaseClass::num = _num;
|
|
|
- }
|
|
|
-
|
|
|
- constexpr bool operator == (const EnumType & b) const { return BaseClass::num == static_cast<int32_t>(b); }
|
|
|
- constexpr bool operator <= (const EnumType & b) const { return BaseClass::num <= static_cast<int32_t>(b); }
|
|
|
- constexpr bool operator >= (const EnumType & b) const { return BaseClass::num >= static_cast<int32_t>(b); }
|
|
|
- constexpr bool operator != (const EnumType & b) const { return BaseClass::num != static_cast<int32_t>(b); }
|
|
|
- constexpr bool operator < (const EnumType & b) const { return BaseClass::num < static_cast<int32_t>(b); }
|
|
|
- constexpr bool operator > (const EnumType & b) const { return BaseClass::num > static_cast<int32_t>(b); }
|
|
|
-
|
|
|
- constexpr bool operator == (const IdentifierWithEnum & b) const { return BaseClass::num == b.num; }
|
|
|
- constexpr bool operator <= (const IdentifierWithEnum & b) const { return BaseClass::num <= b.num; }
|
|
|
- constexpr bool operator >= (const IdentifierWithEnum & b) const { return BaseClass::num >= b.num; }
|
|
|
- constexpr bool operator != (const IdentifierWithEnum & b) const { return BaseClass::num != b.num; }
|
|
|
- constexpr bool operator < (const IdentifierWithEnum & b) const { return BaseClass::num < b.num; }
|
|
|
- constexpr bool operator > (const IdentifierWithEnum & b) const { return BaseClass::num > b.num; }
|
|
|
-
|
|
|
- constexpr FinalClass & operator++()
|
|
|
- {
|
|
|
- ++BaseClass::num;
|
|
|
- return static_cast<FinalClass&>(*this);
|
|
|
- }
|
|
|
-
|
|
|
- constexpr FinalClass operator++(int)
|
|
|
- {
|
|
|
- FinalClass ret(BaseClass::num);
|
|
|
- ++BaseClass::num;
|
|
|
- return ret;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
-
|
|
|
-class ArtifactInstanceID : public Identifier<ArtifactInstanceID>
|
|
|
-{
|
|
|
-public:
|
|
|
- using Identifier<ArtifactInstanceID>::Identifier;
|
|
|
-};
|
|
|
-
|
|
|
-class QueryID : public Identifier<QueryID>
|
|
|
-{
|
|
|
-public:
|
|
|
- using Identifier<QueryID>::Identifier;
|
|
|
+ using StaticIdentifier<QueryID>::StaticIdentifier;
|
|
|
DLL_LINKAGE static const QueryID NONE;
|
|
|
DLL_LINKAGE static const QueryID CLIENT;
|
|
|
};
|
|
|
|
|
|
-class BattleID : public Identifier<BattleID>
|
|
|
+class BattleID : public StaticIdentifier<BattleID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<BattleID>::Identifier;
|
|
|
+ using StaticIdentifier<BattleID>::StaticIdentifier;
|
|
|
DLL_LINKAGE static const BattleID NONE;
|
|
|
};
|
|
|
-class DLL_LINKAGE ObjectInstanceID : public Identifier<ObjectInstanceID>
|
|
|
+class DLL_LINKAGE ObjectInstanceID : public StaticIdentifier<ObjectInstanceID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<ObjectInstanceID>::Identifier;
|
|
|
+ using StaticIdentifier<ObjectInstanceID>::StaticIdentifier;
|
|
|
static const ObjectInstanceID NONE;
|
|
|
|
|
|
static si32 decode(const std::string & identifier);
|
|
|
static std::string encode(const si32 index);
|
|
|
};
|
|
|
|
|
|
-class HeroClassID : public Identifier<HeroClassID>
|
|
|
+class HeroClassID : public EntityIdentifier<HeroClassID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<HeroClassID>::Identifier;
|
|
|
+ using EntityIdentifier<HeroClassID>::EntityIdentifier;
|
|
|
///json serialization helpers
|
|
|
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
|
|
DLL_LINKAGE static std::string encode(const si32 index);
|
|
|
static std::string entityType();
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE HeroTypeID : public Identifier<HeroTypeID>
|
|
|
+class DLL_LINKAGE HeroTypeID : public EntityIdentifier<HeroTypeID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<HeroTypeID>::Identifier;
|
|
|
+ using EntityIdentifier<HeroTypeID>::EntityIdentifier;
|
|
|
///json serialization helpers
|
|
|
static si32 decode(const std::string & identifier);
|
|
|
static std::string encode(const si32 index);
|
|
@@ -207,10 +104,10 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-class SlotID : public Identifier<SlotID>
|
|
|
+class SlotID : public StaticIdentifier<SlotID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<SlotID>::Identifier;
|
|
|
+ using StaticIdentifier<SlotID>::StaticIdentifier;
|
|
|
|
|
|
DLL_LINKAGE static const SlotID COMMANDER_SLOT_PLACEHOLDER;
|
|
|
DLL_LINKAGE static const SlotID SUMMONED_SLOT_PLACEHOLDER; ///<for all summoned creatures, only during battle
|
|
@@ -223,10 +120,10 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE PlayerColor : public Identifier<PlayerColor>
|
|
|
+class DLL_LINKAGE PlayerColor : public StaticIdentifier<PlayerColor>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<PlayerColor>::Identifier;
|
|
|
+ using StaticIdentifier<PlayerColor>::StaticIdentifier;
|
|
|
|
|
|
enum EPlayerColor
|
|
|
{
|
|
@@ -249,18 +146,18 @@ public:
|
|
|
static std::string entityType();
|
|
|
};
|
|
|
|
|
|
-class TeamID : public Identifier<TeamID>
|
|
|
+class TeamID : public StaticIdentifier<TeamID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<TeamID>::Identifier;
|
|
|
+ using StaticIdentifier<TeamID>::StaticIdentifier;
|
|
|
|
|
|
DLL_LINKAGE static const TeamID NO_TEAM;
|
|
|
};
|
|
|
|
|
|
-class TeleportChannelID : public Identifier<TeleportChannelID>
|
|
|
+class TeleportChannelID : public StaticIdentifier<TeleportChannelID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<TeleportChannelID>::Identifier;
|
|
|
+ using StaticIdentifier<TeleportChannelID>::StaticIdentifier;
|
|
|
};
|
|
|
|
|
|
class SecondarySkillBase : public IdentifierBase
|
|
@@ -302,10 +199,10 @@ public:
|
|
|
static_assert(GameConstants::SKILL_QUANTITY == SKILL_SIZE, "Incorrect number of skills");
|
|
|
};
|
|
|
|
|
|
-class SecondarySkill : public IdentifierWithEnum<SecondarySkill, SecondarySkillBase>
|
|
|
+class DLL_LINKAGE SecondarySkill : public EntityIdentifierWithEnum<SecondarySkill, SecondarySkillBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<SecondarySkill, SecondarySkillBase>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<SecondarySkill, SecondarySkillBase>::EntityIdentifierWithEnum;
|
|
|
static std::string entityType();
|
|
|
static si32 decode(const std::string& identifier);
|
|
|
static std::string encode(const si32 index);
|
|
@@ -314,10 +211,10 @@ public:
|
|
|
const Skill * toEntity(const Services * services) const;
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE PrimarySkill : public Identifier<PrimarySkill>
|
|
|
+class DLL_LINKAGE PrimarySkill : public StaticIdentifier<PrimarySkill>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<PrimarySkill>::Identifier;
|
|
|
+ using StaticIdentifier<PrimarySkill>::StaticIdentifier;
|
|
|
|
|
|
static const PrimarySkill NONE;
|
|
|
static const PrimarySkill ATTACK;
|
|
@@ -335,10 +232,10 @@ public:
|
|
|
static std::string entityType();
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE FactionID : public Identifier<FactionID>
|
|
|
+class DLL_LINKAGE FactionID : public EntityIdentifier<FactionID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<FactionID>::Identifier;
|
|
|
+ using EntityIdentifier<FactionID>::EntityIdentifier;
|
|
|
|
|
|
static const FactionID NONE;
|
|
|
static const FactionID DEFAULT;
|
|
@@ -413,10 +310,10 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE BuildingID : public IdentifierWithEnum<BuildingID, BuildingIDBase>
|
|
|
+class DLL_LINKAGE BuildingID : public StaticIdentifierWithEnum<BuildingID, BuildingIDBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<BuildingID, BuildingIDBase>::IdentifierWithEnum;
|
|
|
+ using StaticIdentifierWithEnum<BuildingID, BuildingIDBase>::StaticIdentifierWithEnum;
|
|
|
|
|
|
static BuildingID HALL_LEVEL(unsigned int level)
|
|
|
{
|
|
@@ -578,10 +475,10 @@ public:
|
|
|
};
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE MapObjectID : public IdentifierWithEnum<MapObjectID, MapObjectBaseID>
|
|
|
+class DLL_LINKAGE MapObjectID : public EntityIdentifierWithEnum<MapObjectID, MapObjectBaseID>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<MapObjectID, MapObjectBaseID>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<MapObjectID, MapObjectBaseID>::EntityIdentifierWithEnum;
|
|
|
|
|
|
static std::string encode(int32_t index);
|
|
|
static si32 decode(const std::string & identifier);
|
|
@@ -593,7 +490,7 @@ public:
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-class MapObjectSubID : public Identifier<MapObjectSubID>
|
|
|
+class DLL_LINKAGE MapObjectSubID : public Identifier<MapObjectSubID>
|
|
|
{
|
|
|
public:
|
|
|
constexpr MapObjectSubID(const IdentifierBase & value):
|
|
@@ -615,17 +512,37 @@ public:
|
|
|
return *this;
|
|
|
}
|
|
|
|
|
|
+ static si32 decode(MapObjectID primaryID, const std::string & identifier);
|
|
|
+ static std::string encode(MapObjectID primaryID, si32 index);
|
|
|
+
|
|
|
// TODO: Remove
|
|
|
constexpr operator int32_t () const
|
|
|
{
|
|
|
return num;
|
|
|
}
|
|
|
+
|
|
|
+ template <typename Handler>
|
|
|
+ void serializeIdentifier(Handler &h, const MapObjectID & primaryID, const int version)
|
|
|
+ {
|
|
|
+ std::string secondaryStringID;
|
|
|
+
|
|
|
+ if (h.saving)
|
|
|
+ secondaryStringID = encode(primaryID, num);
|
|
|
+
|
|
|
+ h & secondaryStringID;
|
|
|
+
|
|
|
+ if (!h.saving)
|
|
|
+ num = decode(primaryID, secondaryStringID);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE RoadId : public Identifier<RoadId>
|
|
|
+class DLL_LINKAGE RoadId : public EntityIdentifier<RoadId>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<RoadId>::Identifier;
|
|
|
+ using EntityIdentifier<RoadId>::EntityIdentifier;
|
|
|
+ static si32 decode(const std::string & identifier);
|
|
|
+ static std::string encode(const si32 index);
|
|
|
+ static std::string entityType();
|
|
|
|
|
|
static const RoadId NO_ROAD;
|
|
|
static const RoadId DIRT_ROAD;
|
|
@@ -635,10 +552,13 @@ public:
|
|
|
const RoadType * toEntity(const Services * service) const;
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE RiverId : public Identifier<RiverId>
|
|
|
+class DLL_LINKAGE RiverId : public EntityIdentifier<RiverId>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<RiverId>::Identifier;
|
|
|
+ using EntityIdentifier<RiverId>::EntityIdentifier;
|
|
|
+ static si32 decode(const std::string & identifier);
|
|
|
+ static std::string encode(const si32 index);
|
|
|
+ static std::string entityType();
|
|
|
|
|
|
static const RiverId NO_RIVER;
|
|
|
static const RiverId WATER_RIVER;
|
|
@@ -658,10 +578,10 @@ public:
|
|
|
};
|
|
|
};
|
|
|
|
|
|
-class EPathfindingLayer : public IdentifierWithEnum<EPathfindingLayer, EPathfindingLayerBase>
|
|
|
+class EPathfindingLayer : public StaticIdentifierWithEnum<EPathfindingLayer, EPathfindingLayerBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<EPathfindingLayer, EPathfindingLayerBase>::IdentifierWithEnum;
|
|
|
+ using StaticIdentifierWithEnum<EPathfindingLayer, EPathfindingLayerBase>::StaticIdentifierWithEnum;
|
|
|
};
|
|
|
|
|
|
class ArtifactPositionBase : public IdentifierBase
|
|
@@ -694,10 +614,10 @@ public:
|
|
|
DLL_LINKAGE static std::string encode(const si32 index);
|
|
|
};
|
|
|
|
|
|
-class ArtifactPosition : public IdentifierWithEnum<ArtifactPosition, ArtifactPositionBase>
|
|
|
+class ArtifactPosition : public StaticIdentifierWithEnum<ArtifactPosition, ArtifactPositionBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<ArtifactPosition, ArtifactPositionBase>::IdentifierWithEnum;
|
|
|
+ using StaticIdentifierWithEnum<ArtifactPosition, ArtifactPositionBase>::StaticIdentifierWithEnum;
|
|
|
|
|
|
// TODO: Remove
|
|
|
constexpr operator int32_t () const
|
|
@@ -730,10 +650,10 @@ public:
|
|
|
DLL_LINKAGE const Artifact * toEntity(const Services * service) const;
|
|
|
};
|
|
|
|
|
|
-class ArtifactID : public IdentifierWithEnum<ArtifactID, ArtifactIDBase>
|
|
|
+class ArtifactID : public EntityIdentifierWithEnum<ArtifactID, ArtifactIDBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<ArtifactID, ArtifactIDBase>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<ArtifactID, ArtifactIDBase>::EntityIdentifierWithEnum;
|
|
|
|
|
|
///json serialization helpers
|
|
|
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
|
@@ -773,10 +693,10 @@ public:
|
|
|
DLL_LINKAGE const Creature * toEntity(const CreatureService * creatures) const;
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE CreatureID : public IdentifierWithEnum<CreatureID, CreatureIDBase>
|
|
|
+class DLL_LINKAGE CreatureID : public EntityIdentifierWithEnum<CreatureID, CreatureIDBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<CreatureID, CreatureIDBase>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<CreatureID, CreatureIDBase>::EntityIdentifierWithEnum;
|
|
|
|
|
|
///json serialization helpers
|
|
|
static si32 decode(const std::string & identifier);
|
|
@@ -892,10 +812,10 @@ public:
|
|
|
const spells::Spell * toEntity(const spells::Service * service) const;
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE SpellID : public IdentifierWithEnum<SpellID, SpellIDBase>
|
|
|
+class DLL_LINKAGE SpellID : public EntityIdentifierWithEnum<SpellID, SpellIDBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<SpellID, SpellIDBase>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<SpellID, SpellIDBase>::EntityIdentifierWithEnum;
|
|
|
|
|
|
///json serialization helpers
|
|
|
static si32 decode(const std::string & identifier);
|
|
@@ -904,10 +824,10 @@ public:
|
|
|
};
|
|
|
|
|
|
class BattleFieldInfo;
|
|
|
-class DLL_LINKAGE BattleField : public Identifier<BattleField>
|
|
|
+class DLL_LINKAGE BattleField : public EntityIdentifier<BattleField>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<BattleField>::Identifier;
|
|
|
+ using EntityIdentifier<BattleField>::EntityIdentifier;
|
|
|
|
|
|
static const BattleField NONE;
|
|
|
const BattleFieldInfo * getInfo() const;
|
|
@@ -916,10 +836,13 @@ public:
|
|
|
static std::string encode(const si32 index);
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE BoatId : public Identifier<BoatId>
|
|
|
+class DLL_LINKAGE BoatId : public EntityIdentifier<BoatId>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<BoatId>::Identifier;
|
|
|
+ using EntityIdentifier<BoatId>::EntityIdentifier;
|
|
|
+
|
|
|
+ static si32 decode(const std::string & identifier);
|
|
|
+ static std::string encode(const si32 index);
|
|
|
|
|
|
static const BoatId NONE;
|
|
|
static const BoatId NECROPOLIS;
|
|
@@ -950,29 +873,29 @@ public:
|
|
|
};
|
|
|
};
|
|
|
|
|
|
-class TerrainId : public IdentifierWithEnum<TerrainId, TerrainIdBase>
|
|
|
+class DLL_LINKAGE TerrainId : public EntityIdentifierWithEnum<TerrainId, TerrainIdBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<TerrainId, TerrainIdBase>::IdentifierWithEnum;
|
|
|
+ using EntityIdentifierWithEnum<TerrainId, TerrainIdBase>::EntityIdentifierWithEnum;
|
|
|
|
|
|
- DLL_LINKAGE static si32 decode(const std::string & identifier);
|
|
|
- DLL_LINKAGE static std::string encode(const si32 index);
|
|
|
+ static si32 decode(const std::string & identifier);
|
|
|
+ static std::string encode(const si32 index);
|
|
|
static std::string entityType();
|
|
|
const TerrainType * toEntity(const Services * service) const;
|
|
|
};
|
|
|
|
|
|
class ObstacleInfo;
|
|
|
-class Obstacle : public Identifier<Obstacle>
|
|
|
+class Obstacle : public EntityIdentifier<Obstacle>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<Obstacle>::Identifier;
|
|
|
+ using EntityIdentifier<Obstacle>::EntityIdentifier;
|
|
|
DLL_LINKAGE const ObstacleInfo * getInfo() const;
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE SpellSchool : public Identifier<SpellSchool>
|
|
|
+class DLL_LINKAGE SpellSchool : public StaticIdentifier<SpellSchool>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<SpellSchool>::Identifier;
|
|
|
+ using StaticIdentifier<SpellSchool>::StaticIdentifier;
|
|
|
|
|
|
static const SpellSchool ANY;
|
|
|
static const SpellSchool AIR;
|
|
@@ -1005,10 +928,10 @@ public:
|
|
|
};
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE GameResID : public IdentifierWithEnum<GameResID, GameResIDBase>
|
|
|
+class DLL_LINKAGE GameResID : public StaticIdentifierWithEnum<GameResID, GameResIDBase>
|
|
|
{
|
|
|
public:
|
|
|
- using IdentifierWithEnum<GameResID, GameResIDBase>::IdentifierWithEnum;
|
|
|
+ using StaticIdentifierWithEnum<GameResID, GameResIDBase>::StaticIdentifierWithEnum;
|
|
|
|
|
|
static si32 decode(const std::string & identifier);
|
|
|
static std::string encode(const si32 index);
|
|
@@ -1029,12 +952,25 @@ public:
|
|
|
FactionID getFaction() const;
|
|
|
|
|
|
using Identifier<BuildingTypeUniqueID>::Identifier;
|
|
|
+
|
|
|
+ template <typename Handler>
|
|
|
+ void serialize(Handler & h, const int version)
|
|
|
+ {
|
|
|
+ FactionID faction = getFaction();
|
|
|
+ BuildingID building = getBuilding();
|
|
|
+
|
|
|
+ h & faction;
|
|
|
+ h & building;
|
|
|
+
|
|
|
+ if (!h.saving)
|
|
|
+ *this = BuildingTypeUniqueID(faction, building);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
-class DLL_LINKAGE CampaignScenarioID : public Identifier<CampaignScenarioID>
|
|
|
+class DLL_LINKAGE CampaignScenarioID : public StaticIdentifier<CampaignScenarioID>
|
|
|
{
|
|
|
public:
|
|
|
- using Identifier<CampaignScenarioID>::Identifier;
|
|
|
+ using StaticIdentifier<CampaignScenarioID>::StaticIdentifier;
|
|
|
|
|
|
static si32 decode(const std::string & identifier);
|
|
|
static std::string encode(int32_t index);
|