MultiblockStructure.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. #include <Array.h>
  3. #include <Punkt.h>
  4. #include <ReferenceCounter.h>
  5. #include <Vec3.h>
  6. #include <Writer.h>
  7. class MultiblockStructureType;
  8. class Entity;
  9. class Item;
  10. class Block;
  11. class ItemSkill;
  12. class MultiblockStructureEnum
  13. {
  14. public:
  15. static const int TREE = 0;
  16. };
  17. class MultiblockStructure : public virtual Framework::ReferenceCounter
  18. {
  19. private:
  20. Framework::Array<Framework::Punkt> affectedChunks;
  21. Framework::Array<Framework::Vec3<int>> memberBlockPositions;
  22. Framework::Vec3<int> uniquePosition;
  23. int dimensionId;
  24. __int64 structureId;
  25. int structureTypeId;
  26. bool isLoading;
  27. protected:
  28. Framework::RCArray<Block> loadedMembers;
  29. public:
  30. MultiblockStructure(int dimensionId,
  31. __int64 structureId,
  32. Framework::Vec3<int> uniquePosition,
  33. int structureTypeId);
  34. ~MultiblockStructure();
  35. void onBlockLoaded(Block* block);
  36. void onBlockUnloaded(Block* zBlock);
  37. void addMemberPosition(Framework::Vec3<int> blockPos);
  38. virtual void onBlockRemoved(
  39. Entity* zActor, Item* zUsedItem, ItemSkill* zUsedSkill, Block* zBlock);
  40. bool isEmpty() const;
  41. bool isFullyLoaded() const;
  42. bool isFullyUnloaded() const;
  43. bool isBlockMember(Block* zBlock) const;
  44. __int64 getStructureId() const;
  45. Framework::Vec3<int> getUniquePosition() const;
  46. int getStructureTypeId() const;
  47. friend MultiblockStructureType;
  48. };
  49. class MultiblockStructureType : public Framework::ReferenceCounter
  50. {
  51. private:
  52. const int id;
  53. protected:
  54. MultiblockStructureType(int id);
  55. ~MultiblockStructureType();
  56. virtual void loadSuperStructure(MultiblockStructure* zStructure,
  57. Framework::StreamReader* zReader) const;
  58. virtual void saveSuperStructure(MultiblockStructure* zStructure,
  59. Framework::StreamWriter* zWriter) const;
  60. virtual MultiblockStructure* createStructure(int dimensionId,
  61. __int64 structureId,
  62. Framework::Vec3<int> uniquePosition) const
  63. = 0;
  64. public:
  65. MultiblockStructure* loadStructure(int dimensionId,
  66. __int64 structureId,
  67. Framework::Vec3<int> uniquePosition,
  68. Framework::StreamReader* zReader) const;
  69. void saveStructure(MultiblockStructure* zStructure,
  70. Framework::StreamWriter* zWriter) const;
  71. int getId() const;
  72. };