//! Math and core geometric primitives.
//!
//! This module is the foundation every other Oxide system depends on. It builds
//! on [`glam`] for vectors, quaternions, and matrices, and adds the engine's own
//! higher-level types:
//!
//! - [`Transform`] — decomposed translation/rotation/scale, the unit of placement
//! - [`Aabb`] — axis-aligned bounding box for bounds and culling
//! - [`Ray`] — origin + direction, for picking and queries
//! - [`Plane`] — infinite plane in Hessian normal form
//! - [`Frustum`] — six-plane view volume for visibility culling
//! - [`Color`] — linear RGBA color with sRGB conversion
//! - [`Rect`] — 2D rectangle for UI and viewports
//! - [`Range3`] — 3D value range for clamping and remapping
//!
//! `glam`'s own types are re-exported so downstream crates have a single import
//! site for all math.

mod aabb;
mod color;
mod frustum;
mod plane;
mod range3;
mod ray;
mod rect;
mod transform;

pub use aabb::Aabb;
pub use color::Color;
pub use frustum::Frustum;
pub use plane::Plane;
pub use range3::Range3;
pub use ray::Ray;
pub use rect::Rect;
pub use transform::Transform;

// Re-export the most commonly used `glam` types so consumers don't need a
// separate dependency on `glam` for everyday math.
pub use glam::{EulerRot, Mat3, Mat4, Quat, Vec2, Vec3, Vec4};
