Chunk.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "Block.h"
  3. #include <Vec3.h>
  4. #include <Array.h>
  5. #include <Datei.h>
  6. #include <Punkt.h>
  7. #include <Either.h>
  8. class Game;
  9. class Chunk : public virtual Framework::ReferenceCounter
  10. {
  11. private:
  12. Game* zGame;
  13. int dimensionId;
  14. Framework::Punkt location;
  15. Block** blocks;
  16. Chunk* zNeighbours[ 4 ];
  17. unsigned short* blockIds;
  18. Framework::Either<Block*, int> zBlockNeighbor( Framework::Vec3<int> location );
  19. bool added;
  20. Framework::Critical cs;
  21. Framework::Array<Entity*> views;
  22. public:
  23. Chunk( Framework::Punkt location, Game* zGame, int dimensionId );
  24. Chunk( Framework::Punkt location, Game* zGame, int dimensionId, Framework::StreamReader* zReader );
  25. ~Chunk();
  26. void api( Framework::StreamReader* zRequest, NetworkResponse* zResponse );
  27. Framework::Either<Block*, int> zBlockAt( Framework::Vec3<int> cLocation ) const;
  28. const Block* zBlockConst( Framework::Vec3<int> location ) const;
  29. void instantiateBlock( Framework::Vec3<int> location );
  30. void generateBlock( Framework::Vec3<int> location );
  31. void putBlockAt( Framework::Vec3<int> location, Block* block );
  32. void putBlockTypeAt( Framework::Vec3<int> location, int type );
  33. void setNeighbor( Direction dir, Chunk* zChunk );
  34. void load( Framework::StreamReader* zReader );
  35. void save( Framework::StreamWriter* zWriter );
  36. void removeUnusedBlocks();
  37. int getDimensionId() const;
  38. Framework::Punkt getCenter() const;
  39. Framework::Vec3<int> getMin() const;
  40. Framework::Vec3<int> getMax() const;
  41. Game* zGameObj() const;
  42. void prepareRemove();
  43. void setAdded();
  44. void addView( Entity* zEntity );
  45. void removeView( Entity* zEntity );
  46. bool hasViews() const;
  47. };