aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/DataLayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/DataLayer.cpp')
-rw-r--r--Minecraft.World/DataLayer.cpp62
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