 e2f1cf51c7
			
		
	
	
		e2f1cf51c7
		
	
	
	
	
		
			
			git-svn-id: http://mc-server.googlecode.com/svn/trunk@29 0a769ca7-a7f5-676a-18bf-c427514a06d6
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| class cWorld;
 | |
| class cEntity;
 | |
| class cChunk;
 | |
| class cChunkMap
 | |
| {
 | |
| public:
 | |
| 	cChunkMap( int a_Width, int a_Height, cWorld* a_World );
 | |
| 	~cChunkMap();
 | |
| 
 | |
| 	void AddChunk( cChunk* a_Chunk );
 | |
| 	unsigned int MakeHash( int a_X, int a_Z );
 | |
| 
 | |
| 	cChunk* GetChunk( int a_X, int a_Y, int a_Z );
 | |
| 	void RemoveChunk( cChunk* a_Chunk );
 | |
| 
 | |
| 	void Tick( float a_Dt );
 | |
| 
 | |
| 	void UnloadUnusedChunks();
 | |
| 	bool RemoveEntityFromChunk( cEntity & a_Entity, cChunk* a_CalledFrom = 0 );
 | |
| 	void SaveAllChunks();
 | |
| private:
 | |
| 	class cChunkData
 | |
| 	{
 | |
| 	public:
 | |
| 		cChunkData()
 | |
| 			: m_Compressed( 0 )
 | |
| 			, m_LiveChunk( 0 )
 | |
| 			, m_CompressedSize( 0 )
 | |
| 			, m_UncompressedSize( 0 )
 | |
| 		{}
 | |
| 		char* m_Compressed;
 | |
| 		unsigned int m_CompressedSize;
 | |
| 		unsigned int m_UncompressedSize;
 | |
| 		cChunk* m_LiveChunk;
 | |
| 	};
 | |
| 
 | |
| 	class cChunkLayer
 | |
| 	{
 | |
| 	public:
 | |
| 		cChunkLayer()
 | |
| 			: m_Chunks( 0 )
 | |
| 			, m_X( 0 )
 | |
| 			, m_Z( 0 )
 | |
| 			, m_NumChunksLoaded( 0 )
 | |
| 		{}
 | |
| 		cChunkLayer( int a_NumChunks )
 | |
| 			: m_Chunks( new cChunkData[a_NumChunks] )
 | |
| 			, m_X( 0 )
 | |
| 			, m_Z( 0 )
 | |
| 			, m_NumChunksLoaded( 0 )
 | |
| 		{}
 | |
| 		cChunkData* GetChunk( int a_X, int a_Z );
 | |
| 		cChunkData* m_Chunks;
 | |
| 		int m_X, m_Z;
 | |
| 		int m_NumChunksLoaded;
 | |
| 	};
 | |
| 
 | |
| 	void SaveLayer( cChunkLayer* a_Layer );
 | |
| 	cChunkLayer* LoadLayer( int a_LayerX, int a_LayerZ );
 | |
| 	cChunkLayer* GetLayerForChunk( int a_ChunkX, int a_ChunkZ );
 | |
| 	cChunkLayer* GetLayer( int a_LayerX, int a_LayerZ );
 | |
| 	cChunkLayer* AddLayer( const cChunkLayer & a_Layer );
 | |
| 	bool RemoveLayer( cChunkLayer* a_Layer );
 | |
| 	void CompressChunk( cChunkData* a_ChunkData );
 | |
| 
 | |
| 	int m_NumLayers;
 | |
| 	cChunkLayer* m_Layers;
 | |
| 
 | |
| 	class cChunkNode
 | |
| 	{
 | |
| 	public:
 | |
| 		cChunkNode();
 | |
| 		~cChunkNode();
 | |
| 		void push_back( cChunk* a_Chunk );
 | |
| 		unsigned int size() { return m_Size; }
 | |
| 		unsigned int allocated() { return m_Allocated; }
 | |
| 		void resize( unsigned int a_NewSize );
 | |
| 
 | |
| 		void erase( cChunk* a_Chunk );
 | |
| 
 | |
| 		cChunk** GetChunks() { return m_Chunks; }
 | |
| 	private:
 | |
| 		unsigned int m_Size;
 | |
| 		unsigned int m_Allocated;
 | |
| 		cChunk** m_Chunks;
 | |
| 	};
 | |
| 
 | |
| 	cChunkNode* m_Nodes;
 | |
| 	int m_Width, m_Height;
 | |
| 	cWorld* m_World;
 | |
| };
 |