6 releases
Uses new Rust 2024
new 0.2.2 | Mar 22, 2025 |
---|---|
0.2.1 | Mar 22, 2025 |
0.1.2 | Jan 9, 2025 |
#448 in Game dev
50 downloads per month
15KB
258 lines
Raywoke
Raywoke is an extremely simple raycasting crate, forked from raylite. It was created primarily to make the API simpler to use, and integrate more closely with third-party math libraries.
Third-party crate interop
Raywoke provides interop with the following external crates:
cgmath
euclid
glam
mint
nalgebra
ultraviolet
To enable this, enable their respective features in your cargo.toml
:
[dependencies]
raywoke = { version = "0.1", features = ["glam","nalgebra"] }
Examples
Using the library
use raywoke::prelude::*;
// Tuples are being used here for demonstration purposes, but any type which implements the Point trait will work
let ray = Ray::new(
(0., 0.),
(2., 0.),
);
let mut bar = Barrier::new(
(1., -1.),
(1., 1.)
);
let result = cast(&ray, &bar); // Returns a Result<RayHit, RayFail>
assert!(result.is_ok()); // Result is an Ok<RayHit> containing hit info
// Place barrier behind the Ray
bar = Barrier::new(
(-1., -1.),
(-1., 1.)
);
let result = cast(&ray, &bar);
assert!(result.is_err()); // Result is an Err<RayFail::NoHit>
Third-party crate interop
use glam::DVec2;
use nalgebra::Vector2;
use raywoke::prelude::*;
// With the "glam" and "nalgebra" features, you can use their respective Vector structs
let ray = Ray::new(
DVec2::new(0., 0.),
Vector2::new(0., 0.),
);
Creating your own Point struct
use raywoke::prelude::*;
// Clone and Debug are both required
#[derive(Debug, Clone)]
struct Vec2 {
x: f64,
y: f64
}
impl Point for Vec2 {
fn x(&self) -> f64 {
self.x
}
fn y(&self) -> f64 {
self.y
}
fn edit(&mut self, x: f64, y: f64) {
self.x = x;
self.y = y;
}
}
let ray = Ray::new(
Vec2 { x: 0., y: 0. },
Vec2 { x: 2., y: 0. },
);
Dependencies
~0–2.3MB
~60K SLoC