forked from Kolyah35/minecraft-pe-0.6.1
the whole game
This commit is contained in:
142
src/world/level/chunk/LevelChunk.h
Executable file
142
src/world/level/chunk/LevelChunk.h
Executable file
@@ -0,0 +1,142 @@
|
||||
#ifndef NET_MINECRAFT_WORLD_LEVEL_CHUNK__LevelChunk_H__
|
||||
#define NET_MINECRAFT_WORLD_LEVEL_CHUNK__LevelChunk_H__
|
||||
|
||||
//package net.minecraft.world.level.chunk;
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "DataLayer.h"
|
||||
#include "../LevelConstants.h"
|
||||
#include "../../../util/Random.h"
|
||||
#include "../TilePos.h"
|
||||
|
||||
class Level;
|
||||
class Entity;
|
||||
class LightLayer;
|
||||
class AABB;
|
||||
class TileEntity;
|
||||
typedef std::vector<Entity*> EntityList;
|
||||
|
||||
class LevelChunk
|
||||
{
|
||||
public:
|
||||
typedef std::map<TilePos, TileEntity*> TEMap;
|
||||
typedef TEMap::const_iterator TEMapCIterator;
|
||||
|
||||
LevelChunk(Level* level, int x, int z);
|
||||
LevelChunk(Level* level, unsigned char* blocks, int x, int z);
|
||||
virtual ~LevelChunk();
|
||||
|
||||
void init(); // @todo virtual?;
|
||||
|
||||
// Clears the update map. This should be called when the chunk is
|
||||
// identical to the data generated by the level generator. It is
|
||||
// used to identify which parts of the chunk to transfer in multiplayer.
|
||||
void clearUpdateMap();
|
||||
|
||||
void deleteBlockData();
|
||||
|
||||
virtual bool isAt(int x, int z);
|
||||
|
||||
virtual int getHeightmap(int x, int z);
|
||||
|
||||
virtual void recalcHeightmap();
|
||||
virtual void recalcHeightmapOnly();
|
||||
|
||||
unsigned char* getBlockData() { return blocks; }
|
||||
|
||||
virtual int getBrightness(const LightLayer& layer, int x, int y, int z);
|
||||
virtual void setBrightness(const LightLayer& layer, int x, int y, int z, int brightness);
|
||||
virtual int getRawBrightness(int x, int y, int z, int skyDampen);
|
||||
|
||||
virtual void addEntity(Entity* e);
|
||||
virtual void removeEntity(Entity* e);
|
||||
virtual void removeEntity(Entity* e, int yc);
|
||||
|
||||
virtual void getEntitiesOfClass( int type, const AABB& bb, EntityList& list );
|
||||
virtual void getEntitiesOfType(int entityType, const AABB& bb, EntityList& list);
|
||||
|
||||
//
|
||||
// TileEntity
|
||||
//
|
||||
TileEntity* getTileEntity(int x, int y, int z);
|
||||
//bool hasOtherTileEntity(int x, int y, int z, TileEntity* e);
|
||||
bool hasTileEntityAt(int x, int y, int z);
|
||||
bool hasTileEntityAt(TileEntity* te);
|
||||
void addTileEntity(TileEntity* te);
|
||||
void setTileEntity(int x, int y, int z, TileEntity* tileEntity);
|
||||
void removeTileEntity(int x, int y, int z);
|
||||
|
||||
virtual bool isSkyLit(int x, int y, int z);
|
||||
virtual void lightLava() {}
|
||||
virtual void recalcBlockLights();
|
||||
virtual void skyBrightnessChanged();
|
||||
|
||||
virtual void load();
|
||||
virtual void unload();
|
||||
|
||||
virtual bool shouldSave(bool force);
|
||||
virtual void markUnsaved();
|
||||
|
||||
virtual int countEntities();
|
||||
virtual void getEntities(Entity* except, const AABB& bb, std::vector<Entity*>& es);
|
||||
|
||||
virtual int getTile(int x, int y, int z);
|
||||
virtual bool setTile(int x, int y, int z, int tile_);
|
||||
void setTileRaw(int x, int y, int z, int tile);
|
||||
virtual bool setTileAndData(int x, int y, int z, int tile_, int data_);
|
||||
|
||||
virtual int getData(int x, int y, int z);
|
||||
virtual void setData(int x, int y, int z, int val);
|
||||
|
||||
virtual void setBlocks(unsigned char* newBlocks, int sub);
|
||||
|
||||
virtual int getBlocksAndData(unsigned char* data, int x0, int y0, int z0, int x1, int y1, int z1, int p);
|
||||
virtual int setBlocksAndData(unsigned char* data, int x0, int y0, int z0, int x1, int y1, int z1, int p);
|
||||
|
||||
virtual Random getRandom(long l);
|
||||
|
||||
virtual bool isEmpty();
|
||||
const TEMap& getTileEntityMap() const;
|
||||
private:
|
||||
void lightGap(int x, int z, int source);
|
||||
void lightGaps(int x, int z);
|
||||
|
||||
void recalcHeight(int x, int yStart, int z);
|
||||
public:
|
||||
static bool touchedSky;
|
||||
static const int ChunkBlockCount = CHUNK_BLOCK_COUNT;
|
||||
static const int ChunkSize = ChunkBlockCount;
|
||||
static const int UpdateMapBitShift = 4; // power of (LEVEL_HEIGHT / 8) == 16
|
||||
|
||||
int blocksLength; // ? needed or not? (i.e. are all chunks the same size?)
|
||||
|
||||
bool loaded;
|
||||
Level* level;
|
||||
DataLayer data;
|
||||
DataLayer skyLight;
|
||||
DataLayer blockLight;
|
||||
|
||||
char heightmap[CHUNK_COLUMNS];
|
||||
unsigned char updateMap[CHUNK_COLUMNS]; // marks regions within block columns that have been modified
|
||||
int minHeight;
|
||||
|
||||
const int x, z;
|
||||
const int xt, zt;
|
||||
|
||||
bool terrainPopulated;
|
||||
bool unsaved;
|
||||
bool dontSave;
|
||||
bool createdFromSave;
|
||||
bool lastSaveHadEntities;
|
||||
long lastSaveTime;
|
||||
protected:
|
||||
unsigned char* blocks;
|
||||
|
||||
static const int EntityBlocksArraySize = 128/16;
|
||||
std::vector<Entity*> entityBlocks[EntityBlocksArraySize];
|
||||
|
||||
TEMap tileEntities;
|
||||
};
|
||||
#endif /*NET_MINECRAFT_WORLD_LEVEL_CHUNK__LevelChunk_H__*/
|
||||
Reference in New Issue
Block a user