mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-31 22:05:10 +02:00
302 lines
14 KiB
C++
302 lines
14 KiB
C++
/*
|
|
* RegisterTypes.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 "../CPlayerState.h"
|
|
#include "../CStack.h"
|
|
#include "../battle/BattleInfo.h"
|
|
#include "../battle/CObstacleInstance.h"
|
|
#include "../bonuses/Limiters.h"
|
|
#include "../bonuses/Propagators.h"
|
|
#include "../bonuses/Updaters.h"
|
|
#include "../campaign/CampaignState.h"
|
|
#include "../gameState/CGameState.h"
|
|
#include "../gameState/CGameStateCampaign.h"
|
|
#include "../gameState/TavernHeroesPool.h"
|
|
|
|
#include "../mapObjects/CGCreature.h"
|
|
#include "../mapObjects/CGDwelling.h"
|
|
#include "../mapObjects/CGResource.h"
|
|
#include "../mapObjects/CGMarket.h"
|
|
#include "../mapObjects/CGPandoraBox.h"
|
|
#include "../mapObjects/CGTownInstance.h"
|
|
#include "../mapObjects/CQuest.h"
|
|
#include "../mapObjects/FlaggableMapObject.h"
|
|
#include "../mapObjects/MiscObjects.h"
|
|
#include "../mapObjects/TownBuildingInstance.h"
|
|
|
|
#include "../mapping/CMap.h"
|
|
#include "../networkPacks/PacksForClient.h"
|
|
#include "../networkPacks/PacksForClientBattle.h"
|
|
#include "../networkPacks/PacksForLobby.h"
|
|
#include "../networkPacks/PacksForServer.h"
|
|
#include "../networkPacks/SaveLocalState.h"
|
|
#include "../networkPacks/SetRewardableConfiguration.h"
|
|
#include "../networkPacks/SetStackEffect.h"
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
/// This method defines all types that are part of Serializeable hieararchy and can be serialized as their base type
|
|
/// Each class is registered with a unique index that is used to determine correct type on deserialization
|
|
/// For example, if CGHeroInstance is serialized as pointer to CGObjectInstance serializer will write type index for CGHeroInstance, followed by CGHeroInstance::serialize() call
|
|
/// Similarly, on deserialize, game will look up type index of object that was serialized as this CGObjectInstance and will load it as CGHeroInstance instead
|
|
/// Meaning, these type indexes must NEVER change.
|
|
/// If type is removed please only remove corresponding type, without adjusting indexes of following types
|
|
/// NOTE: when removing type please consider potential save compatibility handling
|
|
/// Similarly, when adding new type make sure to add it to the very end of this list with new type index
|
|
template<typename Serializer>
|
|
void registerTypes(Serializer &s)
|
|
{
|
|
static_assert(std::is_abstract_v<IObjectInterface>, "If this type is no longer abstract consider registering it for serialization with ID 1");
|
|
static_assert(std::is_abstract_v<CGTeleport>, "If this type is no longer abstract consider registering it for serialization with ID 3");
|
|
static_assert(std::is_abstract_v<IQuestObject>, "If this type is no longer abstract consider registering it for serialization with ID 11");
|
|
static_assert(std::is_abstract_v<CArtifactSet>, "If this type is no longer abstract consider registering it for serialization with ID 29");
|
|
static_assert(std::is_abstract_v<CPackForClient>, "If this type is no longer abstract consider registering it for serialization with ID 83");
|
|
static_assert(std::is_abstract_v<Query>, "If this type is no longer abstract consider registering it for serialization with ID 153");
|
|
static_assert(std::is_abstract_v<CGarrisonOperationPack>, "If this type is no longer abstract consider registering it for serialization with ID 161");
|
|
static_assert(std::is_abstract_v<CArtifactOperationPack>, "If this type is no longer abstract consider registering it for serialization with ID 168");
|
|
|
|
s.template registerType<CGObjectInstance>(2);
|
|
s.template registerType<CGMonolith>(4);
|
|
s.template registerType<CGSubterraneanGate>(5);
|
|
s.template registerType<CGWhirlpool>(6);
|
|
s.template registerType<CGSignBottle>(7);
|
|
s.template registerType<CGKeys>(8);
|
|
s.template registerType<CGKeymasterTent>(9);
|
|
s.template registerType<CGBorderGuard>(10);
|
|
s.template registerType<CGBorderGate>(12);
|
|
s.template registerType<CGBoat>(13);
|
|
s.template registerType<CGMagi>(14);
|
|
s.template registerType<CGSirens>(15);
|
|
s.template registerType<CGShipyard>(16);
|
|
s.template registerType<CGDenOfthieves>(17);
|
|
s.template registerType<FlaggableMapObject>(18);
|
|
s.template registerType<CGTerrainPatch>(19);
|
|
s.template registerType<HillFort>(20);
|
|
s.template registerType<CGMarket>(21);
|
|
s.template registerType<CGBlackMarket>(22);
|
|
s.template registerType<CGUniversity>(23);
|
|
s.template registerType<CGHeroPlaceholder>(24);
|
|
s.template registerType<CArmedInstance>(25);
|
|
s.template registerType<CBonusSystemNode>(26);
|
|
s.template registerType<CCreatureSet>(27);
|
|
s.template registerType<CGHeroInstance>(28);
|
|
s.template registerType<CGDwelling>(30);
|
|
s.template registerType<CGTownInstance>(31);
|
|
s.template registerType<CGPandoraBox>(32);
|
|
s.template registerType<CGEvent>(33);
|
|
s.template registerType<CGCreature>(34);
|
|
s.template registerType<CGGarrison>(35);
|
|
s.template registerType<CGArtifact>(36);
|
|
s.template registerType<CGResource>(37);
|
|
s.template registerType<CGMine>(38);
|
|
s.template registerType<CBank>(39);
|
|
s.template registerType<CGSeerHut>(40);
|
|
s.template registerType<CGQuestGuard>(41);
|
|
s.template registerType<IUpdater>(42);
|
|
s.template registerType<GrowsWithLevelUpdater>(43);
|
|
s.template registerType<TimesHeroLevelUpdater>(44);
|
|
s.template registerType<TimesStackLevelUpdater>(45);
|
|
s.template registerType<OwnerUpdater>(46);
|
|
s.template registerType<ArmyMovementUpdater>(47);
|
|
s.template registerType<ILimiter>(48);
|
|
s.template registerType<AnyOfLimiter>(49);
|
|
s.template registerType<NoneOfLimiter>(50);
|
|
s.template registerType<OppositeSideLimiter>(51);
|
|
s.template registerType<TownBuildingInstance>(52);
|
|
s.template registerType<TownRewardableBuildingInstance>(53);
|
|
s.template registerType<CRewardableObject>(56);
|
|
s.template registerType<CTeamVisited>(57);
|
|
s.template registerType<CGObelisk>(58);
|
|
s.template registerType<IPropagator>(59);
|
|
s.template registerType<CPropagatorNodeType>(60);
|
|
s.template registerType<AllOfLimiter>(61);
|
|
s.template registerType<CCreatureTypeLimiter>(62);
|
|
s.template registerType<HasAnotherBonusLimiter>(63);
|
|
s.template registerType<CreatureTerrainLimiter>(64);
|
|
s.template registerType<FactionLimiter>(65);
|
|
s.template registerType<CreatureLevelLimiter>(66);
|
|
s.template registerType<CreatureAlignmentLimiter>(67);
|
|
s.template registerType<RankRangeLimiter>(68);
|
|
s.template registerType<UnitOnHexLimiter>(69);
|
|
s.template registerType<CArtifact>(70);
|
|
s.template registerType<CCreature>(71);
|
|
s.template registerType<CStackInstance>(72);
|
|
s.template registerType<CCommanderInstance>(73);
|
|
s.template registerType<PlayerState>(74);
|
|
s.template registerType<TeamState>(75);
|
|
s.template registerType<CStack>(76);
|
|
s.template registerType<BattleInfo>(77);
|
|
s.template registerType<CArtifactInstance>(78);
|
|
s.template registerType<CObstacleInstance>(79);
|
|
s.template registerType<SpellCreatedObstacle>(80);
|
|
s.template registerType<CPack>(82);
|
|
s.template registerType<PackageApplied>(84);
|
|
s.template registerType<SystemMessage>(85);
|
|
s.template registerType<PlayerBlocked>(86);
|
|
s.template registerType<PlayerCheated>(87);
|
|
s.template registerType<PlayerStartsTurn>(88);
|
|
s.template registerType<DaysWithoutTown>(89);
|
|
s.template registerType<TurnTimeUpdate>(90);
|
|
s.template registerType<SetResources>(91);
|
|
s.template registerType<SetPrimSkill>(92);
|
|
s.template registerType<SetSecSkill>(93);
|
|
s.template registerType<HeroVisitCastle>(94);
|
|
s.template registerType<ChangeSpells>(95);
|
|
s.template registerType<SetMana>(96);
|
|
s.template registerType<SetMovePoints>(97);
|
|
s.template registerType<FoWChange>(98);
|
|
s.template registerType<SetAvailableHero>(99);
|
|
s.template registerType<GiveBonus>(100);
|
|
s.template registerType<ChangeObjPos>(101);
|
|
s.template registerType<PlayerEndsTurn>(102);
|
|
s.template registerType<PlayerEndsGame>(103);
|
|
s.template registerType<PlayerReinitInterface>(104);
|
|
s.template registerType<RemoveBonus>(105);
|
|
s.template registerType<UpdateArtHandlerLists>(106);
|
|
s.template registerType<ChangeFormation>(107);
|
|
s.template registerType<RemoveObject>(108);
|
|
s.template registerType<TryMoveHero>(109);
|
|
s.template registerType<NewStructures>(110);
|
|
s.template registerType<RazeStructures>(111);
|
|
s.template registerType<SetAvailableCreatures>(112);
|
|
s.template registerType<SetHeroesInTown>(113);
|
|
s.template registerType<HeroRecruited>(114);
|
|
s.template registerType<GiveHero>(115);
|
|
s.template registerType<NewTurn>(116);
|
|
s.template registerType<InfoWindow>(117);
|
|
s.template registerType<SetObjectProperty>(118);
|
|
s.template registerType<AdvmapSpellCast>(119);
|
|
s.template registerType<OpenWindow>(120);
|
|
s.template registerType<NewObject>(121);
|
|
s.template registerType<NewArtifact>(122);
|
|
s.template registerType<AddQuest>(123);
|
|
s.template registerType<SetAvailableArtifacts>(124);
|
|
s.template registerType<CenterView>(125);
|
|
s.template registerType<HeroVisit>(126);
|
|
s.template registerType<SetCommanderProperty>(127);
|
|
s.template registerType<ChangeObjectVisitors>(128);
|
|
s.template registerType<ChangeArtifactsCostume>(129);
|
|
s.template registerType<ShowWorldViewEx>(130);
|
|
s.template registerType<EntitiesChanged>(131);
|
|
s.template registerType<BattleStart>(132);
|
|
s.template registerType<BattleNextRound>(133);
|
|
s.template registerType<BattleSetActiveStack>(134);
|
|
s.template registerType<BattleResult>(135);
|
|
s.template registerType<BattleResultAccepted>(136);
|
|
s.template registerType<BattleCancelled>(137);
|
|
s.template registerType<BattleLogMessage>(138);
|
|
s.template registerType<BattleStackMoved>(139);
|
|
s.template registerType<BattleAttack>(140);
|
|
s.template registerType<StartAction>(141);
|
|
s.template registerType<EndAction>(142);
|
|
s.template registerType<BattleSpellCast>(143);
|
|
s.template registerType<SetStackEffect>(144);
|
|
s.template registerType<BattleTriggerEffect>(145);
|
|
s.template registerType<BattleUpdateGateState>(146);
|
|
s.template registerType<BattleSetStackProperty>(147);
|
|
s.template registerType<StacksInjured>(148);
|
|
s.template registerType<BattleResultsApplied>(149);
|
|
s.template registerType<BattleUnitsChanged>(150);
|
|
s.template registerType<BattleObstaclesChanged>(151);
|
|
s.template registerType<CatapultAttack>(152);
|
|
s.template registerType<HeroLevelUp>(154);
|
|
s.template registerType<CommanderLevelUp>(155);
|
|
s.template registerType<BlockingDialog>(156);
|
|
s.template registerType<GarrisonDialog>(157);
|
|
s.template registerType<ExchangeDialog>(158);
|
|
s.template registerType<TeleportDialog>(159);
|
|
s.template registerType<MapObjectSelectDialog>(160);
|
|
s.template registerType<ChangeStackCount>(162);
|
|
s.template registerType<SetStackType>(163);
|
|
s.template registerType<EraseStack>(164);
|
|
s.template registerType<SwapStacks>(165);
|
|
s.template registerType<InsertNewStack>(166);
|
|
s.template registerType<RebalanceStacks>(167);
|
|
s.template registerType<PutArtifact>(169);
|
|
s.template registerType<BulkEraseArtifacts>(170);
|
|
s.template registerType<AssembledArtifact>(171);
|
|
s.template registerType<DisassembledArtifact>(172);
|
|
s.template registerType<BulkMoveArtifacts>(173);
|
|
s.template registerType<PlayerMessageClient>(174);
|
|
s.template registerType<BulkRebalanceStacks>(175);
|
|
s.template registerType<BulkSmartRebalanceStacks>(176);
|
|
s.template registerType<SetRewardableConfiguration>(177);
|
|
s.template registerType<SetBankConfiguration>(178);
|
|
s.template registerType<CPackForServer>(179);
|
|
s.template registerType<EndTurn>(180);
|
|
s.template registerType<DismissHero>(181);
|
|
s.template registerType<MoveHero>(182);
|
|
s.template registerType<ArrangeStacks>(183);
|
|
s.template registerType<DisbandCreature>(184);
|
|
s.template registerType<BuildStructure>(185);
|
|
s.template registerType<VisitTownBuilding>(186);
|
|
s.template registerType<RecruitCreatures>(187);
|
|
s.template registerType<UpgradeCreature>(188);
|
|
s.template registerType<GarrisonHeroSwap>(189);
|
|
s.template registerType<ExchangeArtifacts>(190);
|
|
s.template registerType<AssembleArtifacts>(191);
|
|
s.template registerType<BuyArtifact>(192);
|
|
s.template registerType<TradeOnMarketplace>(193);
|
|
s.template registerType<SetFormation>(194);
|
|
s.template registerType<HireHero>(195);
|
|
s.template registerType<BuildBoat>(196);
|
|
s.template registerType<QueryReply>(197);
|
|
s.template registerType<MakeAction>(198);
|
|
s.template registerType<DigWithHero>(199);
|
|
s.template registerType<CastAdvSpell>(200);
|
|
s.template registerType<CastleTeleportHero>(201);
|
|
s.template registerType<SaveGame>(202);
|
|
s.template registerType<PlayerMessage>(203);
|
|
s.template registerType<BulkSplitStack>(204);
|
|
s.template registerType<BulkMergeStacks>(205);
|
|
s.template registerType<BulkSmartSplitStack>(206);
|
|
s.template registerType<BulkMoveArmy>(207);
|
|
s.template registerType<BulkExchangeArtifacts>(208);
|
|
s.template registerType<ManageBackpackArtifacts>(209);
|
|
s.template registerType<ManageEquippedArtifacts>(210);
|
|
s.template registerType<EraseArtifactByClient>(211);
|
|
s.template registerType<GamePause>(212);
|
|
s.template registerType<CPackForLobby>(213);
|
|
s.template registerType<CLobbyPackToPropagate>(214);
|
|
s.template registerType<CLobbyPackToServer>(215);
|
|
s.template registerType<LobbyClientConnected>(216);
|
|
s.template registerType<LobbyClientDisconnected>(217);
|
|
s.template registerType<LobbyChatMessage>(218);
|
|
s.template registerType<LobbyPvPAction>(219);
|
|
s.template registerType<LobbyGuiAction>(220);
|
|
s.template registerType<LobbyLoadProgress>(221);
|
|
s.template registerType<LobbyRestartGame>(222);
|
|
s.template registerType<LobbyPrepareStartGame>(223);
|
|
s.template registerType<LobbyStartGame>(224);
|
|
s.template registerType<LobbyChangeHost>(225);
|
|
s.template registerType<LobbyUpdateState>(226);
|
|
s.template registerType<LobbyShowMessage>(227);
|
|
s.template registerType<LobbyChangePlayerOption>(228);
|
|
s.template registerType<LobbySetMap>(229);
|
|
s.template registerType<LobbySetCampaign>(230);
|
|
s.template registerType<LobbySetCampaignMap>(231);
|
|
s.template registerType<LobbySetCampaignBonus>(232);
|
|
s.template registerType<LobbySetPlayer>(233);
|
|
s.template registerType<LobbySetPlayerName>(234);
|
|
s.template registerType<LobbySetPlayerHandicap>(235);
|
|
s.template registerType<LobbySetTurnTime>(236);
|
|
s.template registerType<LobbySetSimturns>(237);
|
|
s.template registerType<LobbySetDifficulty>(238);
|
|
s.template registerType<LobbyForceSetPlayer>(239);
|
|
s.template registerType<LobbySetExtraOptions>(240);
|
|
s.template registerType<SpellResearch>(241);
|
|
s.template registerType<SetResearchedSpells>(242);
|
|
s.template registerType<SaveLocalState>(243);
|
|
s.template registerType<LobbyDelete>(244);
|
|
}
|
|
|
|
VCMI_LIB_NAMESPACE_END
|