hexx 0.24.0

Hexagonal utilities
Documentation
use crate::{ColumnMeshBuilder, HexLayout, MeshInfo, PlaneMeshBuilder};

fn mesh_integrity(mesh: MeshInfo, expected_len: usize) {
    assert_eq!(mesh.vertices.len(), expected_len);
    assert_eq!(mesh.normals.len(), expected_len);
    assert_eq!(mesh.uvs.len(), expected_len);
    for normal in mesh.normals {
        assert!(normal.is_normalized());
    }
    for uv in mesh.uvs {
        assert!(uv.x >= 0.0);
        assert!(uv.y >= 0.0);
        assert!(uv.x <= 1.0);
        assert!(uv.y <= 1.0);
    }
}

#[test]
fn plane_integrity() {
    let mesh = PlaneMeshBuilder::new(&HexLayout::default()).build();
    mesh_integrity(mesh, 6);
}

#[test]
fn column_integrity() {
    let layout = HexLayout::default();
    let mesh = ColumnMeshBuilder::new(&layout, 10.0)
        .without_top_face()
        .without_bottom_face()
        .build();
    mesh_integrity(mesh, 6 * 4);
    let mesh = ColumnMeshBuilder::new(&layout, 10.0)
        .without_bottom_face()
        .build();
    mesh_integrity(mesh, 6 * 4 + 6);
    let mesh = ColumnMeshBuilder::new(&layout, 10.0).build();
    mesh_integrity(mesh, 6 * 4 + 12);
}