//! # combat-core
//!
//! A pure, deterministic, headless **combined-pool** combat engine. Every
//! combatant has a single `Vigor` pool that replaces HP / mana / stamina:
//! everything you do *and* everything done to you draws on the same bar, so
//! offense literally spends your survival.
//!
//! The crate is the single source of truth for combat math. It has no I/O, no
//! rendering, no real-time — a fight is a pure function of `(rules, seed, actors,
//! controllers)`, reproducible bit-for-bit (see [`rng`] and [`fixed`]). A batch
//! sim harness and (later) a real-time front-end are both just consumers.
//!
//! ## The shape of a fight
//! 1. Author a [`config::CombatConfig`] (the tunable "table") and `compile()` it
//!    to [`config::Rules`].
//! 2. Build [`actor::Actor`]s from [`actor::StatBlock`]s + resolved loadouts.
//! 3. Pair each with a [`controller::Controller`] (intent).
//! 4. Run an [`engine::Encounter`] → [`event::FightMetrics`].
//!
//! ## Module map
//! - [`fixed`] — integer fixed-point arithmetic; the only place magnitudes round.
//! - [`rng`] — vendored order-independent, version-stable deterministic RNG.
//! - [`con`] — the level-delta → multiplier con curve.
//! - [`mitigation`] — the ordered "how much lands" pipeline.
//! - [`effect`] / [`ability`] — the composable effect library and unified ability
//!   model (skills == spells) with its two-axis cost composer.
//! - [`actor`] — the symmetric combatant: combined pool, stagger cascade, statuses.
//! - [`config`] — the full tunable surface and its compiled [`config::Rules`].
//! - [`controller`] — pluggable decision policies (dumb AI, scripted player,
//!   hold-and-punish).
//! - [`event`] — the structured event stream + metrics recorder.
//! - [`engine`] — the fixed-tick loop and canonical within-tick resolution order.

pub mod ability;
pub mod actor;
pub mod con;
pub mod config;
pub mod controller;
pub mod effect;
pub mod engine;
pub mod event;
pub mod fixed;
pub mod mitigation;
pub mod rng;

// Convenience re-exports for the common surface.
pub use ability::{Ability, AbilitySpec, AbilityCost, Delivery};
pub use actor::{Actor, ActorId, StatBlock, StaggerState};
pub use config::{CombatConfig, Rules};
pub use controller::{
    Action, Controller, HoldAndPunish, HumanController, HumanHandle, HumanIntent, ScriptedPlayer,
    SwingOnCooldown,
};
pub use effect::{EffectKind, EffectSpec};
pub use engine::{Encounter, EncounterOptions};
pub use event::{ActorMetrics, FightMetrics, Outcome};
pub use rng::Rng;
