Skip to content

Commit 657e4a7

Browse files
djeedaiazarmadr
authored andcommitted
Revert "Carry time delta between tweens in a Sequence (djeedai#39)"
This reverts commit 77b56f4.
1 parent 2a5c06c commit 657e4a7

File tree

1 file changed

+15
-52
lines changed

1 file changed

+15
-52
lines changed

src/tweenable.rs

Lines changed: 15 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -650,26 +650,28 @@ impl<T> Tweenable<T> for Sequence<T> {
650650

651651
fn tick(
652652
&mut self,
653-
mut delta: Duration,
653+
delta: Duration,
654654
target: &mut T,
655655
entity: Entity,
656656
event_writer: &mut EventWriter<TweenCompleted>,
657657
) -> TweenState {
658-
self.time = (self.time + delta).min(self.duration);
659-
while self.index < self.tweens.len() {
658+
if self.index < self.tweens.len() {
659+
let mut state = TweenState::Active;
660+
self.time = (self.time + delta).min(self.duration);
660661
let tween = &mut self.tweens[self.index];
661-
let tween_remaining = tween.duration().mul_f32(1.0 - tween.progress());
662-
if let TweenState::Active = tween.tick(delta, target, entity, event_writer) {
663-
return TweenState::Active;
662+
let tween_state = tween.tick(delta, target, entity, event_writer);
663+
if tween_state == TweenState::Completed {
664+
tween.rewind();
665+
self.index += 1;
666+
if self.index >= self.tweens.len() {
667+
state = TweenState::Completed;
668+
self.times_completed = 1;
669+
}
664670
}
665-
666-
tween.rewind();
667-
delta -= tween_remaining;
668-
self.index += 1;
671+
state
672+
} else {
673+
TweenState::Completed
669674
}
670-
671-
self.times_completed = 1;
672-
TweenState::Completed
673675
}
674676

675677
fn times_completed(&self) -> u32 {
@@ -1263,45 +1265,6 @@ mod tests {
12631265
}
12641266
}
12651267

1266-
/// Test crossing tween boundaries in one tick.
1267-
#[test]
1268-
fn seq_tick_boundaries() {
1269-
let mut seq = Sequence::new((0..3).map(|i| {
1270-
Tween::new(
1271-
EaseMethod::Linear,
1272-
TweeningType::Once,
1273-
Duration::from_secs(1),
1274-
TransformPositionLens {
1275-
start: Vec3::splat(i as f32),
1276-
end: Vec3::splat((i + 1) as f32),
1277-
},
1278-
)
1279-
}));
1280-
let mut transform = Transform::default();
1281-
1282-
// Dummy world and event writer
1283-
let mut world = World::new();
1284-
world.insert_resource(Events::<TweenCompleted>::default());
1285-
let mut system_state: SystemState<EventWriter<TweenCompleted>> =
1286-
SystemState::new(&mut world);
1287-
let mut event_writer = system_state.get_mut(&mut world);
1288-
1289-
// Tick halfway through the first tween, then in one tick:
1290-
// - Finish the first tween
1291-
// - Start and finish the second tween
1292-
// - Start the third tween
1293-
for delta in [0.5, 2.0] {
1294-
seq.tick(
1295-
Duration::from_secs_f32(delta),
1296-
&mut transform,
1297-
Entity::from_raw(0),
1298-
&mut event_writer,
1299-
);
1300-
}
1301-
assert_eq!(seq.index(), 2);
1302-
assert!(transform.translation.abs_diff_eq(Vec3::splat(2.5), 1e-5));
1303-
}
1304-
13051268
/// Sequence::new() and various Sequence-specific methods
13061269
#[test]
13071270
fn seq_iter() {

0 commit comments

Comments
 (0)