pub struct ProductionManager {
pub current_tick: u64,
pub nodes: HashMap<NodeId, ResourceNode>,
pub buildings: HashMap<BuildingId, ProcessingBuilding>,
pub workers: HashMap<WorkerId, Worker>,
pub recipes: HashMap<RecipeId, Recipe>,
pub supply_chain_events: Vec<SupplyChainEvent>,
pub production_history: VecDeque<ProductionReport>,
/* private fields */
}Expand description
Manages all resource nodes, processing buildings, workers, recipes, and coordinates supply chain logic.
Fields§
§current_tick: u64§nodes: HashMap<NodeId, ResourceNode>§buildings: HashMap<BuildingId, ProcessingBuilding>§workers: HashMap<WorkerId, Worker>§recipes: HashMap<RecipeId, Recipe>§supply_chain_events: Vec<SupplyChainEvent>Accumulated supply chain events for this manager’s lifetime.
production_history: VecDeque<ProductionReport>Global production history (last 128 ticks).
Implementations§
Source§impl ProductionManager
impl ProductionManager
pub fn new() -> Self
pub fn add_node( &mut self, name: &str, kind: NodeKind, output_commodity: CommodityRef, base_yield: f64, reserves: Option<f64>, worker_capacity: u32, stockpile_capacity: f64, ) -> NodeId
pub fn add_building( &mut self, name: &str, worker_slots: u32, stockpile_capacity: f64, ) -> BuildingId
pub fn add_recipe( &mut self, name: &str, inputs: Vec<Ingredient>, outputs: Vec<Ingredient>, base_ticks: u64, workers_required: u32, energy_required: f64, ) -> RecipeId
pub fn add_worker(&mut self, skill_level: f64) -> WorkerId
pub fn assign_worker_to_building( &mut self, worker: WorkerId, building: BuildingId, ) -> bool
pub fn assign_worker_to_node(&mut self, worker: WorkerId, node: NodeId) -> bool
pub fn assign_recipe_to_building( &mut self, building: BuildingId, recipe: RecipeId, )
pub fn queue_recipe(&mut self, building: BuildingId, recipe: RecipeId)
Sourcepub fn transfer_node_to_building(
&mut self,
node: NodeId,
building: BuildingId,
commodity: CommodityRef,
max_amount: f64,
) -> f64
pub fn transfer_node_to_building( &mut self, node: NodeId, building: BuildingId, commodity: CommodityRef, max_amount: f64, ) -> f64
Transfer output from a node’s stockpile to a building’s input stockpile.
Sourcepub fn withdraw_from_building(
&mut self,
building: BuildingId,
commodity: CommodityRef,
amount: f64,
) -> f64
pub fn withdraw_from_building( &mut self, building: BuildingId, commodity: CommodityRef, amount: f64, ) -> f64
Withdraw output from a building’s stockpile (for downstream delivery).
pub fn disrupt_node(&mut self, node: NodeId, severity: f64)
pub fn disrupt_building(&mut self, building: BuildingId, reason: &str)
pub fn repair_building(&mut self, building: BuildingId)
pub fn maintain_node(&mut self, node: NodeId)
Sourcepub fn set_season(&mut self, kind: NodeKind, modifier: f64)
pub fn set_season(&mut self, kind: NodeKind, modifier: f64)
Set season modifier for all nodes of a given kind.
Sourcepub fn tick(&mut self) -> ProductionReport
pub fn tick(&mut self) -> ProductionReport
Advance production by one tick.
- Ticks all workers (fatigue).
- Ticks all resource nodes (yield, depletion, disruption recovery).
- Ticks all processing buildings (batch progress, input matching).
- Accumulates supply chain events.
- Produces a ProductionReport.
Sourcepub fn node_stockpile(&self, commodity: CommodityRef) -> f64
pub fn node_stockpile(&self, commodity: CommodityRef) -> f64
Total current stockpile across all nodes for a commodity.
Sourcepub fn building_stockpile(&self, commodity: CommodityRef) -> f64
pub fn building_stockpile(&self, commodity: CommodityRef) -> f64
Total current stockpile in buildings for a commodity (output side).
Sourcepub fn unresolved_events(&self) -> Vec<&SupplyChainEvent>
pub fn unresolved_events(&self) -> Vec<&SupplyChainEvent>
All unresolved supply chain events.
Sourcepub fn resolve_event(&mut self, index: usize)
pub fn resolve_event(&mut self, index: usize)
Resolve an event by index.
Sourcepub fn avg_throughput(&self, commodity: CommodityRef, n: usize) -> f64
pub fn avg_throughput(&self, commodity: CommodityRef, n: usize) -> f64
Summary of average throughput across last n ticks per commodity.
Sourcepub fn near_depletion_nodes(&self, threshold: f64) -> Vec<NodeId>
pub fn near_depletion_nodes(&self, threshold: f64) -> Vec<NodeId>
Find nodes near depletion.
Sourcepub fn idle_workers(&self) -> Vec<WorkerId>
pub fn idle_workers(&self) -> Vec<WorkerId>
Idle workers.
Sourcepub fn understaffed_buildings(&self) -> Vec<BuildingId>
pub fn understaffed_buildings(&self) -> Vec<BuildingId>
Buildings with open worker slots.
Sourcepub fn auto_assign_workers(&mut self)
pub fn auto_assign_workers(&mut self)
Auto-assign idle workers to understaffed buildings (greedy).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ProductionManager
impl RefUnwindSafe for ProductionManager
impl Send for ProductionManager
impl Sync for ProductionManager
impl Unpin for ProductionManager
impl UnsafeUnpin for ProductionManager
impl UnwindSafe for ProductionManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.