@@ -53,6 +53,14 @@ public class TweenClass : ISlimRegister
5353 /// </summary>
5454 protected ISlimTween islim => this as ISlimTween ;
5555 protected ISlimRegister ireg => this as ISlimRegister ;
56+ TweenMode ISlimRegister . TweenMode
57+ {
58+ get => islim . TweenMode ;
59+ set
60+ {
61+ islim . TweenMode = value ;
62+ }
63+ }
5664 /// <summary>The tween state of this instance.</summary>
5765 protected TweenState state = TweenState . None ;
5866 /// <summary>The on update function.</summary>
@@ -335,7 +343,7 @@ protected void Clear()
335343 if ( this is ISlimTween sl )
336344 {
337345 RemoveFromTransformPool ( tprops . id ) ;
338- sl . CombineMode = false ;
346+ sl . TweenMode = TweenMode . Tweeen ;
339347 }
340348
341349 TweenManager . RemoveFromActiveTween ( this ) ;
@@ -426,11 +434,11 @@ protected void PoolTransformID(int id)
426434 if ( TryUpdateCounterTransform ( id , true ) )
427435 {
428436 islim . BackupPreviousPosition ( ) ;
429- islim . CombineMode = true ;
437+ islim . TweenMode = TweenMode . Combine ;
430438
431439 if ( TweenExtension . GetTween ( id , out var tween ) )
432440 {
433- ( tween as ISlimTween ) . CombineMode = true ;
441+ ( tween as ISlimTween ) . TweenMode = TweenMode . Combine ;
434442 }
435443 }
436444 else
@@ -625,6 +633,7 @@ public void SetLerpType()
625633 /// </summary>
626634 public interface ISlimRegister
627635 {
636+ public TweenMode TweenMode { get ; set ; }
628637 public bool FlipTickIs { get ; }
629638 /// <summary> An object can only be revived once and MUST NOT be pooled.</summary>
630639 public bool wasResurected { get ; set ; }
@@ -668,11 +677,11 @@ public SlimTransform()
668677 TransformType type = TransformType . None ;
669678 /// <summary>Locality.</summary>
670679 bool isLocal = false ;
671- bool combineMode ;
672- bool ISlimTween . CombineMode
680+ TweenMode tweenMode ;
681+ TweenMode ISlimTween . TweenMode
673682 {
674- get => combineMode ;
675- set => combineMode = value ;
683+ get => tweenMode ;
684+ set => tweenMode = value ;
676685 }
677686 /// <summary>Locality.</summary>
678687 bool ISlimTween . Locality { get => isLocal ; set => isLocal = value ; }
@@ -681,12 +690,12 @@ bool ISlimTween.CombineMode
681690 protected override void InternalOnComplete ( )
682691 {
683692 InvokeLerps ( tprops . pingpong ? 0f : 1f ) ;
684- combineMode = false ;
693+ tweenMode = TweenMode . Tweeen ;
685694 }
686695 ///<summary>Resets properties shuffle from/to value.</summary>
687696 protected override void ResetLoop ( )
688697 {
689- if ( combineMode && GetTransformCount ( tprops . id ) == 1 )
698+ if ( tweenMode == TweenMode . Combine && GetTransformCount ( tprops . id ) == 1 )
690699 {
691700 islim . RestorePreviousPosition ( ) ;
692701 }
@@ -698,7 +707,7 @@ protected override void InternalOnUpdate()
698707 {
699708 base . InternalOnUpdate ( ) ;
700709
701- if ( combineMode )
710+ if ( tweenMode == TweenMode . Combine )
702711 {
703712 islim . UpdateTransform ( ) ;
704713 }
@@ -734,7 +743,7 @@ void ISlimTween.UpdateTransform()
734743 {
735744 if ( type == TransformType . Move || type == TransformType . Translate )
736745 {
737- if ( ! combineMode )
746+ if ( tweenMode != TweenMode . Combine )
738747 {
739748 interp . SetFrom ( ! isLocal ? transform . position : transform . localPosition ) ;
740749 }
@@ -744,8 +753,7 @@ void ISlimTween.UpdateTransform()
744753 // Calculate weighted average of the positions
745754 //Vector3 weightedAverage = interp.from * (1 - weight) + transform.position * weight;
746755 //interp.SetFrom(Vector3.Lerp(interp.from, Vector3.Lerp(weightedAverage, interp.to, tick), tick));
747- var a = Vector3 . LerpUnclamped ( interp . from , transform . position , tick ) ;
748- var b = Vector3 . LerpUnclamped ( interp . previousPos , a , tick ) ;
756+ var b = Vector3 . LerpUnclamped ( interp . previousPos , Vector3 . LerpUnclamped ( interp . from , transform . position , tick ) , tick ) ;
749757 interp . SetFrom ( b ) ;
750758 }
751759 }
@@ -768,7 +776,7 @@ void ISlimTween.BackupPreviousPosition()
768776 }
769777 void ISlimTween . RestorePreviousPosition ( )
770778 {
771- combineMode = false ;
779+ tweenMode = TweenMode . Tweeen ;
772780 interp . SetFrom ( interp . previousPos ) ;
773781 }
774782 ( Vector3 from , Vector3 to ) ISlimTween . FromTo { get { return ( interp . from , interp . to ) ; } set { interp . SetFrom ( value . from ) ; interp . SetTo ( value . to ) ; } }
@@ -898,11 +906,11 @@ public SlimRect()
898906 TransformType type = TransformType . None ;
899907 /// <summary>Locality.</summary>
900908 bool isLocal = false ;
901- bool combineMode ;
902- bool ISlimTween . CombineMode
909+ TweenMode tweenMode ;
910+ TweenMode ISlimTween . TweenMode
903911 {
904- get => combineMode ;
905- set => combineMode = value ;
912+ get => tweenMode ;
913+ set => tweenMode = value ;
906914 }
907915 ( Vector3 from , Vector3 to ) ISlimTween . FromTo { get { return ( interp . from , interp . to ) ; } set { interp . SetFrom ( value . from ) ; interp . SetTo ( value . to ) ; } }
908916 bool ISlimTween . Locality { get => isLocal ; set => isLocal = value ; }
@@ -984,7 +992,7 @@ protected override void InternalOnComplete()
984992 ///<summary>Resets properties shuffle from/to value.</summary>
985993 protected override void ResetLoop ( )
986994 {
987- if ( combineMode && GetTransformCount ( tprops . id ) == 1 )
995+ if ( tweenMode == TweenMode . Combine && GetTransformCount ( tprops . id ) == 1 )
988996 {
989997 islim . RestorePreviousPosition ( ) ;
990998 }
@@ -996,7 +1004,7 @@ protected override void InternalOnUpdate()
9961004 {
9971005 base . InternalOnUpdate ( ) ;
9981006
999- if ( combineMode )
1007+ if ( tweenMode == TweenMode . Combine )
10001008 {
10011009 islim . UpdateTransform ( ) ;
10021010 }
@@ -1034,14 +1042,13 @@ void ISlimTween.UpdateTransform()
10341042 {
10351043 if ( type == TransformType . Move )
10361044 {
1037- if ( ! combineMode )
1045+ if ( tweenMode != TweenMode . Combine )
10381046 {
10391047 interp . SetFrom ( ! isLocal ? transform . position : transform . localPosition ) ;
10401048 }
10411049 else
10421050 {
1043- var a = Vector3 . LerpUnclamped ( interp . from , transform . position , tick ) ;
1044- var b = Vector3 . LerpUnclamped ( interp . previousPos , a , tick ) ;
1051+ var b = Vector3 . LerpUnclamped ( interp . previousPos , Vector3 . LerpUnclamped ( interp . from , transform . position , tick ) , tick ) ;
10451052 interp . SetFrom ( b ) ;
10461053 }
10471054 }
@@ -1071,7 +1078,7 @@ void ISlimTween.BackupPreviousPosition()
10711078 }
10721079 void ISlimTween . RestorePreviousPosition ( )
10731080 {
1074- combineMode = false ;
1081+ tweenMode = TweenMode . Tweeen ;
10751082 interp . SetFrom ( interp . previousPos ) ;
10761083 }
10771084 /// <summary>Interpoaltes world position.</summary>
@@ -1139,7 +1146,7 @@ void LerpSizeAnchored(float value)
11391146 public interface ISlimTween
11401147 {
11411148 public bool Locality { get ; set ; }
1142- public bool CombineMode { get ; set ; }
1149+ public TweenMode TweenMode { get ; set ; }
11431150 public TransformType GetTransformType { get ; set ; }
11441151 public void UpdateTransform ( ) ;
11451152 public void BackupPreviousPosition ( ) ;
@@ -1224,6 +1231,12 @@ public Vector3 Interpolate(float tick)
12241231 }
12251232
12261233 }
1234+ public enum TweenMode
1235+ {
1236+ Combine ,
1237+ Queue ,
1238+ Tweeen
1239+ }
12271240 /// <summary>
12281241 ///
12291242 public struct TFloat6
0 commit comments