2
0

CDefaultObjectTypeHandler.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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, vstd::RNG & rng) 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, rng);
  23. }
  24. std::shared_ptr<CGObjectInstance> create(CGameInfoCallback * cb, std::shared_ptr<const ObjectTemplate> tmpl) const final
  25. {
  26. auto result = createObject(cb);
  27. preInitObject(result.get());
  28. if(tmpl)
  29. result->appearance = tmpl;
  30. initializeObject(result.get());
  31. return result;
  32. }
  33. protected:
  34. virtual void initializeObject(ObjectType * object) const {}
  35. virtual void randomizeObject(ObjectType * object, vstd::RNG & rng) const {}
  36. virtual std::shared_ptr<ObjectType> createObject(CGameInfoCallback * cb) const
  37. {
  38. return std::make_shared<ObjectType>(cb);
  39. }
  40. };
  41. VCMI_LIB_NAMESPACE_END