EntityType.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #include "EntityType.h"
  2. #include "Entity.h"
  3. #include "Game.h"
  4. EntityType::EntityType(int id, ModelInfo model)
  5. : ReferenceCounter(),
  6. id(id),
  7. model(model)
  8. {
  9. StaticRegistry<EntityType>::INSTANCE.registerT(this, id);
  10. }
  11. void EntityType::loadSuperEntity(Entity* zEntity, Framework::StreamReader* zReader) const
  12. {
  13. zEntity->loadInventory(zReader);
  14. zReader->lese((char*)&zEntity->id, 4);
  15. zReader->lese((char*)&zEntity->maxHP, 4);
  16. zReader->lese((char*)&zEntity->currentHP, 4);
  17. zReader->lese((char*)&zEntity->stamina, 4);
  18. zReader->lese((char*)&zEntity->maxStamina, 4);
  19. zReader->lese((char*)&zEntity->hunger, 4);
  20. zReader->lese((char*)&zEntity->maxHunger, 4);
  21. zReader->lese((char*)&zEntity->thirst, 4);
  22. zReader->lese((char*)&zEntity->maxThirst, 4);
  23. zReader->lese((char*)&zEntity->speed.x, 4);
  24. zReader->lese((char*)&zEntity->speed.y, 4);
  25. zReader->lese((char*)&zEntity->speed.z, 4);
  26. zReader->lese((char*)&zEntity->faceDir.x, 4);
  27. zReader->lese((char*)&zEntity->faceDir.y, 4);
  28. zReader->lese((char*)&zEntity->currentDimensionId, 4);
  29. zReader->lese((char*)&zEntity->location.x, 4);
  30. zReader->lese((char*)&zEntity->location.y, 4);
  31. zReader->lese((char*)&zEntity->location.z, 4);
  32. if (zEntity->target)
  33. delete zEntity->target;
  34. zEntity->target = ActionTarget::load(zReader);
  35. // load item skills
  36. zEntity->skills.leeren();
  37. int skillCount;
  38. zReader->lese((char*)&skillCount, 4);
  39. for (int i = 0; i < skillCount; i++)
  40. {
  41. int type;
  42. zReader->lese((char*)&type, 4);
  43. zEntity->skills.add(StaticRegistry<ItemType>::INSTANCE.zElement(type)->loadItemSkill(zReader));
  44. }
  45. }
  46. void EntityType::saveSuperEntity(Entity* zEntity, Framework::StreamWriter* zWriter) const
  47. {
  48. zEntity->saveInventory(zWriter);
  49. zWriter->schreibe((char*)&zEntity->id, 4);
  50. zWriter->schreibe((char*)&zEntity->maxHP, 4);
  51. zWriter->schreibe((char*)&zEntity->currentHP, 4);
  52. zWriter->schreibe((char*)&zEntity->stamina, 4);
  53. zWriter->schreibe((char*)&zEntity->maxStamina, 4);
  54. zWriter->schreibe((char*)&zEntity->hunger, 4);
  55. zWriter->schreibe((char*)&zEntity->maxHunger, 4);
  56. zWriter->schreibe((char*)&zEntity->thirst, 4);
  57. zWriter->schreibe((char*)&zEntity->maxThirst, 4);
  58. zWriter->schreibe((char*)&zEntity->speed.x, 4);
  59. zWriter->schreibe((char*)&zEntity->speed.y, 4);
  60. zWriter->schreibe((char*)&zEntity->speed.z, 4);
  61. zWriter->schreibe((char*)&zEntity->faceDir.x, 4);
  62. zWriter->schreibe((char*)&zEntity->faceDir.y, 4);
  63. zWriter->schreibe((char*)&zEntity->currentDimensionId, 4);
  64. zWriter->schreibe((char*)&zEntity->location.x, 4);
  65. zWriter->schreibe((char*)&zEntity->location.y, 4);
  66. zWriter->schreibe((char*)&zEntity->location.z, 4);
  67. ActionTarget::save(zEntity->target, zWriter);
  68. // save item skills
  69. int skillCount = zEntity->skills.getEintragAnzahl();
  70. zWriter->schreibe((char*)&skillCount, 4);
  71. for (ItemSkill* skill : zEntity->skills)
  72. {
  73. int type = skill->zSkillType()->getId();
  74. zWriter->schreibe((char*)&type, 4);
  75. skill->zSkillType()->saveItemSkill(skill, zWriter);
  76. }
  77. }
  78. void EntityType::createSuperEntity(Entity* zEntity) const
  79. {}
  80. Entity* EntityType::loadEntity(Framework::StreamReader* zReader) const
  81. {
  82. Entity* entity = createEntity(Framework::Vec3<float>(0, 0, 0), 0, 0);
  83. loadSuperEntity(entity, zReader);
  84. return entity;
  85. }
  86. void EntityType::saveEntity(Entity* zEntity, Framework::StreamWriter* zWriter) const
  87. {
  88. saveSuperEntity(zEntity, zWriter);
  89. }
  90. Entity* EntityType::createEntityAt(Framework::Vec3<float> position, int dimensionId) const
  91. {
  92. Entity* entity = createEntity(position, dimensionId, Game::INSTANCE->getNextEntityId());
  93. createSuperEntity(entity);
  94. return entity;
  95. }
  96. int EntityType::getId() const
  97. {
  98. return id;
  99. }
  100. const ModelInfo& EntityType::getModel() const
  101. {
  102. return model;
  103. }