subtr-actor 1.0.0

Rocket League replay transformer
Documentation
use super::*;
use crate::{GoalEvent, GAME_STATE_KICKOFF_COUNTDOWN};

#[test]
fn kickoff_waiting_for_first_touch_is_not_live_play() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState {
        ball_has_been_hit: Some(false),
        ..Default::default()
    };
    let state = tracker.state_parts(&gameplay, &FrameEventsState::default());

    assert_eq!(state.gameplay_phase, GameplayPhase::KickoffWaitingForTouch);
    assert!(!state.is_live_play);
    assert!(state.gameplay_phase.counts_toward_player_motion());
}

#[test]
fn match_time_remaining_does_not_force_kickoff_countdown() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState {
        game_state: Some(55),
        kickoff_countdown_time: Some(299),
        ball_has_been_hit: Some(true),
        ..Default::default()
    };
    let state = tracker.state_parts(&gameplay, &FrameEventsState::default());

    assert_eq!(state.gameplay_phase, GameplayPhase::ActivePlay);
    assert!(state.is_live_play);
}

#[test]
fn replicated_countdown_state_marks_kickoff_countdown() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState {
        game_state: Some(GAME_STATE_KICKOFF_COUNTDOWN),
        ball_has_been_hit: Some(true),
        ..Default::default()
    };
    let state = tracker.state_parts(&gameplay, &FrameEventsState::default());

    assert_eq!(state.gameplay_phase, GameplayPhase::KickoffCountdown);
    assert!(!state.is_live_play);
}

#[test]
fn active_game_state_with_zero_countdown_is_live_play() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState {
        game_state: Some(54),
        kickoff_countdown_time: Some(0),
        ball_has_been_hit: Some(true),
        ..Default::default()
    };
    let state = tracker.state_parts(&gameplay, &FrameEventsState::default());

    assert_eq!(state.gameplay_phase, GameplayPhase::ActivePlay);
    assert!(state.is_live_play);
}

#[test]
fn legacy_countdown_time_without_state_still_marks_kickoff_countdown() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState {
        kickoff_countdown_time: Some(3),
        ball_has_been_hit: Some(true),
        ..Default::default()
    };
    let state = tracker.state_parts(&gameplay, &FrameEventsState::default());

    assert_eq!(state.gameplay_phase, GameplayPhase::KickoffCountdown);
    assert!(!state.is_live_play);
}

#[test]
fn goal_event_enters_post_goal_phase() {
    let mut tracker = LivePlayTracker::default();
    let gameplay = GameplayState::default();
    let events = FrameEventsState {
        goal_events: vec![GoalEvent {
            time: 10.0,
            frame: 1,
            scoring_team_is_team_0: true,
            player: None,
            player_position: None,
            team_zero_score: None,
            team_one_score: None,
        }],
        ..Default::default()
    };

    let state = tracker.state_parts(&gameplay, &events);

    assert_eq!(state.gameplay_phase, GameplayPhase::PostGoal);
    assert!(!state.is_live_play);
}