Animal.cpp 2.4 KB

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