4jcraft/targets/minecraft/world/level/chunk/DataLayer.cpp
Tropical dd93cfe91e
Some checks are pending
Build (Linux, x86-64) / build-linux (push) Waiting to run
Format Check / clang-format (push) Waiting to run
format everything
2026-04-01 13:48:29 -05:00

45 lines
1.1 KiB
C++

#include "DataLayer.h"
DataLayer::DataLayer(int length, int depthBits)
: depthBits(depthBits), depthBitsPlusFour(depthBits + 4) {
data = std::vector<uint8_t>(length >> 1);
}
DataLayer::DataLayer(std::vector<uint8_t>& data, int depthBits)
: depthBits(depthBits), depthBitsPlusFour(depthBits + 4) {
this->data = data;
}
int DataLayer::get(int x, int y, int z) {
int pos = (x << depthBitsPlusFour | z << depthBits | y);
int slot = pos >> 1;
int part = pos & 1;
if (part == 0) {
return data[slot] & 0xf;
} else {
return (data[slot] >> 4) & 0xf;
}
}
void DataLayer::set(int x, int y, int z, int val) {
int pos = (x << depthBitsPlusFour | z << depthBits | y);
int slot = pos >> 1;
int part = pos & 1;
if (part == 0) {
data[slot] = (uint8_t)((data[slot] & 0xf0) | (val & 0xf));
} else {
data[slot] = (uint8_t)((data[slot] & 0x0f) | ((val & 0xf) << 4));
}
}
bool DataLayer::isValid() { return !data.empty(); }
void DataLayer::setAll(int br) {
uint8_t val = (uint8_t)(br & (br << 4));
for (unsigned int i = 0; i < data.size(); i++) {
data[i] = val;
}
}