Skip to content

Commit 78327ce

Browse files
author
Simeon
authored
Fix bug in the Select method for animatables - did not handle non-animated case. (#416)
Also rationalized the select methods a bit to make them simpler.
1 parent d20bc03 commit 78327ce

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

source/Animatables/Animatable.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,18 @@ public Animatable(T initialValue, IReadOnlyList<KeyFrame<T>> keyFrames)
102102
public bool IsEverNot(T value) => !IsAlways(value);
103103

104104
public Animatable<T> WithTimeOffset(double timeOffset)
105-
=> timeOffset == 0
106-
? this
107-
: new Animatable<T>(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)));
105+
=> timeOffset != 0 || IsAnimated
106+
? new Animatable<T>(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)))
107+
: this;
108108

109109
IAnimatableValue<T> IAnimatableValue<T>.WithTimeOffset(double timeOffset)
110110
=> WithTimeOffset(timeOffset);
111111

112-
public Animatable<T> Select(Func<T, T> selector)
113-
=> new Animatable<T>(KeyFrames.Select(kf => new KeyFrame<T>(kf.Frame, selector(kf.Value), kf.Easing)));
114-
115112
public Animatable<Tnew> Select<Tnew>(Func<T, Tnew> selector)
116113
where Tnew : IEquatable<Tnew>
117-
=> new Animatable<Tnew>(KeyFrames.Select(kf => new KeyFrame<Tnew>(kf.Frame, selector(kf.Value), kf.Easing)));
114+
=> IsAnimated
115+
? new Animatable<Tnew>(KeyFrames.Select(kf => kf.CloneWithNewValue(selector(kf.Value))))
116+
: new Animatable<Tnew>(selector(InitialValue));
118117

119118
/// <inheritdoc/>
120119
// Not a great hash code because it ignore the KeyFrames, but quick.

source/Animatables/AnimatableVector2.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,20 @@ public AnimatableVector2 WithOffset(Vector2 offset)
3030
=> Select(vector2 => vector2 + offset);
3131

3232
public new AnimatableVector2 WithTimeOffset(double timeOffset)
33-
=> timeOffset == 0
34-
? this
35-
: new AnimatableVector2(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)));
33+
=> timeOffset != 0 || IsAnimated
34+
? new AnimatableVector2(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)))
35+
: this;
3636

3737
IAnimatableVector2 IAnimatableVector2.WithOffset(Vector2 offset)
3838
=> WithOffset(offset);
3939

4040
IAnimatableVector2 IAnimatableVector2.WithTimeOffset(double timeOffset)
4141
=> WithTimeOffset(timeOffset);
4242

43-
public new AnimatableVector2 Select(Func<Vector2, Vector2> selector)
43+
public AnimatableVector2 Select(Func<Vector2, Vector2> selector)
4444
=> IsAnimated
45-
? new AnimatableVector2(KeyFrames.Select(kf => new KeyFrame<Vector2>(kf.Frame, selector(kf.Value), kf.Easing)))
46-
: new AnimatableVector2(selector(InitialValue));
45+
? new AnimatableVector2(KeyFrames.Select(kf => kf.CloneWithNewValue(selector(kf.Value))))
46+
: new AnimatableVector2(selector(InitialValue));
4747

4848
/// <inheritdoc/>
4949
public AnimatableVector2Type Type => AnimatableVector2Type.Vector2;

source/Animatables/AnimatableVector3.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@ public AnimatableVector3 WithOffset(Vector2 offset)
3030
=> Select(vector3 => vector3 + new Vector3(offset.X, offset.Y, 0));
3131

3232
public new AnimatableVector3 WithTimeOffset(double timeOffset)
33-
=> timeOffset == 0
34-
? this
35-
: new AnimatableVector3(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)));
33+
=> timeOffset != 0 || IsAnimated
34+
? new AnimatableVector3(KeyFrames.Select(kf => kf.WithTimeOffset(timeOffset)))
35+
: this;
3636

3737
IAnimatableVector3 IAnimatableVector3.WithTimeOffset(double timeOffset)
3838
=> WithTimeOffset(timeOffset);
3939

40-
public new AnimatableVector3 Select(Func<Vector3, Vector3> selector)
41-
=> new AnimatableVector3(KeyFrames.Select(kf => new KeyFrame<Vector3>(kf.Frame, selector(kf.Value), kf.Easing)));
40+
public AnimatableVector3 Select(Func<Vector3, Vector3> selector)
41+
=> IsAnimated
42+
? new AnimatableVector3(KeyFrames.Select(kf => kf.CloneWithNewValue(selector(kf.Value))))
43+
: new AnimatableVector3(selector(InitialValue));
4244

4345
/// <inheritdoc/>
4446
public AnimatableVector3Type Type => AnimatableVector3Type.Vector3;

0 commit comments

Comments
 (0)