EntityType.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "EntityType.h"
  2. #include "Entity.h"
  3. #include "Game.h"
  4. #include "ItemType.h"
  5. EntityType::EntityType(Framework::Text name, ModelInfo* model)
  6. : ReferenceCounter(),
  7. name(name),
  8. model(model),
  9. id(-1)
  10. {}
  11. EntityType::~EntityType()
  12. {
  13. if (model) model->release();
  14. }
  15. void EntityType::loadSuperEntity(
  16. Entity* zEntity, Framework::StreamReader* zReader) const
  17. {
  18. zEntity->loadInventory(zReader);
  19. zReader->lese((char*)&zEntity->id, 4);
  20. zReader->lese((char*)&zEntity->maxHP, 4);
  21. zReader->lese((char*)&zEntity->currentHP, 4);
  22. zReader->lese((char*)&zEntity->stamina, 4);
  23. zReader->lese((char*)&zEntity->maxStamina, 4);
  24. zReader->lese((char*)&zEntity->hunger, 4);
  25. zReader->lese((char*)&zEntity->maxHunger, 4);
  26. zReader->lese((char*)&zEntity->thirst, 4);
  27. zReader->lese((char*)&zEntity->chatSecurityLevel, 4);
  28. zReader->lese((char*)&zEntity->maxThirst, 4);
  29. zReader->lese((char*)&zEntity->speed.x, 4);
  30. zReader->lese((char*)&zEntity->speed.y, 4);
  31. zReader->lese((char*)&zEntity->speed.z, 4);
  32. zReader->lese((char*)&zEntity->faceDir.x, 4);
  33. zReader->lese((char*)&zEntity->faceDir.y, 4);
  34. zReader->lese((char*)&zEntity->dimensionId, 4);
  35. zReader->lese((char*)&zEntity->location.x, 4);
  36. zReader->lese((char*)&zEntity->location.y, 4);
  37. zReader->lese((char*)&zEntity->location.z, 4);
  38. if (zEntity->target) delete zEntity->target;
  39. zEntity->target = ActionTarget::load(zReader);
  40. // load item skills
  41. zEntity->skills.leeren();
  42. int skillCount;
  43. zReader->lese((char*)&skillCount, 4);
  44. for (int i = 0; i < skillCount; i++)
  45. {
  46. int type;
  47. zReader->lese((char*)&type, 4);
  48. ItemSkill* skill
  49. = Game::INSTANCE->zItemType(type)->createDefaultItemSkill();
  50. skill->load(zReader);
  51. zEntity->skills.add(skill);
  52. }
  53. }
  54. void EntityType::saveSuperEntity(
  55. Entity* zEntity, Framework::StreamWriter* zWriter) const
  56. {
  57. zEntity->saveInventory(zWriter);
  58. zWriter->schreibe((char*)&zEntity->id, 4);
  59. zWriter->schreibe((char*)&zEntity->maxHP, 4);
  60. zWriter->schreibe((char*)&zEntity->currentHP, 4);
  61. zWriter->schreibe((char*)&zEntity->stamina, 4);
  62. zWriter->schreibe((char*)&zEntity->maxStamina, 4);
  63. zWriter->schreibe((char*)&zEntity->hunger, 4);
  64. zWriter->schreibe((char*)&zEntity->maxHunger, 4);
  65. zWriter->schreibe((char*)&zEntity->thirst, 4);
  66. zWriter->schreibe((char*)&zEntity->chatSecurityLevel, 4);
  67. zWriter->schreibe((char*)&zEntity->maxThirst, 4);
  68. zWriter->schreibe((char*)&zEntity->speed.x, 4);
  69. zWriter->schreibe((char*)&zEntity->speed.y, 4);
  70. zWriter->schreibe((char*)&zEntity->speed.z, 4);
  71. zWriter->schreibe((char*)&zEntity->faceDir.x, 4);
  72. zWriter->schreibe((char*)&zEntity->faceDir.y, 4);
  73. zWriter->schreibe((char*)&zEntity->dimensionId, 4);
  74. zWriter->schreibe((char*)&zEntity->location.x, 4);
  75. zWriter->schreibe((char*)&zEntity->location.y, 4);
  76. zWriter->schreibe((char*)&zEntity->location.z, 4);
  77. ActionTarget::save(zEntity->target, zWriter);
  78. // save item skills
  79. int skillCount = zEntity->skills.getEintragAnzahl();
  80. zWriter->schreibe((char*)&skillCount, 4);
  81. for (ItemSkill* skill : zEntity->skills)
  82. {
  83. int type = skill->getItemTypeId();
  84. zWriter->schreibe((char*)&type, 4);
  85. skill->save(zWriter);
  86. }
  87. }
  88. void EntityType::createSuperEntity(Entity* zEntity) const {}
  89. bool EntityType::initialize(Game* zGame)
  90. {
  91. return true;
  92. }
  93. Entity* EntityType::loadEntity(Framework::StreamReader* zReader) const
  94. {
  95. Entity* entity = createEntity(Framework::Vec3<float>(0, 0, 0), 0, 0);
  96. loadSuperEntity(entity, zReader);
  97. return entity;
  98. }
  99. void EntityType::saveEntity(
  100. Entity* zEntity, Framework::StreamWriter* zWriter) const
  101. {
  102. saveSuperEntity(zEntity, zWriter);
  103. }
  104. Entity* EntityType::createEntityAt(
  105. Framework::Vec3<float> position, int dimensionId) const
  106. {
  107. Entity* entity = createEntity(
  108. position, dimensionId, Game::INSTANCE->getNextEntityId());
  109. createSuperEntity(entity);
  110. return entity;
  111. }
  112. int EntityType::getId() const
  113. {
  114. return id;
  115. }
  116. ModelInfo* EntityType::zModel() const
  117. {
  118. return model;
  119. }
  120. void EntityType::setTypeId(int id)
  121. {
  122. this->id = id;
  123. }
  124. Framework::Text EntityType::getName() const
  125. {
  126. return name;
  127. }