//! Shared barrier-stepping resources: the world only advances after every
//! villager due this round has finished computing.
use bevy::prelude::*;
/// Simulated seconds. Advances only while `Phase::Stepping`.
#[derive(Resource)]
pub struct SimClock(pub f32);
#[derive(Resource, PartialEq, Clone, Copy, Debug)]
pub enum Phase {
/// World animates, clock runs, movement/needs are live.
Stepping,
/// LLM calls in flight — scene frozen until every result lands.
Computing,
}
#[derive(Resource)]
pub struct RoundState {
/// Results still owed before the barrier lifts.
pub pending: usize,
/// Completed barriers (HUD stat).
pub rounds: u64,
/// Real-time when computing started (deadman timeout).
pub computing_since: f32,
/// Real-time before the next gather may fire (guarantees a visible step).
pub step_until: f32,
}
impl Default for RoundState {
fn default() -> Self {
Self {
pending: 0,
rounds: 0,
computing_since: 0.0,
step_until: 0.5,
}
}
}