#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, StreamTarget target ); 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; };