Skip to main content

subtr_actor/stats/analysis_graph/nodes/
live_play.rs

1use super::*;
2use crate::stats::calculators::*;
3use crate::*;
4
5/// Determines whether each frame is live play (and its gameplay phase) from gameplay/events.
6pub struct LivePlayNode {
7    tracker: LivePlayTracker,
8    state: LivePlayState,
9}
10
11impl LivePlayNode {
12    pub fn new() -> Self {
13        Self {
14            tracker: LivePlayTracker::default(),
15            state: LivePlayState::default(),
16        }
17    }
18}
19
20impl_analysis_node! {
21    node = LivePlayNode,
22    state = LivePlayState,
23    name = "live_play",
24    dependencies = [
25        AnalysisDependency::required::<FrameInput>(),
26        gameplay_state_dependency(),
27        frame_events_state_dependency(),
28    ],
29    inputs = {
30        frame_input: FrameInput,
31        gameplay: GameplayState,
32        events: FrameEventsState,
33    },
34    evaluate = |node| {
35        node.state = frame_input
36            .live_play_state()
37            .unwrap_or_else(|| node.tracker.state_parts(gameplay, events));
38        Ok(())
39    },
40    state_ref = |node| &node.state,
41}