#units #math #gamedev #building-block

fts_gamemath

fts_gamemath is a collection of crates that provide basic building blocks for 3d video game math

2 releases

0.1.1 Jun 12, 2019
0.1.0 Jun 10, 2019

#1304 in Game dev

Unlicense OR MIT

79KB
1K SLoC

fts_gamemath

Crate API Build Status Crates.io

fts_gamemath is a collection of Rust crates that provide basic building blocks for 3d video game math

fts_units

fts_units is a Rust library that enables compile-time type-safe mathematical operations using units of measurement.

use fts_units::si_system::quantities::f32::*;
let d = Meters::new(10.0);
let t = Seconds::new(2.0);
let v = d / v; // units will be m·s⁻¹
let err = d + t; // compile error

This easily extends into complex operations.

use fts_units::si_system::quantities::*;

fn calc_ballistic_range(speed: MetersPerSecond<f32>, gravity: MetersPerSecond2<f32>, initial_height: Meters<f32>)
-> Meters<f32>
{
    let d2r = 0.01745329252;
    let angle : f32 = 45.0 * d2r;
    let cos = Dimensionless::<f32>::new(angle.cos());
    let sin = Dimensionless::<f32>::new(angle.sin());

    let range = (speed*cos/gravity) * (speed*sin + (speed*speed*sin*sin + Dimensionless::<f32>::new(2.0)*gravity*initial_height).sqrt());
    range
}

You can convert between units and cast between types.


let m = Meters::<f32>::new(7.73);
let km : Kilometers<f32> = m.convert_into();
assert_eq!(km.amount(), 0.00773);

let i : Meters<i32> = m.cast_into();
assert_eq!(i.amount(), 7);

For additional features and examples refer to the fts_units documentation.

fts_vecmath

Coming soon!

fts_intersect3d

Coming soon!

License: Unlicense OR MIT

Dependencies

~215–305KB