replace regions layer index with enum

This commit is contained in:
MihailRis 2024-09-02 08:32:12 +03:00
parent 10e10955dc
commit 3dda512468
3 changed files with 22 additions and 12 deletions

View File

@ -16,6 +16,12 @@ inline constexpr bool ENGINE_DEBUG_BUILD = true;
inline const std::string ENGINE_VERSION_STRING = "0.23"; inline const std::string ENGINE_VERSION_STRING = "0.23";
/// @brief world regions format version
inline constexpr uint REGION_FORMAT_VERSION = 2;
/// @brief max simultaneously open world region files
inline constexpr uint MAX_OPEN_REGION_FILES = 32;
inline constexpr blockid_t BLOCK_AIR = 0; inline constexpr blockid_t BLOCK_AIR = 0;
inline constexpr itemid_t ITEM_EMPTY = 0; inline constexpr itemid_t ITEM_EMPTY = 0;
inline constexpr entityid_t ENTITY_NONE = 0; inline constexpr entityid_t ENTITY_NONE = 0;
@ -40,6 +46,7 @@ inline constexpr itemid_t ITEM_VOID = std::numeric_limits<itemid_t>::max();
/// @brief max number of block definitions possible /// @brief max number of block definitions possible
inline constexpr blockid_t MAX_BLOCKS = BLOCK_VOID; inline constexpr blockid_t MAX_BLOCKS = BLOCK_VOID;
/// @brief calculates a 1D array index from 3D array indices
inline constexpr uint vox_index(uint x, uint y, uint z, uint w=CHUNK_W, uint d=CHUNK_D) { inline constexpr uint vox_index(uint x, uint y, uint z, uint w=CHUNK_W, uint d=CHUNK_D) {
return (y * d + z) * w + x; return (y * d + z) * w + x;
} }

View File

@ -51,8 +51,8 @@ uint WorldRegion::getChunkDataSize(uint x, uint z) {
} }
WorldRegions::WorldRegions(const fs::path& directory) : directory(directory) { WorldRegions::WorldRegions(const fs::path& directory) : directory(directory) {
for (size_t i = 0; i < sizeof(layers) / sizeof(RegionsLayer); i++) { for (size_t i = 0; i < REGION_LAYERS_COUNT; i++) {
layers[i].layer = i; layers[i].layer = static_cast<RegionLayerIndex>(i);
} }
auto& voxels = layers[REGION_LAYER_VOXELS]; auto& voxels = layers[REGION_LAYER_VOXELS];
voxels.folder = directory / fs::path("regions"); voxels.folder = directory / fs::path("regions");
@ -83,7 +83,7 @@ void RegionsLayer::writeAll() {
void WorldRegions::put( void WorldRegions::put(
int x, int x,
int z, int z,
int layerid, RegionLayerIndex layerid,
std::unique_ptr<ubyte[]> data, std::unique_ptr<ubyte[]> data,
size_t size size_t size
) { ) {

View File

@ -8,6 +8,7 @@
#include <mutex> #include <mutex>
#include <unordered_map> #include <unordered_map>
#include "constants.hpp"
#include "typedefs.hpp" #include "typedefs.hpp"
#include "data/dynamic_fwd.hpp" #include "data/dynamic_fwd.hpp"
#include "util/BufferPool.hpp" #include "util/BufferPool.hpp"
@ -23,16 +24,18 @@ namespace fs = std::filesystem;
inline constexpr uint REGION_HEADER_SIZE = 10; inline constexpr uint REGION_HEADER_SIZE = 10;
inline constexpr uint REGION_LAYER_VOXELS = 0; enum RegionLayerIndex : uint {
inline constexpr uint REGION_LAYER_LIGHTS = 1; REGION_LAYER_VOXELS = 0,
inline constexpr uint REGION_LAYER_INVENTORIES = 2; REGION_LAYER_LIGHTS,
inline constexpr uint REGION_LAYER_ENTITIES = 3; REGION_LAYER_INVENTORIES,
REGION_LAYER_ENTITIES,
REGION_LAYERS_COUNT
};
inline constexpr uint REGION_SIZE_BIT = 5; inline constexpr uint REGION_SIZE_BIT = 5;
inline constexpr uint REGION_SIZE = (1 << (REGION_SIZE_BIT)); inline constexpr uint REGION_SIZE = (1 << (REGION_SIZE_BIT));
inline constexpr uint REGION_CHUNKS_COUNT = ((REGION_SIZE) * (REGION_SIZE)); inline constexpr uint REGION_CHUNKS_COUNT = ((REGION_SIZE) * (REGION_SIZE));
inline constexpr uint REGION_FORMAT_VERSION = 2;
inline constexpr uint MAX_OPEN_REGION_FILES = 32;
class illegal_region_format : public std::runtime_error { class illegal_region_format : public std::runtime_error {
public: public:
@ -122,7 +125,7 @@ inline void calc_reg_coords(
struct RegionsLayer { struct RegionsLayer {
/// @brief Layer index /// @brief Layer index
int layer; RegionLayerIndex layer;
/// @brief Regions layer folder /// @brief Regions layer folder
fs::path folder; fs::path folder;
@ -180,7 +183,7 @@ class WorldRegions {
/// @brief World directory /// @brief World directory
fs::path directory; fs::path directory;
RegionsLayer layers[4] {}; RegionsLayer layers[REGION_LAYERS_COUNT] {};
public: public:
bool generatorTestMode = false; bool generatorTestMode = false;
bool doWriteLights = true; bool doWriteLights = true;
@ -201,7 +204,7 @@ public:
void put( void put(
int x, int x,
int z, int z,
int layer, RegionLayerIndex layer,
std::unique_ptr<ubyte[]> data, std::unique_ptr<ubyte[]> data,
size_t size size_t size
); );