Files
mcpe/source/world/level/levelgen/chunk/LevelChunk.hpp
Brent a0f71c7b27 C++03 Support & Partial Xbox 360 Support (#37)
* WIP C++03 + Xbox 360 Support

* math.h & _USE_MATH_DEFINES on Level.hpp
Updated Xenon vcxproj file for new file structure.

* * Fix bad GUI scale setup.

* * Gui: Use ratios instead of hardcoded sub-1 floating point values, to make the mechanism more clear.

* Add Direct Connect Button and Screen (#30)

* Add Direct Connect Button and Screen

* Remove accidental extra build directories for wasm

* Add DirectConnectScreen.cpp to the CMake

* Use Hungarian coding style notation

* * Fix errors caused by #30

* * Improve the Chat Screen

* * Improve the DirectConnectScreen, among other things.

* * Update the game title once again.

* * Add build-wasm.bat.

* * Add info about compiling for wasm

* * Fix send to specific GUID actually broadcasting to everyone

* * Add command manager.

* * Add writeable configuration.

* * Allow dynamic screen size change on windows

* * Allow the same thing on the emscripten version.

* WIP C++03 + Xbox 360 Support

* Fixed a possible merging issue that broke RakNet?

* Additional Xbox 360 compatability fixes

---------

Co-authored-by: Brent Da Mage <BrentDaMage@users.noreply.github.com>
Co-authored-by: iProgramInCpp <iprogramincpp@gmail.com>
Co-authored-by: ts <124226059+uniformization@users.noreply.github.com>
2023-08-07 15:48:52 +03:00

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 "client/common/AABB.hpp"
#include "client/common/Utils.hpp"
#include "client/renderer/LightLayer.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;
};