EntityType.cpp 4.0 KB

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