Begin stubbing out voxel and chunk classes.
This commit is contained in:
parent
c2df101161
commit
72701812df
59
packages/voxel_mesher/src/chunk.rs
Normal file
59
packages/voxel_mesher/src/chunk.rs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
struct Chunk {
|
||||||
|
dimensions: [u16; 3],
|
||||||
|
data: Vec<u16>,
|
||||||
|
palette: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Chunk {
|
||||||
|
fn new (
|
||||||
|
dimensions: [u16; 3]
|
||||||
|
) -> Chunk {
|
||||||
|
let mut data = Vec::<u16>::new();
|
||||||
|
let palette = Vec::<String>::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 {
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
use gdnative::prelude::*;
|
use gdnative::prelude::*;
|
||||||
|
mod chunk;
|
||||||
|
|
||||||
// ```
|
// ```
|
||||||
// 0 1
|
// 0 1
|
||||||
|
23
packages/voxel_mesher/src/voxel.rs
Normal file
23
packages/voxel_mesher/src/voxel.rs
Normal file
@ -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<String, Voxel>
|
||||||
|
}
|
Binary file not shown.
@ -1,14 +1,14 @@
|
|||||||
[entry]
|
|
||||||
|
|
||||||
X11.64="res://packages/voxel_mesher/target/release/libtest.so"
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
|
|
||||||
X11.64=[ ]
|
|
||||||
|
|
||||||
[general]
|
[general]
|
||||||
|
|
||||||
singleton=false
|
singleton=false
|
||||||
load_once=true
|
load_once=true
|
||||||
symbol_prefix="godot_"
|
symbol_prefix="godot_"
|
||||||
reloadable=true
|
reloadable=true
|
||||||
|
|
||||||
|
[entry]
|
||||||
|
|
||||||
|
X11.64="res://packages/voxel_mesher/target/debug/libtest.so"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
|
||||||
|
X11.64=[ ]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user