@@ -8,6 +8,7 @@ public sealed class KeyframeCollection : IReadOnlyList<Keyframe>
88
99 public KeyframeCollection ( ) => _items = [ ] ;
1010 public KeyframeCollection ( int capacity ) => _items = new List < Keyframe > ( capacity ) ;
11+ public KeyframeCollection ( IEnumerable < Keyframe > collection ) => _items = new List < Keyframe > ( collection . Order ( KeyframePositionComparer . Default ) . DistinctBy ( x => x . Position ) ) ;
1112
1213 public void Add ( Keyframe keyframe ) => Add ( keyframe . Position , keyframe . Value ) ;
1314 public void Add ( TimeSpan position , double value ) => Add ( position . TotalSeconds , value ) ;
@@ -58,22 +59,22 @@ Keyframe TakeOrExtrapolate(int index, Keyframe p0, Keyframe p1)
5859 return Interpolation . Linear ( p0 . Position , p0 . Value , p1 . Position , p1 . Value , position ) ;
5960
6061 case InterpolationType . Pchip :
61- {
62- var pm1 = TakeOrExtrapolate ( index - 1 , p1 , p0 ) ;
63- var pp1 = TakeOrExtrapolate ( index + 2 , p0 , p1 ) ;
62+ {
63+ var pm1 = TakeOrExtrapolate ( index - 1 , p1 , p0 ) ;
64+ var pp1 = TakeOrExtrapolate ( index + 2 , p0 , p1 ) ;
6465
65- return Interpolation . Pchip ( pm1 . Position , pm1 . Value , p0 . Position , p0 . Value , p1 . Position , p1 . Value , pp1 . Position , pp1 . Value , position ) ;
66- }
66+ return Interpolation . Pchip ( pm1 . Position , pm1 . Value , p0 . Position , p0 . Value , p1 . Position , p1 . Value , pp1 . Position , pp1 . Value , position ) ;
67+ }
6768
6869 case InterpolationType . Makima :
69- {
70- var pm1 = TakeOrExtrapolate ( index - 1 , p1 , p0 ) ;
71- var pm2 = TakeOrExtrapolate ( index - 2 , pm1 , p1 ) ;
72- var pp1 = TakeOrExtrapolate ( index + 2 , p0 , p1 ) ;
73- var pp2 = TakeOrExtrapolate ( index + 3 , p1 , pp1 ) ;
70+ {
71+ var pm1 = TakeOrExtrapolate ( index - 1 , p1 , p0 ) ;
72+ var pm2 = TakeOrExtrapolate ( index - 2 , pm1 , p1 ) ;
73+ var pp1 = TakeOrExtrapolate ( index + 2 , p0 , p1 ) ;
74+ var pp2 = TakeOrExtrapolate ( index + 3 , p1 , pp1 ) ;
7475
75- return Interpolation . Makima ( pm2 . Position , pm2 . Value , pm1 . Position , pm1 . Value , p0 . Position , p0 . Value , p1 . Position , p1 . Value , pp1 . Position , pp1 . Value , pp2 . Position , pp2 . Value , position ) ;
76- }
76+ return Interpolation . Makima ( pm2 . Position , pm2 . Value , pm1 . Position , pm1 . Value , p0 . Position , p0 . Value , p1 . Position , p1 . Value , pp1 . Position , pp1 . Value , pp2 . Position , pp2 . Value , position ) ;
77+ }
7778
7879 case InterpolationType . Step :
7980 return Interpolation . Step ( p0 . Position , p0 . Value , position ) ;
@@ -138,7 +139,7 @@ public override bool Equals(object obj)
138139 public override int GetHashCode ( )
139140 {
140141 var result = new HashCode ( ) ;
141- foreach ( var item in _items )
142+ foreach ( var item in _items )
142143 result . Add ( item . GetHashCode ( ) ) ;
143144 return result . ToHashCode ( ) ;
144145 }
0 commit comments