Remove unused Chunk::raycast
This commit is contained in:
parent
6c6a321a0c
commit
aec8d36647
1 changed files with 0 additions and 88 deletions
88
src/chunk.rs
88
src/chunk.rs
|
@ -361,92 +361,4 @@ impl Chunk {
|
|||
|
||||
Self::quads_to_geometry(quads)
|
||||
}
|
||||
|
||||
pub fn get_block(&self, x: usize, y: usize, z: usize) -> Option<&Block> {
|
||||
if x >= CHUNK_SIZE || y >= CHUNK_SIZE || z >= CHUNK_SIZE {
|
||||
return None;
|
||||
}
|
||||
|
||||
self.blocks[y][z][x].as_ref()
|
||||
}
|
||||
|
||||
fn calc_scale(vector: Vector3<f32>, scalar: f32) -> f32 {
|
||||
if scalar == 0.0 {
|
||||
f32::INFINITY
|
||||
} else {
|
||||
(vector / scalar).magnitude()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn raycast(
|
||||
&self,
|
||||
chunk_position: Vector3<usize>,
|
||||
origin: Vector3<f32>,
|
||||
direction: Vector3<f32>,
|
||||
) -> Option<(Vector3<usize>, Vector3<i32>)> {
|
||||
let origin = origin - chunk_position.map(|x| (x * 16) as f32);
|
||||
let scale = Vector3::new(
|
||||
Self::calc_scale(direction, direction.x),
|
||||
Self::calc_scale(direction, direction.y),
|
||||
Self::calc_scale(direction, direction.z),
|
||||
);
|
||||
let direction = direction.normalize();
|
||||
|
||||
let mut position = origin.map(|x| x as i32);
|
||||
let step = direction.map(|x| x.signum() as i32);
|
||||
|
||||
// Truncate the origin
|
||||
let mut lengths = Vector3 {
|
||||
x: if direction.x < 0.0 {
|
||||
(origin.x - position.x as f32) * scale.x
|
||||
} else {
|
||||
(position.x as f32 + 1.0 - origin.x) * scale.x
|
||||
},
|
||||
y: if direction.y < 0.0 {
|
||||
(origin.y - position.y as f32) * scale.y
|
||||
} else {
|
||||
(position.y as f32 + 1.0 - origin.y) * scale.y
|
||||
},
|
||||
z: if direction.z < 0.0 {
|
||||
(origin.z - position.z as f32) * scale.z
|
||||
} else {
|
||||
(position.z as f32 + 1.0 - origin.z) * scale.z
|
||||
},
|
||||
};
|
||||
|
||||
let mut face;
|
||||
|
||||
while lengths.magnitude() < 100.0 {
|
||||
if lengths.x <= lengths.y && lengths.x <= lengths.z {
|
||||
lengths.x += scale.x;
|
||||
position.x += step.x;
|
||||
face = Vector3::unit_x() * step.x;
|
||||
} else if lengths.y <= lengths.x && lengths.y <= lengths.z {
|
||||
lengths.y += scale.y;
|
||||
position.y += step.y;
|
||||
face = Vector3::unit_y() * step.y;
|
||||
} else if lengths.z <= lengths.x && lengths.z <= lengths.y {
|
||||
lengths.z += scale.z;
|
||||
position.z += step.z;
|
||||
face = Vector3::unit_z() * step.z;
|
||||
} else {
|
||||
return None;
|
||||
}
|
||||
|
||||
if self
|
||||
.get_block(
|
||||
position.x as usize,
|
||||
position.y as usize,
|
||||
position.z as usize,
|
||||
)
|
||||
.is_some()
|
||||
{
|
||||
// Intersection occurred
|
||||
return Some((position.map(|x| x as usize), face));
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue