diff options
Diffstat (limited to 'Minecraft.World/DataLayer.cpp')
| -rw-r--r-- | Minecraft.World/DataLayer.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Minecraft.World/DataLayer.cpp b/Minecraft.World/DataLayer.cpp new file mode 100644 index 00000000..a5e7d088 --- /dev/null +++ b/Minecraft.World/DataLayer.cpp @@ -0,0 +1,62 @@ +#include "stdafx.h" +#include "DataLayer.h" + +DataLayer::DataLayer(int length, int depthBits) : depthBits(depthBits), depthBitsPlusFour(depthBits + 4) +{ + data = byteArray(length >> 1); +} + +DataLayer::DataLayer(byteArray data, int depthBits) : depthBits(depthBits), depthBitsPlusFour(depthBits + 4) +{ + this->data = data; +} + +DataLayer::~DataLayer() +{ + delete[] 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] = (byte) ((data[slot] & 0xf0) | (val & 0xf)); + } else + { + data[slot] = (byte) ((data[slot] & 0x0f) | ((val & 0xf) << 4)); + } +} + +bool DataLayer::isValid() +{ + return data.data != NULL; +} + +void DataLayer::setAll(int br) +{ + byte val = (byte) (br & (br << 4)); + for (unsigned int i = 0; i < data.length; i++) + { + data[i] = val; + } +}
\ No newline at end of file |
