mirror of
https://github.com/celisej567/mcpe.git
synced 2026-09-04 19:36:43 +03:00
129 lines
3.9 KiB
C++
129 lines
3.9 KiB
C++
/********************************************************************
|
|
Minecraft: Pocket Edition - Decompilation Project
|
|
Copyright (C) 2023 iProgramInCpp
|
|
|
|
The following code is licensed under the BSD 1 clause license.
|
|
SPDX-License-Identifier: BSD-1-Clause
|
|
********************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#include <cstring>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
#include "common/Utils.hpp"
|
|
#include "client/renderer/LightLayer.hpp"
|
|
#include "world/phys/AABB.hpp"
|
|
|
|
class Level;
|
|
class Entity;
|
|
|
|
class LevelChunk
|
|
{
|
|
private:
|
|
void _init();
|
|
protected:
|
|
LevelChunk() { _init(); }
|
|
public:
|
|
LevelChunk(Level*, int x, int z);
|
|
LevelChunk(Level*, TileID* pBlockData, int x, int z);
|
|
virtual ~LevelChunk();
|
|
|
|
void init();
|
|
|
|
void lightGap(int gx, int gz, uint8_t heightMap);
|
|
void lightGaps(int x, int z);
|
|
void deleteBlockData();
|
|
void clearUpdateMap();
|
|
|
|
virtual bool isAt(int x, int z);
|
|
virtual int getHeightmap(int x, int z);
|
|
virtual void recalcHeightmap();
|
|
virtual void recalcHeightmapOnly();
|
|
virtual int getBrightness(const LightLayer& ll, int x, int y, int z);
|
|
virtual void setBrightness(const LightLayer& ll, int x, int y, int z, int brightness);
|
|
virtual int getRawBrightness(int x, int y, int z, int skySubtract);
|
|
virtual void addEntity(Entity*);
|
|
virtual void removeEntity(Entity*);
|
|
virtual void removeEntity(Entity*, int vec);
|
|
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 b);
|
|
virtual void markUnsaved();
|
|
virtual int countEntities();
|
|
virtual void getEntities(Entity* pEntExclude, const AABB&, std::vector<Entity*>& out);
|
|
virtual TileID getTile(int x, int y, int z);
|
|
virtual bool setTile(int x, int y, int z, TileID tile);
|
|
virtual bool setTileAndData(int x, int y, int z, TileID tile, int data);
|
|
virtual int getData(int x, int y, int z);
|
|
virtual void setData(int x, int y, int z, int data);
|
|
virtual void setBlocks(uint8_t* pData, int y);
|
|
virtual int getBlocksAndData(uint8_t* pData, int, int, int, int, int, int, int);
|
|
virtual int setBlocksAndData(uint8_t* pData, int, int, int, int, int, int, int);
|
|
virtual Random getRandom(TLong l);
|
|
virtual void recalcHeight(int, int, int);
|
|
virtual bool isEmpty();
|
|
//...
|
|
|
|
public:
|
|
static bool touchedSky;
|
|
|
|
public:
|
|
|
|
int field_4;
|
|
bool m_bLoaded;
|
|
Level* m_pLevel;
|
|
uint8_t* m_tileData;
|
|
int m_tileDataCnt;
|
|
uint8_t* m_lightSky;
|
|
int m_lightSkyCnt;
|
|
uint8_t* m_lightBlk;
|
|
int m_lightBlkCnt;
|
|
uint8_t m_heightMap[256];
|
|
uint8_t m_updateMap[256];
|
|
int field_228;
|
|
int m_chunkX;
|
|
int m_chunkZ;
|
|
uint8_t field_234;
|
|
bool m_bUnsaved;
|
|
uint8_t field_236;
|
|
uint8_t field_237;
|
|
int field_238;
|
|
int field_23C;
|
|
TileID* m_pBlockData;
|
|
std::vector<Entity*> m_entities[128 / 16];
|
|
};
|
|
|
|
//@OVERSIGHT: Why the hell is EmptyLevelChunk derived from the WHOLE of LevelChunk?!
|
|
class EmptyLevelChunk : public LevelChunk
|
|
{
|
|
public:
|
|
EmptyLevelChunk(Level*, TileID* pBlockData, int x, int z);
|
|
|
|
int getHeightmap(int x, int z) override;
|
|
void recalcHeightmap() override;
|
|
void recalcHeightmapOnly() override;
|
|
int getRawBrightness(int x, int y, int z, int skySubtract) override;
|
|
void addEntity(Entity*) override;
|
|
void removeEntity(Entity*) override;
|
|
void removeEntity(Entity*, int vec) override;
|
|
bool isSkyLit(int x, int y, int z) override;
|
|
void lightLava() override;
|
|
void recalcBlockLights() override;
|
|
void skyBrightnessChanged() override;
|
|
void load() override;
|
|
void unload() override;
|
|
void markUnsaved() override;
|
|
TileID getTile(int x, int y, int z) override;
|
|
bool setTile(int x, int y, int z, TileID tile) override;
|
|
bool setTileAndData(int x, int y, int z, TileID tile, int data) override;
|
|
int getData(int x, int y, int z) override;
|
|
void setData(int x, int y, int z, int data) override;
|
|
void recalcHeight(int, int, int) override;
|
|
bool isEmpty() override;
|
|
};
|