| 123456789101112131415161718192021222324252627282930313233343536 | 
							- using System;
 
- using UnityEngine;
 
- using UnityEngine.Playables;
 
- namespace UnityUIPlayables
 
- {
 
-     [Serializable]
 
-     public abstract class AnimationBehaviour : PlayableBehaviour
 
-     {
 
-         [SerializeField] [Tooltip("When set to zero, the length of one loop equals the length of the clip.")]
 
-         private float _loopDuration;
 
-         [SerializeField] private LoopType _loopType;
 
-         [SerializeField] private Curve _curve;
 
-         private readonly CurveEvaluateService _evaluateService = new();
 
-         public float LoopDuration => _loopDuration;
 
-         public LoopType LoopType => _loopType;
 
-         public Curve Curve => _curve;
 
-         public float EvaluateCurve(float time, float duration)
 
-         {
 
-             var loopDuration = _loopDuration > 0 ? _loopDuration : duration;
 
-             return _loopType switch
 
-             {
 
-                 LoopType.Repeat => _evaluateService.EvaluateRepeat(_curve, time, loopDuration),
 
-                 LoopType.Reverse => _evaluateService.EvaluateReverse(_curve, time, loopDuration),
 
-                 LoopType.PingPong => _evaluateService.EvaluatePingPong(_curve, time, loopDuration),
 
-                 _ => throw new ArgumentOutOfRangeException()
 
-             };
 
-         }
 
-     }
 
- }
 
 
  |