Animal.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "Animal.h"
  2. #include "Dimension.h"
  3. #include "Game.h"
  4. #include "TypeRegistry.h"
  5. Animal::Animal(
  6. int typeId, Framework::Vec3<float> location, int dimensionId, int entityId)
  7. : Entity(typeId, location, dimensionId, entityId)
  8. {}
  9. Animal::~Animal()
  10. {
  11. if (ai)
  12. {
  13. ai->release();
  14. }
  15. }
  16. void Animal::setAI(AnimalAI* ai)
  17. {
  18. if (this->ai)
  19. {
  20. this->ai->release();
  21. }
  22. this->ai = ai;
  23. }
  24. bool Animal::interact(Item* zItem, Entity* zActor)
  25. {
  26. return false;
  27. }
  28. void Animal::takeDamage(
  29. Entity* zSource, Item* zUsedItem, ItemSkill* zUsedSkill, float damage)
  30. {
  31. if (damage > 0)
  32. {
  33. ai->onDamage(zSource, damage);
  34. }
  35. Entity::takeDamage(zSource, zUsedItem, zUsedSkill, damage);
  36. }
  37. void Animal::tick(const Dimension* zDimension)
  38. {
  39. Entity::tick(zDimension);
  40. }
  41. AnimalEntityType::AnimalEntityType()
  42. : EntityType()
  43. {}
  44. AnimalEntityType::~AnimalEntityType()
  45. {
  46. if (ai)
  47. {
  48. ai->release();
  49. }
  50. }
  51. void AnimalEntityType::loadSuperEntity(
  52. Entity* zEntity, Framework::StreamReader* zReader) const
  53. {
  54. EntityType::loadSuperEntity(zEntity, zReader);
  55. }
  56. void AnimalEntityType::saveSuperEntity(
  57. Entity* zEntity, Framework::StreamWriter* zWriter) const
  58. {
  59. EntityType::saveSuperEntity(zEntity, zWriter);
  60. }
  61. Entity* AnimalEntityType::createEntity(
  62. Framework::Vec3<float> position, int dimensionId, int entityId) const
  63. {
  64. Animal* result = new Animal(getId(), position, dimensionId, entityId);
  65. // result->setAI(Game::INSTANCE->zTypeRegistry()->fromJson<AnimalAI>(ai));
  66. return result;
  67. }
  68. AnimalEntityTypeFactory::AnimalEntityTypeFactory()
  69. : EntityTypeFactoryBase()
  70. {}
  71. AnimalEntityType* AnimalEntityTypeFactory::createValue(
  72. Framework::JSON::JSONObject* zJson) const
  73. {
  74. AnimalEntityType* result = new AnimalEntityType();
  75. result->ai = zJson->getValue("ai")->asObject();
  76. return result;
  77. }
  78. void AnimalEntityTypeFactory::addToJson(
  79. Framework::JSON::JSONObject* zJson, AnimalEntityType* zObject) const
  80. {
  81. zJson->addValue("ai", zObject->ai->clone());
  82. }
  83. const char* AnimalEntityTypeFactory::getTypeToken() const
  84. {
  85. return "animal";
  86. }
  87. JSONObjectValidationBuilder* AnimalEntityTypeFactory::addToValidator(
  88. JSONObjectValidationBuilder* builder) const
  89. {
  90. return EntityTypeFactoryBase::addToValidator(builder)
  91. /* TODO: write AnimalAI factories
  92. ->withRequiredAttribute(
  93. "ai", Game::INSTANCE->zTypeRegistry()->getValidator<AnimalAI>())*/
  94. ;
  95. }