//! PHYB physics body files.
//!
//! A `.phyb` file describes cloth and rigid-body physics for a character or
//! equipment piece. It contains two sections:
//!
//! - **Collision** — geometry primitives (capsules, ellipsoids, planes, spheres)
//!   used for cloth-versus-body interaction; see [`CollisionData`].
//! - **Simulator** — spring-chain simulators with nodes, connectors, attractors,
//!   and other dynamic parameters; see [`SimulatorData`].
//!
//! V0 files (`version == 0`) are a 12-byte all-zero stub with no data.
//! V1 files (`version` == [`PHYB_VERSION_FULL`]) have the full header and
//! sections. An optional `EPHB` extended trailer may follow the simulator
//! section; use [`Phyb::extended_bytes`] to access it.

mod collision;
mod header;
mod simulator;

pub use collision::{
    COLLISION_CAPSULE_SIZE, COLLISION_COUNT_BLOCK_SIZE, COLLISION_ELLIPSOID_SIZE,
    COLLISION_NORMAL_PLANE_SIZE, COLLISION_SPHERE_SIZE, COLLISION_THREE_POINT_PLANE_SIZE,
    CollisionCapsule, CollisionData, CollisionEllipsoid, CollisionNormalPlane, CollisionSphere,
    CollisionThreePointPlane,
};
pub use header::{
    PHYB_FULL_HEADER_SIZE, PHYB_MAX_RECORDS_PER_SECTION, PHYB_STUB_SIZE, PHYB_VERSION_FULL, Phyb,
    PhybVersion,
};
pub use simulator::{
    SIM_ATTRACTOR_SIZE, SIM_CHAIN_INTRINSIC_SIZE, SIM_COLLISION_REF_SIZE, SIM_CONNECTOR_SIZE,
    SIM_NODE_SIZE, SIM_PIN_SIZE, SIM_POST_ALIGNMENT_SIZE, SIM_SPRING_SIZE,
    SIMULATOR_COUNT_PREFIX_SIZE, SIMULATOR_COUNTER_BLOCK_SIZE, SIMULATOR_INTRINSIC_SIZE,
    SIMULATOR_OFFSET_BLOCK_SIZE, SIMULATOR_PARAMS_SIZE, SimAttractor, SimChain, SimChainKind,
    SimConnector, SimNode, SimPin, SimPostAlignment, SimSpring, Simulator, SimulatorCollisionKind,
    SimulatorCollisionRef, SimulatorData, SimulatorFlags, SimulatorParams,
};
