Dimension.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <Array.h>
  3. #include <Critical.h>
  4. #include <Trie.h>
  5. #include "Chunk.h"
  6. #include "Entity.h"
  7. class World;
  8. class Dimension : public virtual Framework::ReferenceCounter
  9. {
  10. private:
  11. int id;
  12. Framework::RCTrie<Chunk>* chunks;
  13. Framework::Array<Chunk*> chunkList;
  14. Framework::RCArray<Entity>* entities;
  15. Framework::Critical cs;
  16. void getAddrOf(Framework::Punkt cPos, char* addr) const;
  17. void getAddrOfWorld(Framework::Punkt wPos, char* addr) const;
  18. public:
  19. Dimension();
  20. ~Dimension();
  21. void setId(int id);
  22. void api(char* message);
  23. Block* zBlock(Framework::Vec3<int> location);
  24. Block* getBlock(Framework::Vec3<int> location);
  25. void addEntity(Entity* entity);
  26. void setChunk(Chunk* chunk, Framework::Punkt center);
  27. bool hasChunck(int x, int y) const;
  28. Chunk* zChunk(Framework::Punkt wPos) const;
  29. void removeDistantChunks(Framework::Punkt wPos);
  30. void setBlock(Block* block);
  31. void removeBlock(Block* zBlock);
  32. Entity* zEntity(int id);
  33. Entity* getEntity(int id);
  34. void removeEntity(int id);
  35. int getId() const;
  36. inline static Framework::Vec3<int> chunkCoordinates(
  37. Framework::Vec3<int> worldLocation)
  38. {
  39. Framework::Vec3<int> result = worldLocation;
  40. result.x = result.x % CHUNK_SIZE;
  41. result.y = result.y % CHUNK_SIZE;
  42. if (result.x < 0) result.x += CHUNK_SIZE;
  43. if (result.y < 0) result.y += CHUNK_SIZE;
  44. return result;
  45. }
  46. };