hexmap 0.2.1

A crate for creating and working with hex-based tile maps.
Documentation
use crate::fractional::FractionalHex;
use crate::hex::Hex;

pub fn line(a: &Hex, b: &Hex) -> Vec<Hex> {
    let mut results: Vec<Hex> = Vec::new();
    let iterations = a.distance_to(*b);
    let step: f32 = 1.0 / (iterations as f32).max(1.0);

    for i in 0..=iterations {
        let i = i as f32;
        results.push(hex_lerp(a.nudge(), b.nudge(), &step * i).round());
    }

    results
}

fn lerp(a: f32, b: f32, t: &f32) -> f32 {
    let a = &a;
    a + (b - a) * t
}

fn hex_lerp(a: FractionalHex, b: FractionalHex, t: f32) -> FractionalHex {
    let q = lerp(a.q, b.q, &t);
    let r = lerp(a.r, b.r, &t);
    let s = lerp(a.s, b.s, &t);
    FractionalHex { q, r, s }
}