/* * 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 "../NetPacks.h" #include "../NetPacksLobby.h" #include "../VCMI_Lib.h" #include "../CArtHandler.h" #include "../CPlayerState.h" #include "../CHeroHandler.h" #include "../CTownHandler.h" #include "../CModHandler.h" //needed? #include "../mapObjects/CObjectClassesHandler.h" #include "../mapObjects/CRewardableConstructor.h" #include "../mapObjects/CommonConstructors.h" #include "../mapObjects/MapObjects.h" #include "../battle/CObstacleInstance.h" #include "../CStack.h" VCMI_LIB_NAMESPACE_BEGIN class BinarySerializer; class BinaryDeserializer; class CTypeList; template void registerTypesMapObjects1(Serializer &s) { ////////////////////////////////////////////////////////////////////////// // Adventure map objects ////////////////////////////////////////////////////////////////////////// s.template registerType(); // Non-armed objects s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); // Armed objects s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); } template void registerTypesMapObjectTypes(Serializer &s) { s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); #define REGISTER_GENERIC_HANDLER(TYPENAME) s.template registerType >() REGISTER_GENERIC_HANDLER(CGObjectInstance); REGISTER_GENERIC_HANDLER(CGMarket); REGISTER_GENERIC_HANDLER(CCartographer); REGISTER_GENERIC_HANDLER(CGArtifact); REGISTER_GENERIC_HANDLER(CGBlackMarket); REGISTER_GENERIC_HANDLER(CGBoat); REGISTER_GENERIC_HANDLER(CGBorderGate); REGISTER_GENERIC_HANDLER(CGBorderGuard); REGISTER_GENERIC_HANDLER(CGCreature); REGISTER_GENERIC_HANDLER(CGDenOfthieves); REGISTER_GENERIC_HANDLER(CGDwelling); REGISTER_GENERIC_HANDLER(CGEvent); REGISTER_GENERIC_HANDLER(CGGarrison); REGISTER_GENERIC_HANDLER(CGHeroPlaceholder); REGISTER_GENERIC_HANDLER(CGHeroInstance); REGISTER_GENERIC_HANDLER(CGKeymasterTent); REGISTER_GENERIC_HANDLER(CGLighthouse); REGISTER_GENERIC_HANDLER(CGTerrainPatch); REGISTER_GENERIC_HANDLER(CGMagi); REGISTER_GENERIC_HANDLER(CGMarket); REGISTER_GENERIC_HANDLER(CGMine); REGISTER_GENERIC_HANDLER(CGObelisk); REGISTER_GENERIC_HANDLER(CGObservatory); REGISTER_GENERIC_HANDLER(CGPandoraBox); REGISTER_GENERIC_HANDLER(CGQuestGuard); REGISTER_GENERIC_HANDLER(CGResource); REGISTER_GENERIC_HANDLER(CGScholar); REGISTER_GENERIC_HANDLER(CGSeerHut); REGISTER_GENERIC_HANDLER(CGShipyard); REGISTER_GENERIC_HANDLER(CGShrine); REGISTER_GENERIC_HANDLER(CGSignBottle); REGISTER_GENERIC_HANDLER(CGSirens); REGISTER_GENERIC_HANDLER(CGMonolith); REGISTER_GENERIC_HANDLER(CGSubterraneanGate); REGISTER_GENERIC_HANDLER(CGWhirlpool); REGISTER_GENERIC_HANDLER(CGTownInstance); REGISTER_GENERIC_HANDLER(CGUniversity); REGISTER_GENERIC_HANDLER(CGWitchHut); #undef REGISTER_GENERIC_HANDLER s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); //new types (other than netpacks) must register here //order of type registration is critical for loading old savegames } template void registerTypesMapObjects2(Serializer &s) { //Other object-related s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); //s.template registerType(); //s.template registerType(); //end of objects ////////////////////////////////////////////////////////////////////////// // Bonus system ////////////////////////////////////////////////////////////////////////// //s.template registerType(); s.template registerType(); // Limiters //s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); // s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); //s.template registerType(); //TODO //s.template registerType(); s.template registerType(); s.template registerType(); //s.template registerType(); s.template registerType(); s.template registerType(); //s.template registerType(); s.template registerType(); } template void registerTypesClientPacks1(Serializer &s) { s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); } template void registerTypesClientPacks2(Serializer &s) { s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); } template void registerTypesServerPacks(Serializer &s) { s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); } template void registerTypesLobbyPacks(Serializer &s) { s.template registerType(); s.template registerType(); s.template registerType(); // Any client can sent s.template registerType(); s.template registerType(); s.template registerType(); // Only host client send s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); // Only server send s.template registerType(); s.template registerType(); // For client with permissions s.template registerType(); // Only for host client s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); s.template registerType(); } template void registerTypes(Serializer &s) { registerTypesMapObjects1(s); registerTypesMapObjects2(s); registerTypesMapObjectTypes(s); registerTypesClientPacks1(s); registerTypesClientPacks2(s); registerTypesServerPacks(s); registerTypesLobbyPacks(s); } #ifndef INSTANTIATE_REGISTER_TYPES_HERE extern template DLL_LINKAGE void registerTypes(BinaryDeserializer & s); extern template DLL_LINKAGE void registerTypes(BinarySerializer & s); extern template DLL_LINKAGE void registerTypes(CTypeList & s); #endif VCMI_LIB_NAMESPACE_END