瀏覽代碼

Moved all object-related files to lib/mapObjects directory.
Renamed some classes to more readable names

Ivan Savenko 11 年之前
父節點
當前提交
0afdfa529c
共有 68 個文件被更改,包括 560 次插入516 次删除
  1. 1 1
      AI/VCAI/AIUtility.cpp
  2. 1 1
      AI/VCAI/AIUtility.h
  3. 1 1
      AI/VCAI/Fuzzy.cpp
  4. 1 1
      AI/VCAI/Goals.h
  5. 2 2
      AI/VCAI/VCAI.cpp
  6. 2 2
      AI/VCAI/VCAI.h
  7. 2 2
      CCallback.cpp
  8. 1 1
      client/AdventureMapClasses.cpp
  9. 1 1
      client/CAdvmapInterface.cpp
  10. 1 1
      client/CCastleInterface.cpp
  11. 1 1
      client/CHeroWindow.cpp
  12. 1 1
      client/CKingdomInterface.cpp
  13. 2 2
      client/CMT.cpp
  14. 2 2
      client/CPlayerInterface.cpp
  15. 2 2
      client/CPreGame.cpp
  16. 1 1
      client/CQuestLog.cpp
  17. 1 1
      client/CSpellWindow.cpp
  18. 2 2
      client/Client.cpp
  19. 1 1
      client/GUIClasses.cpp
  20. 3 3
      client/Graphics.cpp
  21. 2 2
      client/NetPacksClient.cpp
  22. 1 1
      client/battle/CBattleInterface.cpp
  23. 1 1
      client/battle/CBattleInterfaceClasses.cpp
  24. 2 2
      client/mapHandler.cpp
  25. 1 1
      lib/BattleState.cpp
  26. 1 1
      lib/BattleState.h
  27. 1 1
      lib/CArtHandler.cpp
  28. 1 1
      lib/CCreatureSet.cpp
  29. 1 1
      lib/CGameInfoCallback.cpp
  30. 2 2
      lib/CGameState.cpp
  31. 3 3
      lib/CGameState.h
  32. 1 1
      lib/CHeroHandler.cpp
  33. 6 4
      lib/CMakeLists.txt
  34. 2 2
      lib/CModHandler.cpp
  35. 2 2
      lib/CTownHandler.cpp
  36. 1 1
      lib/Connection.h
  37. 1 1
      lib/GameConstants.cpp
  38. 2 2
      lib/NetPacksLib.cpp
  39. 2 2
      lib/VCMI_Lib.cpp
  40. 2 310
      lib/mapObjects/CObjectClassesHandler.cpp
  41. 1 63
      lib/mapObjects/CObjectClassesHandler.h
  42. 0 0
      lib/mapObjects/CObjectHandler.cpp
  43. 1 1
      lib/mapObjects/CObjectHandler.h
  44. 9 9
      lib/mapObjects/CRewardableConstructor.cpp
  45. 4 4
      lib/mapObjects/CRewardableConstructor.h
  46. 17 17
      lib/mapObjects/CRewardableObject.cpp
  47. 12 12
      lib/mapObjects/CRewardableObject.h
  48. 333 0
      lib/mapObjects/ObjectTemplate.cpp
  49. 79 0
      lib/mapObjects/ObjectTemplate.h
  50. 1 1
      lib/mapping/CCampaignHandler.cpp
  51. 1 1
      lib/mapping/CMap.cpp
  52. 1 1
      lib/mapping/CMap.h
  53. 1 1
      lib/mapping/CMapEditManager.cpp
  54. 3 3
      lib/mapping/MapFormatH3M.cpp
  55. 1 1
      lib/mapping/MapFormatH3M.h
  56. 2 2
      lib/registerTypes/RegisterTypes.cpp
  57. 10 10
      lib/registerTypes/RegisterTypes.h
  58. 2 2
      lib/registerTypes/TypesClientPacks1.cpp
  59. 2 2
      lib/registerTypes/TypesClientPacks2.cpp
  60. 2 2
      lib/registerTypes/TypesMapObjects1.cpp
  61. 2 2
      lib/registerTypes/TypesMapObjects2.cpp
  62. 2 2
      lib/registerTypes/TypesPregamePacks.cpp
  63. 2 2
      lib/registerTypes/TypesServerPacks.cpp
  64. 2 2
      lib/rmg/CMapGenerator.cpp
  65. 1 1
      lib/rmg/CMapGenerator.h
  66. 2 2
      server/CGameHandler.cpp
  67. 2 2
      server/CVCMIServer.cpp
  68. 1 1
      server/NetPacksServer.cpp

+ 1 - 1
AI/VCAI/AIUtility.cpp

@@ -3,7 +3,7 @@
 #include "VCAI.h"
 
 #include "../../lib/UnlockGuard.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/CConfigHandler.h"
 #include "../../lib/CHeroHandler.h"
 

+ 1 - 1
AI/VCAI/AIUtility.h

@@ -5,7 +5,7 @@
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/CTownHandler.h"
 #include "../../lib/CSpellHandler.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/Connection.h"
 #include "../../lib/CGameState.h"
 #include "../../lib/mapping/CMap.h"

+ 1 - 1
AI/VCAI/Fuzzy.cpp

@@ -2,7 +2,7 @@
 #include "Fuzzy.h"
 #include <limits>
 
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/VCMI_Lib.h"
 #include "../../CCallback.h"

+ 1 - 1
AI/VCAI/Goals.h

@@ -1,7 +1,7 @@
 #pragma once
 
 #include "../../lib/VCMI_Lib.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/CBuildingHandler.h"
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/CTownHandler.h"

+ 2 - 2
AI/VCAI/VCAI.cpp

@@ -2,8 +2,8 @@
 #include "VCAI.h"
 #include "Goals.h"
 #include "../../lib/UnlockGuard.h"
-#include "../../lib/CObjectHandler.h"
-#include "../../lib/CObjectWithReward.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
+#include "../../lib/mapObjects/CRewardableObject.h"
 #include "../../lib/CConfigHandler.h"
 #include "../../lib/CHeroHandler.h"
 

+ 2 - 2
AI/VCAI/VCAI.h

@@ -4,7 +4,7 @@
 #include "Goals.h"
 #include "../../lib/AI_Base.h"
 #include "../../CCallback.h"
-#include "../../lib/CObjectClassesHandler.h"
+#include "../../lib/mapObjects/CObjectClassesHandler.h"
 
 #include "../../lib/CThreadHelper.h"
 
@@ -14,7 +14,7 @@
 #include "../../lib/CCreatureHandler.h"
 #include "../../lib/CTownHandler.h"
 #include "../../lib/CSpellHandler.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/Connection.h"
 #include "../../lib/CGameState.h"
 #include "../../lib/mapping/CMap.h"

+ 2 - 2
CCallback.cpp

@@ -9,10 +9,10 @@
 #include "client/Client.h"
 #include "lib/mapping/CMap.h"
 #include "lib/CBuildingHandler.h"
-#include "lib/CObjectClassesHandler.h"
+#include "lib/mapObjects/CObjectClassesHandler.h"
 #include "lib/CGeneralTextHandler.h"
 #include "lib/CHeroHandler.h"
-#include "lib/CObjectHandler.h"
+#include "lib/mapObjects/CObjectHandler.h"
 #include "lib/Connection.h"
 #include "lib/NetPacks.h"
 #include "client/mapHandler.h"

+ 1 - 1
client/AdventureMapClasses.cpp

@@ -6,7 +6,7 @@
 #include "../lib/filesystem/Filesystem.h"
 #include "../lib/mapping/CMap.h"
 #include "../lib/CModHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CGameState.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CTownHandler.h"

+ 1 - 1
client/CAdvmapInterface.cpp

@@ -17,7 +17,7 @@
 #include "CDefHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CTownHandler.h"
 #include "../lib/mapping/CMap.h"
 #include "../lib/JsonNode.h"

+ 1 - 1
client/CCastleInterface.cpp

@@ -7,7 +7,7 @@
 #include "../lib/CCreatureHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CModHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CTownHandler.h"
 #include "CAdvmapInterface.h"

+ 1 - 1
client/CHeroWindow.cpp

@@ -20,7 +20,7 @@
 #include "CDefHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/NetPacksBase.h"
 
 #include "gui/CGuiHandler.h"

+ 1 - 1
client/CKingdomInterface.cpp

@@ -5,7 +5,7 @@
 #include "../lib/CCreatureHandler.h" //creatures name for objects list
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CModHandler.h" //for buildings per turn
-#include "../lib/CObjectHandler.h" //Hero/Town objects
+#include "../lib/mapObjects/CObjectHandler.h" //Hero/Town objects
 #include "../lib/CHeroHandler.h" // only for calculating required xp? worth it?
 #include "../lib/CTownHandler.h"
 #include "CAnimation.h" //CAnimImage

+ 2 - 2
client/CMT.cpp

@@ -34,7 +34,7 @@
 #include "CMessage.h"
 #include "../lib/CModHandler.h"
 #include "../lib/CTownHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CArtHandler.h"
 #include "../lib/CScriptingModule.h"
 #include "../lib/GameConstants.h"
@@ -44,7 +44,7 @@
 #ifdef _WIN32
 #include "SDL_syswm.h"
 #endif
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/UnlockGuard.h"
 #include "CMT.h"
 

+ 2 - 2
client/CPlayerInterface.cpp

@@ -1,5 +1,5 @@
 #include "StdInc.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "CAdvmapInterface.h"
 #include "battle/CBattleInterface.h"
 #include "battle/CBattleInterfaceClasses.h"
@@ -21,7 +21,7 @@
 #include "../lib/CArtHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/Connection.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CTownHandler.h"

+ 2 - 2
client/CPreGame.cpp

@@ -11,11 +11,11 @@
 #include "gui/CCursorHandler.h"
 #include "CAnimation.h"
 #include "CDefHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CTownHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/mapping/CCampaignHandler.h"
 #include "../lib/CCreatureHandler.h"
 #include "../lib/JsonNode.h"

+ 1 - 1
client/CQuestLog.cpp

@@ -16,7 +16,7 @@
 #include "../lib/CGameState.h"
 #include "../lib/CArtHandler.h"
 #include "../lib/NetPacksBase.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 
 #include "gui/CGuiHandler.h"
 #include "gui/CIntObjectClasses.h"

+ 1 - 1
client/CSpellWindow.cpp

@@ -3,7 +3,7 @@
 
 #include "Graphics.h"
 #include "CDefHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "CVideoHandler.h"

+ 2 - 2
client/Client.cpp

@@ -11,11 +11,11 @@
 #include "../lib/BattleState.h"
 #include "../lib/CModHandler.h"
 #include "../lib/CArtHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
 #include "../lib/CTownHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CBuildingHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/Connection.h"

+ 1 - 1
client/GUIClasses.cpp

@@ -24,7 +24,7 @@
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
 #include "../lib/CModHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CTownHandler.h"
 #include "../lib/CondSh.h"

+ 3 - 3
client/Graphics.cpp

@@ -12,13 +12,13 @@
 #include "../CCallback.h"
 #include "../lib/CHeroHandler.h"
 #include "../lib/CTownHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CCreatureHandler.h"
 #include "CBitmapHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CSpellHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CGameState.h"
 #include "../lib/JsonNode.h"
 #include "../lib/vcmi_endian.h"

+ 2 - 2
client/NetPacksClient.cpp

@@ -9,9 +9,9 @@
 #include "CGameInfo.h"
 #include "../lib/Connection.h"
 #include "../lib/CGeneralTextHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/VCMI_Lib.h"
 #include "../lib/mapping/CMap.h"
 #include "../lib/VCMIDirs.h"

+ 1 - 1
client/battle/CBattleInterface.cpp

@@ -6,7 +6,7 @@
 #include "../CAdvmapInterface.h"
 #include "../CAnimation.h"
 #include "../CBitmapHandler.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/CHeroHandler.h"
 # include "../CDefHandler.h"
 #include "../../lib/CSpellHandler.h"

+ 1 - 1
client/battle/CBattleInterfaceClasses.cpp

@@ -16,7 +16,7 @@
 #include "../../lib/CGeneralTextHandler.h"
 #include "../../lib/NetPacks.h"
 #include "../../lib/CCreatureHandler.h"
-#include "../../lib/CObjectHandler.h"
+#include "../../lib/mapObjects/CObjectHandler.h"
 #include "../../lib/BattleState.h"
 #include "../CMusicHandler.h"
 #include "../CVideoHandler.h"

+ 2 - 2
client/mapHandler.cpp

@@ -14,12 +14,12 @@
 #include "CBitmapHandler.h"
 #include "gui/SDL_Extensions.h"
 #include "CGameInfo.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CGameState.h"
 #include "../lib/CHeroHandler.h"
 #include "../lib/CTownHandler.h"
 #include "Graphics.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/mapping/CMap.h"
 #include "CDefHandler.h"
 #include "../lib/CConfigHandler.h"

+ 1 - 1
lib/BattleState.cpp

@@ -13,7 +13,7 @@
 
 #include <numeric>
 #include "VCMI_Lib.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CHeroHandler.h"
 #include "CCreatureHandler.h"
 #include "CSpellHandler.h"

+ 1 - 1
lib/BattleState.h

@@ -4,7 +4,7 @@
 #include "BattleHex.h"
 #include "HeroBonus.h"
 #include "CCreatureSet.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CCreatureHandler.h"
 #include "CObstacleInstance.h"
 #include "ConstTransitivePtr.h"

+ 1 - 1
lib/CArtHandler.cpp

@@ -16,7 +16,7 @@
 #include "VCMI_Lib.h"
 #include "CModHandler.h"
 #include "CSpellHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "NetPacksBase.h"
 #include "GameConstants.h"
 #include "CRandomGenerator.h"

+ 1 - 1
lib/CCreatureSet.cpp

@@ -4,7 +4,7 @@
 #include "CCreatureHandler.h"
 #include "VCMI_Lib.h"
 #include "CModHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "IGameCallback.h"
 #include "CGameState.h"
 #include "CGeneralTextHandler.h"

+ 1 - 1
lib/CGameInfoCallback.cpp

@@ -12,7 +12,7 @@
 #include "CGameInfoCallback.h"
 
 #include "CGameState.h" // PlayerState
-#include "CObjectHandler.h" // for CGObjectInstance
+#include "mapObjects/CObjectHandler.h" // for CGObjectInstance
 #include "StartInfo.h" // for StartInfo
 #include "BattleState.h" // for BattleInfo
 #include "NetPacks.h" // for InfoWindow

+ 2 - 2
lib/CGameState.cpp

@@ -2,14 +2,14 @@
 #include "CGameState.h"
 
 #include "mapping/CCampaignHandler.h"
-#include "CObjectClassesHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
 #include "CArtHandler.h"
 #include "CBuildingHandler.h"
 #include "CGeneralTextHandler.h"
 #include "CTownHandler.h"
 #include "CSpellHandler.h"
 #include "CHeroHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CCreatureHandler.h"
 #include "CModHandler.h"
 #include "VCMI_Lib.h"

+ 3 - 3
lib/CGameState.h

@@ -14,7 +14,7 @@
 #include "IGameCallback.h"
 #include "ResourceSet.h"
 #include "int3.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CRandomGenerator.h"
 
 /*
@@ -167,7 +167,7 @@ public:
 	ObjectInstanceID currentSelection; //id of hero/town, 0xffffffff if none
 	TeamID team;
 	TResources resources;
-	std::set<ObjectInstanceID> visitedObjects; // as a std::set, since most accesses here will be from visited status checks
+	std::set<ObjectInstanceID> visitedObjects; // as a std::set, since most accesses here will be from visited status checks
 	std::vector<ConstTransitivePtr<CGHeroInstance> > heroes;
 	std::vector<ConstTransitivePtr<CGTownInstance> > towns;
 	std::vector<ConstTransitivePtr<CGHeroInstance> > availableHeroes; //heroes available in taverns
@@ -184,7 +184,7 @@ public:
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & color & human & currentSelection & team & resources & status;
-		h & heroes & towns & availableHeroes & dwellings & visitedObjects;
+		h & heroes & towns & availableHeroes & dwellings & visitedObjects;
 		h & getBonusList(); //FIXME FIXME FIXME
 		h & status & daysWithoutCastle;
 		h & enteredLosingCheatCode & enteredWinningCheatCode;

+ 1 - 1
lib/CHeroHandler.cpp

@@ -10,7 +10,7 @@
 #include "CCreatureHandler.h"
 #include "CModHandler.h"
 #include "CTownHandler.h"
-#include "CObjectHandler.h" //for hero specialty
+#include "mapObjects/CObjectHandler.h" //for hero specialty
 #include <math.h>
 
 /*

+ 6 - 4
lib/CMakeLists.txt

@@ -9,7 +9,6 @@ set(lib_SRCS
 		IGameCallback.cpp
 		CGameInfoCallback.cpp
 		CGameState.cpp
-		CObjectHandler.cpp
 		Connection.cpp
 		NetPacksLib.cpp
 
@@ -33,6 +32,12 @@ set(lib_SRCS
 		filesystem/Filesystem.cpp
 		filesystem/ResourceID.cpp
 
+		mapObjects/CObjectClassesHandler.cpp
+		mapObjects/CObjectHandler.cpp
+		mapObjects/CRewardableConstructor.cpp
+		mapObjects/CRewardableObject.cpp
+		mapObjects/ObjectTemplate.cpp
+
 		logging/CBasicLogConfigurator.cpp
 		logging/CLogger.cpp
 
@@ -63,14 +68,11 @@ set(lib_SRCS
 		CConsoleHandler.cpp
 		CCreatureHandler.cpp
 		CCreatureSet.cpp
-		CObjectClassesHandler.cpp
 		CGameInterface.cpp
 		CGeneralTextHandler.cpp
 		CHeroHandler.cpp
 		CModHandler.cpp
 		CObstacleInstance.cpp
-		CObjectConstructor.cpp
-		CObjectWithReward.cpp
 		CRandomGenerator.cpp
 		CSpellHandler.cpp
 		CThreadHelper.cpp

+ 2 - 2
lib/CModHandler.cpp

@@ -1,6 +1,6 @@
 #include "StdInc.h"
 #include "CModHandler.h"
-#include "CObjectClassesHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
 #include "JsonNode.h"
 #include "filesystem/Filesystem.h"
 #include "filesystem/AdapterLoaders.h"
@@ -10,7 +10,7 @@
 #include "CArtHandler.h"
 #include "CTownHandler.h"
 #include "CHeroHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "StringConstants.h"
 #include "CStopWatch.h"
 #include "IHandlerBase.h"

+ 2 - 2
lib/CTownHandler.cpp

@@ -11,8 +11,8 @@
 #include "CArtHandler.h"
 #include "CSpellHandler.h"
 #include "filesystem/Filesystem.h"
-#include "CObjectClassesHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
+#include "mapObjects/CObjectHandler.h"
 
 /*
  * CTownHandler.cpp, part of VCMI engine

+ 1 - 1
lib/Connection.h

@@ -24,7 +24,7 @@
 
 #include "ConstTransitivePtr.h"
 #include "CCreatureSet.h" //for CStackInstance
-#include "CObjectHandler.h" //for CArmedInstance
+#include "mapObjects/CObjectHandler.h" //for CArmedInstance
 #include "mapping/CCampaignHandler.h" //for CCampaignState
 #include "rmg/CMapGenerator.h" // for CMapGenOptions
 

+ 1 - 1
lib/GameConstants.cpp

@@ -13,7 +13,7 @@
 #include "StdInc.h"
 
 #include "VCMI_Lib.h"
-#include "CObjectClassesHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
 #include "CArtHandler.h"
 #include "CCreatureHandler.h"
 #include "CSpellHandler.h"

+ 2 - 2
lib/NetPacksLib.cpp

@@ -2,10 +2,10 @@
 #include "NetPacks.h"
 
 #include "CGeneralTextHandler.h"
-#include "CObjectClassesHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
 #include "CArtHandler.h"
 #include "CHeroHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CModHandler.h"
 #include "VCMI_Lib.h"
 #include "mapping/CMap.h"

+ 2 - 2
lib/VCMI_Lib.cpp

@@ -14,9 +14,9 @@
 #include "CArtHandler.h"
 #include "CBonusTypeHandler.h"
 #include "CCreatureHandler.h"
-#include "CObjectClassesHandler.h"
+#include "mapObjects/CObjectClassesHandler.h"
 #include "CHeroHandler.h"
-#include "CObjectHandler.h"
+#include "mapObjects/CObjectHandler.h"
 #include "CTownHandler.h"
 #include "CBuildingHandler.h"
 #include "CSpellHandler.h"

+ 2 - 310
lib/CObjectClassesHandler.cpp → lib/mapObjects/CObjectClassesHandler.cpp

@@ -11,7 +11,7 @@
 #include "CModHandler.h"
 #include "JsonNode.h"
 
-#include "CObjectConstructor.h"
+#include "CRewardableConstructor.h"
 
 /*
  * CObjectClassesHandler.cpp, part of VCMI engine
@@ -23,314 +23,6 @@
  *
  */
 
-static bool isVisitableFromTop(int identifier, int type)
-{
-	if(type == 2 || type == 3 || type == 4 || type == 5) //creature, hero, artifact, resource
-		return true;
-
-	static const Obj visitableFromTop[] =
-		{Obj::FLOTSAM,
-		Obj::SEA_CHEST,
-		Obj::SHIPWRECK_SURVIVOR,
-		Obj::BUOY,
-		Obj::OCEAN_BOTTLE,
-		Obj::BOAT,
-		Obj::WHIRLPOOL,
-		Obj::GARRISON,
-		Obj::GARRISON2,
-		Obj::SCHOLAR,
-		Obj::CAMPFIRE,
-		Obj::BORDERGUARD,
-		Obj::BORDER_GATE,
-		Obj::QUEST_GUARD,
-		Obj::CORPSE
-	};
-	if (vstd::find_pos(visitableFromTop, identifier) != -1)
-		return true;
-	return false;
-}
-
-ObjectTemplate::ObjectTemplate():
-	visitDir(8|16|32|64|128), // all but top
-	id(Obj::NO_OBJ),
-	subid(0),
-	printPriority(0)
-{
-}
-
-void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
-{
-	std::string data = parser.readString();
-	std::vector<std::string> strings;
-	boost::split(strings, data, boost::is_any_of(" "));
-	assert(strings.size() == 9);
-
-	animationFile = strings[0];
-	stringID = strings[0];
-
-	std::string & blockStr = strings[1]; //block map, 0 = blocked, 1 = unblocked
-	std::string & visitStr = strings[2]; //visit map, 1 = visitable, 0 = not visitable
-
-	assert(blockStr.size() == 6*8);
-	assert(visitStr.size() == 6*8);
-
-	setSize(8, 6);
-	for (size_t i=0; i<6; i++) // 6 rows
-	{
-		for (size_t j=0; j<8; j++) // 8 columns
-		{
-			auto & tile = usedTiles[i][j];
-			tile |= VISIBLE; // assume that all tiles are visible
-			if (blockStr[i*8 + j] == '0')
-				tile |= BLOCKED;
-
-			if (visitStr[i*8 + j] == '1')
-				tile |= VISITABLE;
-		}
-	}
-
-	// strings[3] most likely - terrains on which this object can be placed in editor.
-	// e.g. Whirpool can be placed manually only on water while mines can be placed everywhere despite terrain-specific gfx
-	// so these two fields can be interpreted as "strong affinity" and "weak affinity" towards terrains
-	std::string & terrStr = strings[4]; // allowed terrains, 1 = object can be placed on this terrain
-
-	assert(terrStr.size() == 9); // all terrains but rock
-	for (size_t i=0; i<9; i++)
-	{
-		if (terrStr[8-i] == '1')
-			allowedTerrains.insert(ETerrainType(i));
-	}
-
-	id    = Obj(boost::lexical_cast<int>(strings[5]));
-	subid = boost::lexical_cast<int>(strings[6]);
-	int type  = boost::lexical_cast<int>(strings[7]);
-	printPriority = boost::lexical_cast<int>(strings[8]) * 100; // to have some space in future
-
-	if (isVisitableFromTop(id, type))
-		visitDir = 0xff;
-	else
-		visitDir = (8|16|32|64|128);
-
-	readMsk();
-}
-
-void ObjectTemplate::readMsk()
-{
-	ResourceID resID("SPRITES/" + animationFile, EResType::MASK);
-
-	if (CResourceHandler::get()->existsResource(resID))
-	{
-		auto msk = CResourceHandler::get()->load(resID)->readAll();
-		setSize(msk.first.get()[0], msk.first.get()[1]);
-	}
-	else //maximum possible size of H3 object //TODO: remove hardcode and move this data into modding system
-	{
-		setSize(8, 6);
-	}
-}
-
-void ObjectTemplate::readMap(CBinaryReader & reader)
-{
-	animationFile = reader.readString();
-
-	setSize(8, 6);
-	ui8 blockMask[6];
-	ui8 visitMask[6];
-	for(auto & byte : blockMask)
-		byte = reader.readUInt8();
-	for(auto & byte : visitMask)
-		byte = reader.readUInt8();
-
-	for (size_t i=0; i<6; i++) // 6 rows
-	{
-		for (size_t j=0; j<8; j++) // 8 columns
-		{
-			auto & tile = usedTiles[5 - i][7 - j];
-			tile |= VISIBLE; // assume that all tiles are visible
-			if (((blockMask[i] >> j) & 1 ) == 0)
-				tile |= BLOCKED;
-
-			if (((visitMask[i] >> j) & 1 ) != 0)
-				tile |= VISITABLE;
-		}
-	}
-
-	reader.readUInt16();
-	ui16 terrMask = reader.readUInt16();
-	for (size_t i=0; i<9; i++)
-	{
-		if (((terrMask >> i) & 1 ) != 0)
-			allowedTerrains.insert(ETerrainType(i));
-	}
-
-	id = Obj(reader.readUInt32());
-	subid = reader.readUInt32();
-	int type = reader.readUInt8();
-	printPriority = reader.readUInt8() * 100; // to have some space in future
-
-	if (isVisitableFromTop(id, type))
-		visitDir = 0xff;
-	else
-		visitDir = (8|16|32|64|128);
-
-	reader.skip(16);
-	readMsk();
-
-	if (id == Obj::EVENT)
-	{
-		setSize(1,1);
-		usedTiles[0][0] = VISITABLE;
-	}
-}
-
-void ObjectTemplate::readJson(const JsonNode &node)
-{
-	//id = Obj(node["basebase"].Float()); // temporary, should be removed and determined indirectly via object type parent (e.g. base->base)
-	//subid = node["base"].Float();
-	animationFile = node["animation"].String();
-
-	const JsonVector & visitDirs = node["visitableFrom"].Vector();
-	if (!visitDirs.empty())
-	{
-		if (visitDirs[0].String()[0] == '+') visitDir |= 1;
-		if (visitDirs[0].String()[1] == '+') visitDir |= 2;
-		if (visitDirs[0].String()[2] == '+') visitDir |= 4;
-		if (visitDirs[1].String()[2] == '+') visitDir |= 8;
-		if (visitDirs[2].String()[2] == '+') visitDir |= 16;
-		if (visitDirs[2].String()[1] == '+') visitDir |= 32;
-		if (visitDirs[2].String()[0] == '+') visitDir |= 64;
-		if (visitDirs[1].String()[0] == '+') visitDir |= 128;
-	}
-	else
-		visitDir = 0x00;
-
-	if (!node["allowedTerrains"].isNull())
-	{
-		for (auto & entry : node["allowedTerrains"].Vector())
-			allowedTerrains.insert(ETerrainType(vstd::find_pos(GameConstants::TERRAIN_NAMES, entry.String())));
-	}
-	else
-	{
-		for (size_t i=0; i< GameConstants::TERRAIN_TYPES; i++)
-			allowedTerrains.insert(ETerrainType(i));
-	}
-
-	auto charToTile = [&](const char & ch) -> ui8
-	{
-		switch (ch)
-		{
-			case ' ' : return 0;
-			case '0' : return 0;
-			case 'V' : return VISIBLE;
-			case 'B' : return VISIBLE | BLOCKED;
-			case 'H' : return BLOCKED;
-			case 'A' : return VISIBLE | BLOCKED | VISITABLE;
-			case 'T' : return BLOCKED | VISITABLE;
-			default:
-				logGlobal->errorStream() << "Unrecognized char " << ch << " in template mask";
-				return 0;
-		}
-	};
-
-	const JsonVector & mask = node["mask"].Vector();
-
-	size_t height = mask.size();
-	size_t width  = 0;
-	for (auto & line : mask)
-		vstd::amax(width, line.String().size());
-
-	setSize(width, height);
-
-	for (size_t i=0; i<mask.size(); i++)
-	{
-		const std::string & line = mask[i].String();
-		for (size_t j=0; j < line.size(); j++)
-			usedTiles[mask.size() - 1 - i][line.size() - 1 - j] = charToTile(line[j]);
-	}
-
-	printPriority = node["zIndex"].Float();
-}
-
-ui32 ObjectTemplate::getWidth() const
-{
-	return usedTiles.empty() ? 0 : usedTiles.front().size();
-}
-
-ui32 ObjectTemplate::getHeight() const
-{
-	return usedTiles.size();
-}
-
-void ObjectTemplate::setSize(ui32 width, ui32 height)
-{
-	usedTiles.resize(height);
-	for (auto & line : usedTiles)
-		line.resize(width, 0);
-}
-
-bool ObjectTemplate::isVisitable() const
-{
-	for (auto & line : usedTiles)
-		for (auto & tile : line)
-			if (tile & VISITABLE)
-				return true;
-	return false;
-}
-
-bool ObjectTemplate::isWithin(si32 X, si32 Y) const
-{
-	if (X < 0 || Y < 0)
-		return false;
-	if (X >= getWidth() || Y >= getHeight())
-		return false;
-	return true;
-}
-
-bool ObjectTemplate::isVisitableAt(si32 X, si32 Y) const
-{
-	if (isWithin(X, Y))
-		return usedTiles[Y][X] & VISITABLE;
-	return false;
-}
-
-bool ObjectTemplate::isVisibleAt(si32 X, si32 Y) const
-{
-	if (isWithin(X, Y))
-		return usedTiles[Y][X] & VISIBLE;
-	return false;
-}
-
-bool ObjectTemplate::isBlockedAt(si32 X, si32 Y) const
-{
-	if (isWithin(X, Y))
-		return usedTiles[Y][X] & BLOCKED;
-	return false;
-}
-
-bool ObjectTemplate::isVisitableFrom(si8 X, si8 Y) const
-{
-	// visitDir uses format
-	// 1 2 3
-	// 8   4
-	// 7 6 5
-	int dirMap[3][3] =
-	{
-		{ visitDir &   1, visitDir &   2, visitDir &   4 },
-		{ visitDir & 128,        1      , visitDir &   8 },
-		{ visitDir &  64, visitDir &  32, visitDir &  16 }
-	};
-	// map input values to range 0..2
-	int dx = X < 0 ? 0 : X == 0 ? 1 : 2;
-	int dy = Y < 0 ? 0 : Y == 0 ? 1 : 2;
-
-	return dirMap[dy][dx] != 0;
-}
-
-bool ObjectTemplate::canBePlacedAt(ETerrainType terrain) const
-{
-	return allowedTerrains.count(terrain) != 0;
-}
-
 CObjectClassesHandler::CObjectClassesHandler()
 {
 #define SET_HANDLER_CLASS(STRING, CLASSNAME) handlerConstructors[STRING] = std::make_shared<CLASSNAME>;
@@ -338,7 +30,7 @@ CObjectClassesHandler::CObjectClassesHandler()
 
 	// list of all known handlers, hardcoded for now since the only way to add new objects is via C++ code
 	//WARNING: should be in sync with registerTypesMapObjectTypes function
-	SET_HANDLER_CLASS("configurable", CObjectWithRewardConstructor);
+	SET_HANDLER_CLASS("configurable", CRewardableConstructor);
 
 	SET_HANDLER("", CGObjectInstance);
 	SET_HANDLER("generic", CGObjectInstance);

+ 1 - 63
lib/CObjectClassesHandler.h → lib/mapObjects/CObjectClassesHandler.h

@@ -3,6 +3,7 @@
 #include "GameConstants.h"
 #include "../lib/ConstTransitivePtr.h"
 #include "IHandlerBase.h"
+#include "ObjectTemplate.h"
 
 /*
  * CObjectClassesHandler.h, part of VCMI engine
@@ -14,72 +15,9 @@
  *
  */
 
-class CBinaryReader;
-class CLegacyConfigParser;
 class JsonNode;
 class CRandomGenerator;
 
-class DLL_LINKAGE ObjectTemplate
-{
-	enum EBlockMapBits
-	{
-		VISIBLE = 1,
-		VISITABLE = 2,
-		BLOCKED = 4
-	};
-
-	/// tiles that are covered by this object, uses EBlockMapBits enum as flags
-	std::vector<std::vector<ui8>> usedTiles;
-	/// directions from which object can be entered, format same as for moveDir in CGHeroInstance(but 0 - 7)
-	ui8 visitDir;
-	/// list of terrains on which this object can be placed
-	std::set<ETerrainType> allowedTerrains;
-
-public:
-	/// H3 ID/subID of this object
-	Obj id;
-	si32 subid;
-	/// print priority, objects with higher priority will be print first, below everything else
-	si32 printPriority;
-	/// animation file that should be used to display object
-	std::string animationFile;
-
-	/// string ID, equals to def base name for h3m files (lower case, no extension) or specified in mod data
-	std::string stringID;
-
-	ui32 getWidth() const;
-	ui32 getHeight() const;
-	void setSize(ui32 width, ui32 height);
-
-	bool isVisitable() const;
-
-	// Checks object used tiles
-	// Position is relative to bottom-right corner of the object, can not be negative
-	bool isWithin(si32 X, si32 Y) const;
-	bool isVisitableAt(si32 X, si32 Y) const;
-	bool isVisibleAt(si32 X, si32 Y) const;
-	bool isBlockedAt(si32 X, si32 Y) const;
-
-	// Checks if object is visitable from certain direction. X and Y must be between -1..+1
-	bool isVisitableFrom(si8 X, si8 Y) const;
-
-	// Checks if object can be placed on specific terrain
-	bool canBePlacedAt(ETerrainType terrain) const;
-
-	ObjectTemplate();
-
-	void readTxt(CLegacyConfigParser & parser);
-	void readMsk();
-	void readMap(CBinaryReader & reader);
-	void readJson(const JsonNode & node);
-
-	template <typename Handler> void serialize(Handler &h, const int version)
-	{
-		h & usedTiles & allowedTerrains & animationFile & stringID;
-		h & id & subid & printPriority & visitDir;
-	}
-};
-
 class IObjectInfo
 {
 public:

+ 0 - 0
lib/CObjectHandler.cpp → lib/mapObjects/CObjectHandler.cpp


+ 1 - 1
lib/CObjectHandler.h → lib/mapObjects/CObjectHandler.h

@@ -2,7 +2,7 @@
 
 #include "../lib/CCreatureSet.h"
 #include "../lib/CTownHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "CArtHandler.h"
 #include "../lib/ConstTransitivePtr.h"
 #include "int3.h"

+ 9 - 9
lib/CObjectConstructor.cpp → lib/mapObjects/CRewardableConstructor.cpp

@@ -1,5 +1,5 @@
 #include "StdInc.h"
-#include "CObjectConstructor.h"
+#include "CRewardableConstructor.h"
 
 #include "CRandomGenerator.h"
 #include "StringConstants.h"
@@ -136,7 +136,7 @@ void CRandomRewardObjectInfo::init(const JsonNode & objectConfig)
 	parameters = objectConfig;
 }
 
-void CRandomRewardObjectInfo::configureObject(CObjectWithReward * object, CRandomGenerator & rng) const
+void CRandomRewardObjectInfo::configureObject(CRewardableObject * object, CRandomGenerator & rng) const
 {
 	std::map<si32, si32> thrownDice;
 
@@ -262,29 +262,29 @@ bool CRandomRewardObjectInfo::givesBonuses() const
 	return testForKey(parameters, "bonuses");
 }
 
-CObjectWithRewardConstructor::CObjectWithRewardConstructor()
+CRewardableConstructor::CRewardableConstructor()
 {
 }
 
-void CObjectWithRewardConstructor::init(const JsonNode & config)
+void CRewardableConstructor::init(const JsonNode & config)
 {
 	AObjectTypeHandler::init(config);
 	objectInfo.init(config);
 }
 
-CGObjectInstance * CObjectWithRewardConstructor::create(ObjectTemplate tmpl) const
+CGObjectInstance * CRewardableConstructor::create(ObjectTemplate tmpl) const
 {
-	auto ret = new CObjectWithReward();
+	auto ret = new CRewardableObject();
 	ret->appearance = tmpl;
 	return ret;
 }
 
-void CObjectWithRewardConstructor::configureObject(CGObjectInstance * object, CRandomGenerator & rng) const
+void CRewardableConstructor::configureObject(CGObjectInstance * object, CRandomGenerator & rng) const
 {
-	objectInfo.configureObject(dynamic_cast<CObjectWithReward*>(object), rng);
+	objectInfo.configureObject(dynamic_cast<CRewardableObject*>(object), rng);
 }
 
-const IObjectInfo * CObjectWithRewardConstructor::getObjectInfo(ObjectTemplate tmpl) const
+const IObjectInfo * CRewardableConstructor::getObjectInfo(ObjectTemplate tmpl) const
 {
 	return &objectInfo;
 }

+ 4 - 4
lib/CObjectConstructor.h → lib/mapObjects/CRewardableConstructor.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#include "CObjectWithReward.h"
+#include "mapObjects/CRewardableObject.h"
 #include "CObjectClassesHandler.h"
 #include "JsonNode.h"
 
@@ -33,7 +33,7 @@ public:
 
 	bool givesBonuses() const override;
 
-	void configureObject(CObjectWithReward * object, CRandomGenerator & rng) const;
+	void configureObject(CRewardableObject * object, CRandomGenerator & rng) const;
 
 	CRandomRewardObjectInfo()
 	{}
@@ -41,12 +41,12 @@ public:
 	void init(const JsonNode & objectConfig);
 };
 
-class CObjectWithRewardConstructor : public AObjectTypeHandler
+class CRewardableConstructor : public AObjectTypeHandler
 {
 	CRandomRewardObjectInfo objectInfo;
 
 public:
-	CObjectWithRewardConstructor();
+	CRewardableConstructor();
 	void init(const JsonNode & config) override;
 
 	CGObjectInstance * create(ObjectTemplate tmpl) const override;

+ 17 - 17
lib/CObjectWithReward.cpp → lib/mapObjects/CRewardableObject.cpp

@@ -1,5 +1,5 @@
 /*
- * CObjectWithReward.cpp, part of VCMI engine
+ * CRewardableObject.cpp, part of VCMI engine
  *
  * Authors: listed in file AUTHORS in main folder
  *
@@ -9,7 +9,7 @@
  */
 
 #include "StdInc.h"
-#include "CObjectWithReward.h"
+#include "CRewardableObject.h"
 #include "CHeroHandler.h"
 #include "CGeneralTextHandler.h"
 #include "../client/CSoundBase.h"
@@ -63,7 +63,7 @@ bool CRewardLimiter::heroAllowed(const CGHeroInstance * hero) const
 	return true;
 }
 
-std::vector<ui32> CObjectWithReward::getAvailableRewards(const CGHeroInstance * hero) const
+std::vector<ui32> CRewardableObject::getAvailableRewards(const CGHeroInstance * hero) const
 {
 	std::vector<ui32> ret;
 
@@ -79,7 +79,7 @@ std::vector<ui32> CObjectWithReward::getAvailableRewards(const CGHeroInstance *
 	return ret;
 }
 
-void CObjectWithReward::onHeroVisit(const CGHeroInstance *h) const
+void CRewardableObject::onHeroVisit(const CGHeroInstance *h) const
 {
 	auto grantRewardWithMessage = [&](int index) -> void
 	{
@@ -161,12 +161,12 @@ void CObjectWithReward::onHeroVisit(const CGHeroInstance *h) const
 	}
 }
 
-void CObjectWithReward::heroLevelUpDone(const CGHeroInstance *hero) const
+void CRewardableObject::heroLevelUpDone(const CGHeroInstance *hero) const
 {
 	grantRewardAfterLevelup(info[selectedReward], hero);
 }
 
-void CObjectWithReward::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const
+void CRewardableObject::blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const
 {
 	if (answer == 0)
 		return; // player refused
@@ -183,12 +183,12 @@ void CObjectWithReward::blockingDialogAnswered(const CGHeroInstance *hero, ui32
 	}
 }
 
-void CObjectWithReward::onRewardGiven(const CGHeroInstance * hero) const
+void CRewardableObject::onRewardGiven(const CGHeroInstance * hero) const
 {
 	// no implementation, virtual function for overrides
 }
 
-void CObjectWithReward::grantReward(ui32 rewardID, const CGHeroInstance * hero) const
+void CRewardableObject::grantReward(ui32 rewardID, const CGHeroInstance * hero) const
 {
 	ChangeObjectVisitors cov(ChangeObjectVisitors::VISITOR_ADD, id, hero->id);
 	cb->sendAndApply(&cov);
@@ -197,7 +197,7 @@ void CObjectWithReward::grantReward(ui32 rewardID, const CGHeroInstance * hero)
 	grantRewardBeforeLevelup(info[rewardID], hero);
 }
 
-void CObjectWithReward::grantRewardBeforeLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
+void CRewardableObject::grantRewardBeforeLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
 {
 	assert(hero);
 	assert(hero->tempOwner.isValidPlayer());
@@ -234,7 +234,7 @@ void CObjectWithReward::grantRewardBeforeLevelup(const CVisitInfo & info, const
 	}
 }
 
-void CObjectWithReward::grantRewardAfterLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
+void CRewardableObject::grantRewardAfterLevelup(const CVisitInfo & info, const CGHeroInstance * hero) const
 {
 	if (info.reward.manaDiff || info.reward.manaPercentage >= 0)
 	{
@@ -290,7 +290,7 @@ void CObjectWithReward::grantRewardAfterLevelup(const CVisitInfo & info, const C
 		cb->removeObject(this);
 }
 
-bool CObjectWithReward::wasVisited (PlayerColor player) const
+bool CRewardableObject::wasVisited (PlayerColor player) const
 {
 	switch (visitMode)
 	{
@@ -311,7 +311,7 @@ bool CObjectWithReward::wasVisited (PlayerColor player) const
 	}
 }
 
-bool CObjectWithReward::wasVisited (const CGHeroInstance * h) const
+bool CRewardableObject::wasVisited (const CGHeroInstance * h) const
 {
 	switch (visitMode)
 	{
@@ -372,7 +372,7 @@ static std::string & visitedTxt(const bool visited)
 	return VLC->generaltexth->allTexts[id];
 }
 
-const std::string & CObjectWithReward::getHoverText() const
+const std::string & CRewardableObject::getHoverText() const
 {
 	const CGHeroInstance *h = cb->getSelectedHero(cb->getCurrentPlayer());
 	hoverName = VLC->objtypeh->getObjectName(ID);
@@ -387,7 +387,7 @@ const std::string & CObjectWithReward::getHoverText() const
 	return hoverName;
 }
 
-void CObjectWithReward::setPropertyDer(ui8 what, ui32 val)
+void CRewardableObject::setPropertyDer(ui8 what, ui32 val)
 {
 	switch (what)
 	{
@@ -402,13 +402,13 @@ void CObjectWithReward::setPropertyDer(ui8 what, ui32 val)
 	}
 }
 
-void CObjectWithReward::newTurn() const
+void CRewardableObject::newTurn() const
 {
 	if (resetDuration != 0 && cb->getDate(Date::DAY) % resetDuration == 0)
 		cb->setObjProperty(id, ObjProperty::REWARD_RESET, 0);
 }
 
-CObjectWithReward::CObjectWithReward():
+CRewardableObject::CRewardableObject():
 	soundID(soundBase::invalid),
 	selectMode(0),
 	selectedReward(0),
@@ -417,7 +417,7 @@ CObjectWithReward::CObjectWithReward():
 {}
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-///               END OF CODE FOR COBJECTWITHREWARD AND RELATED CLASSES                         ///
+///               END OF CODE FOR CREWARDABLEOBJECT AND RELATED CLASSES                         ///
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 /// Helper, selects random art class based on weights

+ 12 - 12
lib/CObjectWithReward.h → lib/mapObjects/CRewardableObject.h

@@ -4,7 +4,7 @@
 #include "NetPacksBase.h"
 
 /*
- * CObjectWithReward.h, part of VCMI engine
+ * CRewardableObject.h, part of VCMI engine
  *
  * Authors: listed in file AUTHORS in main folder
  *
@@ -153,7 +153,7 @@ public:
 
 /// Base class that can handle granting rewards to visiting heroes.
 /// Inherits from CArmedInstance for proper trasfer of armies
-class DLL_LINKAGE CObjectWithReward : public CArmedInstance
+class DLL_LINKAGE CRewardableObject : public CArmedInstance
 {
 	/// function that must be called if hero got level-up during grantReward call
 	void grantRewardAfterLevelup(const CVisitInfo & reward, const CGHeroInstance * hero) const;
@@ -228,7 +228,7 @@ public:
 	/// function that will be called once reward is fully granted to hero
 	virtual void onRewardGiven(const CGHeroInstance * hero) const;
 
-	CObjectWithReward();
+	CRewardableObject();
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
@@ -242,7 +242,7 @@ public:
 	friend class CRandomRewardObjectInfo;
 };
 
-class DLL_LINKAGE CGPickable : public CObjectWithReward //campfire, treasure chest, Flotsam, Shipwreck Survivor, Sea Chest
+class DLL_LINKAGE CGPickable : public CRewardableObject //campfire, treasure chest, Flotsam, Shipwreck Survivor, Sea Chest
 {
 public:
 	void initObj() override;
@@ -251,11 +251,11 @@ public:
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
-		h & static_cast<CObjectWithReward&>(*this);
+		h & static_cast<CRewardableObject&>(*this);
 	}
 };
 
-class DLL_LINKAGE CGBonusingObject : public CObjectWithReward //objects giving bonuses to luck/morale/movement
+class DLL_LINKAGE CGBonusingObject : public CRewardableObject //objects giving bonuses to luck/morale/movement
 {
 public:
 	void initObj() override;
@@ -268,7 +268,7 @@ public:
 	}
 };
 
-class DLL_LINKAGE CGOnceVisitable : public CObjectWithReward // wagon, corpse, lean to, warriors tomb
+class DLL_LINKAGE CGOnceVisitable : public CRewardableObject // wagon, corpse, lean to, warriors tomb
 {
 public:
 	void initObj() override;
@@ -277,11 +277,11 @@ public:
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
-		h & static_cast<CObjectWithReward&>(*this);
+		h & static_cast<CRewardableObject&>(*this);
 	}
 };
 
-class DLL_LINKAGE CGVisitableOPH : public CObjectWithReward //objects visitable only once per hero
+class DLL_LINKAGE CGVisitableOPH : public CRewardableObject //objects visitable only once per hero
 {
 public:
 	void initObj() override;
@@ -290,11 +290,11 @@ public:
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
-		h & static_cast<CObjectWithReward&>(*this);
+		h & static_cast<CRewardableObject&>(*this);
 	}
 };
 
-class DLL_LINKAGE CGVisitableOPW : public CObjectWithReward //objects visitable once per week
+class DLL_LINKAGE CGVisitableOPW : public CRewardableObject //objects visitable once per week
 {
 public:
 	void initObj() override;
@@ -303,7 +303,7 @@ public:
 
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
-		h & static_cast<CObjectWithReward&>(*this);
+		h & static_cast<CRewardableObject&>(*this);
 	}
 };
 

+ 333 - 0
lib/mapObjects/ObjectTemplate.cpp

@@ -0,0 +1,333 @@
+#include "StdInc.h"
+#include "CObjectClassesHandler.h"
+
+#include "filesystem/Filesystem.h"
+#include "filesystem/CBinaryReader.h"
+#include "../lib/VCMI_Lib.h"
+#include "GameConstants.h"
+#include "StringConstants.h"
+#include "CGeneralTextHandler.h"
+#include "CObjectHandler.h"
+#include "CModHandler.h"
+#include "JsonNode.h"
+
+#include "CRewardableConstructor.h"
+
+/*
+ * ObjectTemplate.cpp, 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
+ *
+ */
+
+static bool isVisitableFromTop(int identifier, int type)
+{
+	if(type == 2 || type == 3 || type == 4 || type == 5) //creature, hero, artifact, resource
+		return true;
+
+	static const Obj visitableFromTop[] =
+		{Obj::FLOTSAM,
+		Obj::SEA_CHEST,
+		Obj::SHIPWRECK_SURVIVOR,
+		Obj::BUOY,
+		Obj::OCEAN_BOTTLE,
+		Obj::BOAT,
+		Obj::WHIRLPOOL,
+		Obj::GARRISON,
+		Obj::GARRISON2,
+		Obj::SCHOLAR,
+		Obj::CAMPFIRE,
+		Obj::BORDERGUARD,
+		Obj::BORDER_GATE,
+		Obj::QUEST_GUARD,
+		Obj::CORPSE
+	};
+	if (vstd::find_pos(visitableFromTop, identifier) != -1)
+		return true;
+	return false;
+}
+
+ObjectTemplate::ObjectTemplate():
+	visitDir(8|16|32|64|128), // all but top
+	id(Obj::NO_OBJ),
+	subid(0),
+	printPriority(0)
+{
+}
+
+void ObjectTemplate::readTxt(CLegacyConfigParser & parser)
+{
+	std::string data = parser.readString();
+	std::vector<std::string> strings;
+	boost::split(strings, data, boost::is_any_of(" "));
+	assert(strings.size() == 9);
+
+	animationFile = strings[0];
+	stringID = strings[0];
+
+	std::string & blockStr = strings[1]; //block map, 0 = blocked, 1 = unblocked
+	std::string & visitStr = strings[2]; //visit map, 1 = visitable, 0 = not visitable
+
+	assert(blockStr.size() == 6*8);
+	assert(visitStr.size() == 6*8);
+
+	setSize(8, 6);
+	for (size_t i=0; i<6; i++) // 6 rows
+	{
+		for (size_t j=0; j<8; j++) // 8 columns
+		{
+			auto & tile = usedTiles[i][j];
+			tile |= VISIBLE; // assume that all tiles are visible
+			if (blockStr[i*8 + j] == '0')
+				tile |= BLOCKED;
+
+			if (visitStr[i*8 + j] == '1')
+				tile |= VISITABLE;
+		}
+	}
+
+	// strings[3] most likely - terrains on which this object can be placed in editor.
+	// e.g. Whirpool can be placed manually only on water while mines can be placed everywhere despite terrain-specific gfx
+	// so these two fields can be interpreted as "strong affinity" and "weak affinity" towards terrains
+	std::string & terrStr = strings[4]; // allowed terrains, 1 = object can be placed on this terrain
+
+	assert(terrStr.size() == 9); // all terrains but rock
+	for (size_t i=0; i<9; i++)
+	{
+		if (terrStr[8-i] == '1')
+			allowedTerrains.insert(ETerrainType(i));
+	}
+
+	id    = Obj(boost::lexical_cast<int>(strings[5]));
+	subid = boost::lexical_cast<int>(strings[6]);
+	int type  = boost::lexical_cast<int>(strings[7]);
+	printPriority = boost::lexical_cast<int>(strings[8]) * 100; // to have some space in future
+
+	if (isVisitableFromTop(id, type))
+		visitDir = 0xff;
+	else
+		visitDir = (8|16|32|64|128);
+
+	readMsk();
+}
+
+void ObjectTemplate::readMsk()
+{
+	ResourceID resID("SPRITES/" + animationFile, EResType::MASK);
+
+	if (CResourceHandler::get()->existsResource(resID))
+	{
+		auto msk = CResourceHandler::get()->load(resID)->readAll();
+		setSize(msk.first.get()[0], msk.first.get()[1]);
+	}
+	else //maximum possible size of H3 object //TODO: remove hardcode and move this data into modding system
+	{
+		setSize(8, 6);
+	}
+}
+
+void ObjectTemplate::readMap(CBinaryReader & reader)
+{
+	animationFile = reader.readString();
+
+	setSize(8, 6);
+	ui8 blockMask[6];
+	ui8 visitMask[6];
+	for(auto & byte : blockMask)
+		byte = reader.readUInt8();
+	for(auto & byte : visitMask)
+		byte = reader.readUInt8();
+
+	for (size_t i=0; i<6; i++) // 6 rows
+	{
+		for (size_t j=0; j<8; j++) // 8 columns
+		{
+			auto & tile = usedTiles[5 - i][7 - j];
+			tile |= VISIBLE; // assume that all tiles are visible
+			if (((blockMask[i] >> j) & 1 ) == 0)
+				tile |= BLOCKED;
+
+			if (((visitMask[i] >> j) & 1 ) != 0)
+				tile |= VISITABLE;
+		}
+	}
+
+	reader.readUInt16();
+	ui16 terrMask = reader.readUInt16();
+	for (size_t i=0; i<9; i++)
+	{
+		if (((terrMask >> i) & 1 ) != 0)
+			allowedTerrains.insert(ETerrainType(i));
+	}
+
+	id = Obj(reader.readUInt32());
+	subid = reader.readUInt32();
+	int type = reader.readUInt8();
+	printPriority = reader.readUInt8() * 100; // to have some space in future
+
+	if (isVisitableFromTop(id, type))
+		visitDir = 0xff;
+	else
+		visitDir = (8|16|32|64|128);
+
+	reader.skip(16);
+	readMsk();
+
+	if (id == Obj::EVENT)
+	{
+		setSize(1,1);
+		usedTiles[0][0] = VISITABLE;
+	}
+}
+
+void ObjectTemplate::readJson(const JsonNode &node)
+{
+	//id = Obj(node["basebase"].Float()); // temporary, should be removed and determined indirectly via object type parent (e.g. base->base)
+	//subid = node["base"].Float();
+	animationFile = node["animation"].String();
+
+	const JsonVector & visitDirs = node["visitableFrom"].Vector();
+	if (!visitDirs.empty())
+	{
+		if (visitDirs[0].String()[0] == '+') visitDir |= 1;
+		if (visitDirs[0].String()[1] == '+') visitDir |= 2;
+		if (visitDirs[0].String()[2] == '+') visitDir |= 4;
+		if (visitDirs[1].String()[2] == '+') visitDir |= 8;
+		if (visitDirs[2].String()[2] == '+') visitDir |= 16;
+		if (visitDirs[2].String()[1] == '+') visitDir |= 32;
+		if (visitDirs[2].String()[0] == '+') visitDir |= 64;
+		if (visitDirs[1].String()[0] == '+') visitDir |= 128;
+	}
+	else
+		visitDir = 0x00;
+
+	if (!node["allowedTerrains"].isNull())
+	{
+		for (auto & entry : node["allowedTerrains"].Vector())
+			allowedTerrains.insert(ETerrainType(vstd::find_pos(GameConstants::TERRAIN_NAMES, entry.String())));
+	}
+	else
+	{
+		for (size_t i=0; i< GameConstants::TERRAIN_TYPES; i++)
+			allowedTerrains.insert(ETerrainType(i));
+	}
+
+	auto charToTile = [&](const char & ch) -> ui8
+	{
+		switch (ch)
+		{
+			case ' ' : return 0;
+			case '0' : return 0;
+			case 'V' : return VISIBLE;
+			case 'B' : return VISIBLE | BLOCKED;
+			case 'H' : return BLOCKED;
+			case 'A' : return VISIBLE | BLOCKED | VISITABLE;
+			case 'T' : return BLOCKED | VISITABLE;
+			default:
+				logGlobal->errorStream() << "Unrecognized char " << ch << " in template mask";
+				return 0;
+		}
+	};
+
+	const JsonVector & mask = node["mask"].Vector();
+
+	size_t height = mask.size();
+	size_t width  = 0;
+	for (auto & line : mask)
+		vstd::amax(width, line.String().size());
+
+	setSize(width, height);
+
+	for (size_t i=0; i<mask.size(); i++)
+	{
+		const std::string & line = mask[i].String();
+		for (size_t j=0; j < line.size(); j++)
+			usedTiles[mask.size() - 1 - i][line.size() - 1 - j] = charToTile(line[j]);
+	}
+
+	printPriority = node["zIndex"].Float();
+}
+
+ui32 ObjectTemplate::getWidth() const
+{
+	return usedTiles.empty() ? 0 : usedTiles.front().size();
+}
+
+ui32 ObjectTemplate::getHeight() const
+{
+	return usedTiles.size();
+}
+
+void ObjectTemplate::setSize(ui32 width, ui32 height)
+{
+	usedTiles.resize(height);
+	for (auto & line : usedTiles)
+		line.resize(width, 0);
+}
+
+bool ObjectTemplate::isVisitable() const
+{
+	for (auto & line : usedTiles)
+		for (auto & tile : line)
+			if (tile & VISITABLE)
+				return true;
+	return false;
+}
+
+bool ObjectTemplate::isWithin(si32 X, si32 Y) const
+{
+	if (X < 0 || Y < 0)
+		return false;
+	if (X >= getWidth() || Y >= getHeight())
+		return false;
+	return true;
+}
+
+bool ObjectTemplate::isVisitableAt(si32 X, si32 Y) const
+{
+	if (isWithin(X, Y))
+		return usedTiles[Y][X] & VISITABLE;
+	return false;
+}
+
+bool ObjectTemplate::isVisibleAt(si32 X, si32 Y) const
+{
+	if (isWithin(X, Y))
+		return usedTiles[Y][X] & VISIBLE;
+	return false;
+}
+
+bool ObjectTemplate::isBlockedAt(si32 X, si32 Y) const
+{
+	if (isWithin(X, Y))
+		return usedTiles[Y][X] & BLOCKED;
+	return false;
+}
+
+bool ObjectTemplate::isVisitableFrom(si8 X, si8 Y) const
+{
+	// visitDir uses format
+	// 1 2 3
+	// 8   4
+	// 7 6 5
+	int dirMap[3][3] =
+	{
+		{ visitDir &   1, visitDir &   2, visitDir &   4 },
+		{ visitDir & 128,        1      , visitDir &   8 },
+		{ visitDir &  64, visitDir &  32, visitDir &  16 }
+	};
+	// map input values to range 0..2
+	int dx = X < 0 ? 0 : X == 0 ? 1 : 2;
+	int dy = Y < 0 ? 0 : Y == 0 ? 1 : 2;
+
+	return dirMap[dy][dx] != 0;
+}
+
+bool ObjectTemplate::canBePlacedAt(ETerrainType terrain) const
+{
+	return allowedTerrains.count(terrain) != 0;
+}
+

+ 79 - 0
lib/mapObjects/ObjectTemplate.h

@@ -0,0 +1,79 @@
+#pragma once
+
+#include "GameConstants.h"
+
+/*
+ * ObjectTemplate.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
+ *
+ */
+
+class CBinaryReader;
+class CLegacyConfigParser;
+class JsonNode;
+
+class DLL_LINKAGE ObjectTemplate
+{
+	enum EBlockMapBits
+	{
+		VISIBLE = 1,
+		VISITABLE = 2,
+		BLOCKED = 4
+	};
+
+	/// tiles that are covered by this object, uses EBlockMapBits enum as flags
+	std::vector<std::vector<ui8>> usedTiles;
+	/// directions from which object can be entered, format same as for moveDir in CGHeroInstance(but 0 - 7)
+	ui8 visitDir;
+	/// list of terrains on which this object can be placed
+	std::set<ETerrainType> allowedTerrains;
+
+public:
+	/// H3 ID/subID of this object
+	Obj id;
+	si32 subid;
+	/// print priority, objects with higher priority will be print first, below everything else
+	si32 printPriority;
+	/// animation file that should be used to display object
+	std::string animationFile;
+
+	/// string ID, equals to def base name for h3m files (lower case, no extension) or specified in mod data
+	std::string stringID;
+
+	ui32 getWidth() const;
+	ui32 getHeight() const;
+	void setSize(ui32 width, ui32 height);
+
+	bool isVisitable() const;
+
+	// Checks object used tiles
+	// Position is relative to bottom-right corner of the object, can not be negative
+	bool isWithin(si32 X, si32 Y) const;
+	bool isVisitableAt(si32 X, si32 Y) const;
+	bool isVisibleAt(si32 X, si32 Y) const;
+	bool isBlockedAt(si32 X, si32 Y) const;
+
+	// Checks if object is visitable from certain direction. X and Y must be between -1..+1
+	bool isVisitableFrom(si8 X, si8 Y) const;
+
+	// Checks if object can be placed on specific terrain
+	bool canBePlacedAt(ETerrainType terrain) const;
+
+	ObjectTemplate();
+
+	void readTxt(CLegacyConfigParser & parser);
+	void readMsk();
+	void readMap(CBinaryReader & reader);
+	void readJson(const JsonNode & node);
+
+	template <typename Handler> void serialize(Handler &h, const int version)
+	{
+		h & usedTiles & allowedTerrains & animationFile & stringID;
+		h & id & subid & printPriority & visitDir;
+	}
+};
+

+ 1 - 1
lib/mapping/CCampaignHandler.cpp

@@ -10,7 +10,7 @@
 #include "../CGeneralTextHandler.h"
 #include "../StartInfo.h"
 #include "../CArtHandler.h" //for hero crossover
-#include "../CObjectHandler.h" //for hero crossover
+#include "../mapObjects/CObjectHandler.h" //for hero crossover
 #include "../CHeroHandler.h"
 #include "CMapService.h"
 #include "CMap.h"

+ 1 - 1
lib/mapping/CMap.cpp

@@ -6,7 +6,7 @@
 #include "../CCreatureHandler.h"
 #include "../CTownHandler.h"
 #include "../CHeroHandler.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 #include "../CGeneralTextHandler.h"
 #include "../CSpellHandler.h"
 #include "CMapEditManager.h"

+ 1 - 1
lib/mapping/CMap.h

@@ -12,7 +12,7 @@
 #pragma once
 
 #include "../ConstTransitivePtr.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../ResourceSet.h"
 #include "../int3.h"
 #include "../GameConstants.h"

+ 1 - 1
lib/mapping/CMapEditManager.cpp

@@ -3,7 +3,7 @@
 
 #include "../JsonNode.h"
 #include "../filesystem/Filesystem.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 #include "../VCMI_Lib.h"
 
 MapRect::MapRect() : x(0), y(0), z(0), width(0), height(0)

+ 3 - 3
lib/mapping/MapFormatH3M.cpp

@@ -20,9 +20,9 @@
 #include "../CCreatureHandler.h"
 #include "../CGeneralTextHandler.h"
 #include "../CHeroHandler.h"
-#include "../CObjectHandler.h"
-#include "../CObjectWithReward.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectHandler.h"
+#include "../mapObjects/CRewardableObject.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 #include "../VCMI_Lib.h"
 #include "../NetPacksBase.h"
 

+ 1 - 1
lib/mapping/MapFormatH3M.h

@@ -14,7 +14,7 @@
 #include "CMapService.h"
 #include "../GameConstants.h"
 #include "../ResourceSet.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 #include "../int3.h"
 

+ 2 - 2
lib/registerTypes/RegisterTypes.cpp

@@ -8,7 +8,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -17,7 +17,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 // For reference: peak memory usage by gcc during compilation of register type templates
 // registerTypesMapObjects:  1.9 Gb

+ 10 - 10
lib/registerTypes/RegisterTypes.h

@@ -4,14 +4,14 @@
 #include "../NetPacks.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
-#include "../CObjectHandler.h"
-#include "../CObjectWithReward.h"
+#include "../mapObjects/CObjectHandler.h"
+#include "../mapObjects/CRewardableObject.h"
 #include "../CGameState.h"
 #include "../CHeroHandler.h"
 #include "../CTownHandler.h"
 #include "../CModHandler.h" //needed?
-#include "../CObjectClassesHandler.h"
-#include "../CObjectConstructor.h"
+#include "../mapObjects/CObjectClassesHandler.h"
+#include "../mapObjects/CRewardableConstructor.h"
 
 /*
  * RegisterTypes.h, part of VCMI engine
@@ -77,7 +77,7 @@ void registerTypesMapObjects1(Serializer &s)
 template<typename Serializer>
 void registerTypesMapObjectTypes(Serializer &s)
 {
-	s.template registerType<AObjectTypeHandler, CObjectWithRewardConstructor>();
+	s.template registerType<AObjectTypeHandler, CRewardableConstructor>();
 
 #define REGISTER_GENERIC_HANDLER(TYPENAME) s.template registerType<AObjectTypeHandler, CDefaultObjectTypeHandler<TYPENAME> >()
 
@@ -137,11 +137,11 @@ void registerTypesMapObjects2(Serializer &s)
 		s.template registerType<CGTownBuilding, CTownBonus>();
 			s.template registerType<CGTownBuilding, COPWBonus>();
 
-	s.template registerType<CGObjectInstance, CObjectWithReward>();
-		s.template registerType<CObjectWithReward, CGPickable>();
-		s.template registerType<CObjectWithReward, CGVisitableOPH>();
-		s.template registerType<CObjectWithReward, CGVisitableOPW>();
-		s.template registerType<CObjectWithReward, CGOnceVisitable>();
+	s.template registerType<CGObjectInstance, CRewardableObject>();
+		s.template registerType<CRewardableObject, CGPickable>();
+		s.template registerType<CRewardableObject, CGVisitableOPH>();
+		s.template registerType<CRewardableObject, CGVisitableOPW>();
+		s.template registerType<CRewardableObject, CGOnceVisitable>();
 			s.template registerType<CGVisitableOPW, CGMagicSpring>();
 
 	s.template registerType<CGObjectInstance, CPlayersVisited>();

+ 2 - 2
lib/registerTypes/TypesClientPacks1.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 
 template void registerTypesClientPacks1<CISer<CConnection>>(CISer<CConnection>& s);

+ 2 - 2
lib/registerTypes/TypesClientPacks2.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 
 template void registerTypesClientPacks2<CISer<CConnection>>(CISer<CConnection>& s);

+ 2 - 2
lib/registerTypes/TypesMapObjects1.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 template void registerTypesMapObjectTypes<CISer<CConnection>>(CISer<CConnection>& s);
 template void registerTypesMapObjectTypes<COSer<CConnection>>(COSer<CConnection>& s);

+ 2 - 2
lib/registerTypes/TypesMapObjects2.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 
 template void registerTypesMapObjects2<CISer<CConnection>>(CISer<CConnection>& s);

+ 2 - 2
lib/registerTypes/TypesPregamePacks.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 template void registerTypesPregamePacks<CISer<CConnection>>(CISer<CConnection>& s);
 template void registerTypesPregamePacks<COSer<CConnection>>(COSer<CConnection>& s);

+ 2 - 2
lib/registerTypes/TypesServerPacks.cpp

@@ -7,7 +7,7 @@
 #include "../CGameState.h"
 #include "../mapping/CMap.h"
 #include "../CModHandler.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../CCreatureHandler.h"
 #include "../VCMI_Lib.h"
 #include "../CArtHandler.h"
@@ -16,7 +16,7 @@
 #include "../CTownHandler.h"
 #include "../mapping/CCampaignHandler.h"
 #include "../NetPacks.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 
 template void registerTypesServerPacks<CISer<CConnection>>(CISer<CConnection>& s);
 template void registerTypesServerPacks<COSer<CConnection>>(COSer<CConnection>& s);

+ 2 - 2
lib/rmg/CMapGenerator.cpp

@@ -5,8 +5,8 @@
 #include "../VCMI_Lib.h"
 #include "../CGeneralTextHandler.h"
 #include "../mapping/CMapEditManager.h"
-#include "../CObjectHandler.h"
-#include "../CObjectClassesHandler.h"
+#include "../mapObjects/CObjectHandler.h"
+#include "../mapObjects/CObjectClassesHandler.h"
 #include "../CTownHandler.h"
 #include "../StringConstants.h"
 #include "../filesystem/Filesystem.h"

+ 1 - 1
lib/rmg/CMapGenerator.h

@@ -15,7 +15,7 @@
 #include "../CRandomGenerator.h"
 #include "CMapGenOptions.h"
 #include "CRmgTemplateZone.h"
-#include "../CObjectHandler.h"
+#include "../mapObjects/CObjectHandler.h"
 #include "../int3.h"
 
 class CMap;

+ 2 - 2
server/CGameHandler.cpp

@@ -8,9 +8,9 @@
 #include "../lib/CModHandler.h"
 #include "../lib/CArtHandler.h"
 #include "../lib/CBuildingHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CHeroHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CTownHandler.h"

+ 2 - 2
server/CVCMIServer.cpp

@@ -8,7 +8,7 @@
 #include "../lib/Connection.h"
 #include "../lib/CModHandler.h"
 #include "../lib/CArtHandler.h"
-#include "../lib/CObjectClassesHandler.h"
+#include "../lib/mapObjects/CObjectClassesHandler.h"
 #include "../lib/CGeneralTextHandler.h"
 #include "../lib/CHeroHandler.h"
 #include "../lib/CTownHandler.h"
@@ -26,7 +26,7 @@
 #include "../lib/VCMIDirs.h"
 #include "CGameHandler.h"
 #include "../lib/mapping/CMapInfo.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/GameConstants.h"
 #include "../lib/logging/CBasicLogConfigurator.h"
 #include "../lib/CConfigHandler.h"

+ 1 - 1
server/NetPacksServer.cpp

@@ -2,7 +2,7 @@
 #include "../lib/NetPacks.h"
 
 #include "CGameHandler.h"
-#include "../lib/CObjectHandler.h"
+#include "../lib/mapObjects/CObjectHandler.h"
 #include "../lib/IGameCallback.h"
 #include "../lib/mapping/CMap.h"
 #include "../lib/CGameState.h"