Skip to main content

wowlab_engine_combat/builder/
built.rs

1use wowlab_engine_domain::rotation::RotationEngine;
2
3use crate::state::{CombatInstance, CombatProgram};
4
5/// Validated output of the single combat-system finalization transaction.
6#[derive(Debug)]
7#[must_use]
8pub struct BuiltCombatSystem {
9    #[cfg(feature = "test-support")]
10    #[doc(hidden)]
11    pub program: CombatProgram,
12    #[cfg(not(feature = "test-support"))]
13    pub(crate) program: CombatProgram,
14    #[cfg(feature = "test-support")]
15    #[doc(hidden)]
16    pub instance: CombatInstance,
17    #[cfg(not(feature = "test-support"))]
18    pub(crate) instance: CombatInstance,
19    pub(crate) rotation: RotationEngine,
20}
21
22impl BuiltCombatSystem {
23    pub fn program(&self) -> &CombatProgram {
24        &self.program
25    }
26
27    pub fn rppm_tracker(
28        &self,
29        tracker: crate::LocalRppmIdx,
30    ) -> Option<&wowlab_engine_rng::RppmTracker> {
31        self.instance
32            .runtime
33            .procs
34            .rppm_trackers
35            .get(tracker.as_usize())
36    }
37
38    #[cfg(feature = "test-support")]
39    #[doc(hidden)]
40    pub fn instance(&self) -> &CombatInstance {
41        &self.instance
42    }
43
44    #[cfg(feature = "test-support")]
45    #[doc(hidden)]
46    pub fn instance_mut(&mut self) -> &mut CombatInstance {
47        &mut self.instance
48    }
49
50    pub(crate) fn into_parts(self) -> (CombatProgram, CombatInstance, RotationEngine) {
51        (self.program, self.instance, self.rotation)
52    }
53}