MultiblockStructure.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. virtual void onBlockReplaced(Entity* zActor,
  41. Item* zUsedItem,
  42. ItemSkill* zUsedSkill,
  43. Block* zOldBlock,
  44. Block* zNewBlock);
  45. bool isEmpty() const;
  46. bool isFullyLoaded() const;
  47. bool isFullyUnloaded() const;
  48. bool isBlockMember(Block* zBlock) const;
  49. __int64 getStructureId() const;
  50. Framework::Vec3<int> getUniquePosition() const;
  51. int getStructureTypeId() const;
  52. friend MultiblockStructureType;
  53. };
  54. class MultiblockStructureType : public Framework::ReferenceCounter
  55. {
  56. private:
  57. const int id;
  58. protected:
  59. MultiblockStructureType(int id);
  60. ~MultiblockStructureType();
  61. virtual void loadSuperStructure(MultiblockStructure* zStructure,
  62. Framework::StreamReader* zReader) const;
  63. virtual void saveSuperStructure(MultiblockStructure* zStructure,
  64. Framework::StreamWriter* zWriter) const;
  65. virtual MultiblockStructure* createStructure(int dimensionId,
  66. __int64 structureId,
  67. Framework::Vec3<int> uniquePosition) const
  68. = 0;
  69. public:
  70. MultiblockStructure* loadStructure(int dimensionId,
  71. __int64 structureId,
  72. Framework::Vec3<int> uniquePosition,
  73. Framework::StreamReader* zReader) const;
  74. void saveStructure(MultiblockStructure* zStructure,
  75. Framework::StreamWriter* zWriter) const;
  76. int getId() const;
  77. };