CommonConstructors.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #pragma once
  2. #include "CObjectClassesHandler.h"
  3. #include "../CTownHandler.h" // for building ID-based filters
  4. /*
  5. * CommonConstructors.h, part of VCMI engine
  6. *
  7. * Authors: listed in file AUTHORS in main folder
  8. *
  9. * License: GNU General Public License v2.0 or later
  10. * Full text of license available in license.txt file, in main folder
  11. *
  12. */
  13. class CGTownInstance;
  14. class CGHeroInstance;
  15. class CGDwelling;
  16. //class CGArtifact;
  17. //class CGCreature;
  18. class CHeroClass;
  19. /// Class that is used for objects that do not have dedicated handler
  20. template<class ObjectType>
  21. class CDefaultObjectTypeHandler : public AObjectTypeHandler
  22. {
  23. protected:
  24. ObjectType * createTyped(ObjectTemplate tmpl) const
  25. {
  26. auto obj = new ObjectType();
  27. obj->ID = tmpl.id;
  28. obj->subID = tmpl.subid;
  29. obj->appearance = tmpl;
  30. return obj;
  31. }
  32. public:
  33. CDefaultObjectTypeHandler(){}
  34. CGObjectInstance * create(ObjectTemplate tmpl) const
  35. {
  36. return createTyped(tmpl);
  37. }
  38. virtual void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const
  39. {
  40. }
  41. virtual const IObjectInfo * getObjectInfo(ObjectTemplate tmpl) const
  42. {
  43. return nullptr;
  44. }
  45. };
  46. class CObstacleConstructor : public CDefaultObjectTypeHandler<CGObjectInstance>
  47. {
  48. public:
  49. CObstacleConstructor();
  50. bool isStaticObject();
  51. };
  52. class CTownInstanceConstructor : public CDefaultObjectTypeHandler<CGTownInstance>
  53. {
  54. JsonNode filtersJson;
  55. protected:
  56. bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;
  57. public:
  58. CFaction * faction;
  59. std::map<std::string, LogicalExpression<BuildingID>> filters;
  60. CTownInstanceConstructor();
  61. CGObjectInstance * create(ObjectTemplate tmpl) const;
  62. void initTypeData(const JsonNode & input);
  63. void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;
  64. void afterLoadFinalization();
  65. };
  66. class CHeroInstanceConstructor : public CDefaultObjectTypeHandler<CGHeroInstance>
  67. {
  68. protected:
  69. bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;
  70. public:
  71. CHeroClass * heroClass;
  72. CHeroInstanceConstructor();
  73. CGObjectInstance * create(ObjectTemplate tmpl) const;
  74. void initTypeData(const JsonNode & input);
  75. void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;
  76. };
  77. class CDwellingInstanceConstructor : public CDefaultObjectTypeHandler<CGDwelling>
  78. {
  79. protected:
  80. bool objectFilter(const CGObjectInstance *, const ObjectTemplate &) const;
  81. public:
  82. std::vector<std::vector<CCreature *>> availableCreatures;
  83. CDwellingInstanceConstructor();
  84. CGObjectInstance * create(ObjectTemplate tmpl) const;
  85. void initTypeData(const JsonNode & input);
  86. void configureObject(CGObjectInstance * object, CRandomGenerator & rng) const;
  87. };