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::*;
|
||||
mod chunk;
|
||||
|
||||
// ```
|
||||
// 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]
|
||||
|
||||
singleton=false
|
||||
load_once=true
|
||||
symbol_prefix="godot_"
|
||||
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