#pragma once #include "Block.h" #include #include #include #include #include class Chunk : public virtual Framework::ReferenceCounter { private: int dimensionId; Framework::Punkt location; Block** blocks; Chunk* zNeighbours[4]; unsigned short* blockIds; Framework::Either zBlockNeighbor(Framework::Vec3 location); bool added; Framework::Critical cs; Framework::Array views; public: Chunk(Framework::Punkt location, int dimensionId); Chunk(Framework::Punkt location, int dimensionId, Framework::StreamReader* zReader); ~Chunk(); void api(Framework::StreamReader* zRequest, NetworkResponse* zResponse); Framework::Either zBlockAt(Framework::Vec3 cLocation) const; const Block* zBlockConst(Framework::Vec3 location) const; void instantiateBlock(Framework::Vec3 location); void generateBlock(Framework::Vec3 location); void putBlockAt(Framework::Vec3 location, Block* block); void putBlockTypeAt(Framework::Vec3 location, int type); void setNeighbor(Direction dir, Chunk* zChunk); void load(Framework::StreamReader* zReader); void save(Framework::StreamWriter* zWriter); void sendToClient(Framework::StreamWriter* zWriter); void removeUnusedBlocks(); int getDimensionId() const; Framework::Punkt getCenter() const; Framework::Vec3 getMin() const; Framework::Vec3 getMax() const; void prepareRemove(); void setAdded(); void addView(Entity* zEntity); void removeView(Entity* zEntity); bool hasView(Entity* zEntity); bool hasViews() const; };