CDefaultObjectTypeHandler.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * CDefaultObjectTypeHandler.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "AObjectTypeHandler.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. /// Class that is used as base for multiple object constructors
  14. template<class ObjectType>
  15. class CDefaultObjectTypeHandler : public AObjectTypeHandler
  16. {
  17. void configureObject(CGObjectInstance * object, IGameRandomizer & gameRandomizer) const final
  18. {
  19. ObjectType * castedObject = dynamic_cast<ObjectType*>(object);
  20. if(castedObject == nullptr)
  21. throw std::runtime_error("Unexpected object type!");
  22. randomizeObject(castedObject, gameRandomizer);
  23. }
  24. std::shared_ptr<CGObjectInstance> create(IGameInfoCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const final
  25. {
  26. assert(cb);
  27. auto result = createObject(cb);
  28. preInitObject(result.get());
  29. if(tmpl)
  30. result->appearance = tmpl;
  31. initializeObject(result.get());
  32. return result;
  33. }
  34. protected:
  35. virtual void initializeObject(ObjectType * object) const {}
  36. virtual void randomizeObject(ObjectType * object, IGameRandomizer & gameRandomizer) const {}
  37. virtual std::shared_ptr<ObjectType> createObject(IGameInfoCallback * cb) const
  38. {
  39. assert(cb);
  40. return std::make_shared<ObjectType>(cb);
  41. }
  42. };
  43. VCMI_LIB_NAMESPACE_END