From 3f5e59a75ff80ff50980370577667769d760882f Mon Sep 17 00:00:00 2001 From: Nick Eaton Date: Thu, 5 Sep 2024 19:13:54 -0400 Subject: [PATCH] Add test for correct time resource during rollback --- lightyear/src/client/prediction/rollback.rs | 134 +++++++++++++++++--- 1 file changed, 117 insertions(+), 17 deletions(-) diff --git a/lightyear/src/client/prediction/rollback.rs b/lightyear/src/client/prediction/rollback.rs index 3082b05f..f63192c9 100644 --- a/lightyear/src/client/prediction/rollback.rs +++ b/lightyear/src/client/prediction/rollback.rs @@ -873,6 +873,8 @@ mod unit_tests { /// More general integration tests for rollback #[cfg(test)] mod integration_tests { + use std::time::Duration; + use super::test_utils::*; use crate::prelude::client::*; @@ -880,23 +882,25 @@ mod integration_tests { use crate::tests::stepper::BevyStepper; use bevy::prelude::*; - fn increment_component( - mut commands: Commands, - mut query_networked: Query<(Entity, &mut ComponentSyncModeFull), With>, - ) { - for (entity, mut component) in query_networked.iter_mut() { - component.0 += 1.0; - if component.0 == 5.0 { - commands.entity(entity).remove::(); + fn setup(increment_component: bool) -> (BevyStepper, Entity, Entity) { + fn increment_component_system( + mut commands: Commands, + mut query_networked: Query<(Entity, &mut ComponentSyncModeFull), With>, + ) { + for (entity, mut component) in query_networked.iter_mut() { + component.0 += 1.0; + if component.0 == 5.0 { + commands.entity(entity).remove::(); + } } } - } - fn setup() -> (BevyStepper, Entity, Entity) { let mut stepper = BevyStepper::default(); - stepper - .client_app - .add_systems(FixedUpdate, increment_component); + if increment_component { + stepper + .client_app + .add_systems(FixedUpdate, increment_component_system); + } // add predicted/confirmed entities let tick = stepper.client_tick(); let confirmed = stepper @@ -925,6 +929,102 @@ mod integration_tests { (stepper, confirmed, predicted) } + /// Test that: + /// - the `Time` resource's elapsed is rollbacked to the first tick of the rollback + /// - the `Time` resource's elapsed time is advanced correctly during the rollback + /// - the `Time` resource's delta during a rollback is the `Time`'s delta + #[test] + fn test_rollback_time_resource() { + #[derive(Debug, PartialEq)] + struct TimeSnapshot { + is_rollback: bool, + delta: Duration, + elapsed: Duration, + } + + #[derive(Resource, Default, Debug)] + struct TimeTracker { + snapshots: Vec, + } + + // Record the time resource's values for each tick. + fn track_time( + time: Res