diff --git a/packages/voxel_mesher/src/chunk.rs b/packages/voxel_mesher/src/chunk.rs new file mode 100644 index 0000000..6737eb0 --- /dev/null +++ b/packages/voxel_mesher/src/chunk.rs @@ -0,0 +1,59 @@ +struct Chunk { + dimensions: [u16; 3], + data: Vec, + palette: Vec, +} + +impl Chunk { + fn new ( + dimensions: [u16; 3] + ) -> Chunk { + let mut data = Vec::::new(); + let palette = Vec::::new(); + + data.resize((dimensions[0] * dimensions[1] * dimensions[2]) as usize, 0); + Chunk { + dimensions, + data, + palette + } + } + + fn pos_to_idx (&self, x: u16, y: u16, z: u16) -> usize { + let [max_x, max_y, _] = self.dimensions; + ((z * max_x * max_y) + (y * max_y) + x) as usize + } + + fn idx_to_pos (&self, idx: usize) -> (u16, u16, u16) { + let [max_x, max_y, _] = self.dimensions; + + let z = idx as u16 / (max_x * max_y); + let i2 = idx as u16 - (z * max_x * max_y); + let y = i2 / max_x; + let x = i2 % max_x; + + (x, y, z) + } + + fn set_at_pos (&mut self, x: u16, y: u16, z: u16, name: String) { + let idx = self.pos_to_idx(x, y, z); + self.set_at_idx(idx, name) + } + + fn set_at_idx (&mut self, idx: usize, name: String) { + let voxel_id; + + if let Some(i) = self.palette.iter().position(|palette_name| palette_name == &name) { + voxel_id = i; + } else { + self.palette.push(name); + voxel_id = self.palette.len() - 1; + } + + self.data[idx] = voxel_id as u16; + } +} + +struct ChunkMap { + +} diff --git a/packages/voxel_mesher/src/lib.rs b/packages/voxel_mesher/src/lib.rs index 771d0ea..3ab5807 100644 --- a/packages/voxel_mesher/src/lib.rs +++ b/packages/voxel_mesher/src/lib.rs @@ -1,4 +1,5 @@ use gdnative::prelude::*; +mod chunk; // ``` // 0 1 diff --git a/packages/voxel_mesher/src/voxel.rs b/packages/voxel_mesher/src/voxel.rs new file mode 100644 index 0000000..37db0c0 --- /dev/null +++ b/packages/voxel_mesher/src/voxel.rs @@ -0,0 +1,23 @@ +struct Voxel { + name: String, + transparency: u8, + material: String +} + +impl Voxel { + fn new( + name: String, + transparency: u8, + material: String + ) { + Voxel { + name, + transparency, + material + } + } +} + +struct VoxelMap { + map: HashMap +} diff --git a/packages/voxel_mesher/target/debug/libtest.so b/packages/voxel_mesher/target/debug/libtest.so index bfadba8..975741e 100755 Binary files a/packages/voxel_mesher/target/debug/libtest.so and b/packages/voxel_mesher/target/debug/libtest.so differ diff --git a/packages/voxel_mesher/voxel_mesher.gdnlib b/packages/voxel_mesher/voxel_mesher.gdnlib index ec2a37c..a239188 100644 --- a/packages/voxel_mesher/voxel_mesher.gdnlib +++ b/packages/voxel_mesher/voxel_mesher.gdnlib @@ -1,14 +1,14 @@ -[entry] - -X11.64="res://packages/voxel_mesher/target/release/libtest.so" - -[dependencies] - -X11.64=[ ] - [general] singleton=false load_once=true symbol_prefix="godot_" reloadable=true + +[entry] + +X11.64="res://packages/voxel_mesher/target/debug/libtest.so" + +[dependencies] + +X11.64=[ ]