EntityType.cpp 4.2 KB

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