using System;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Playables;
using UnityEngine.Timeline;

namespace CustomTimeline
{
    [Serializable]
    public class SlowMotionClip : PlayableAsset, ITimelineClipAsset
    {
        public SlowMotionBehaviour template = new SlowMotionBehaviour();

        public SlowMotionBehaviour.SlowMotionAction action;
        public string markerToJumpTo = "", markerLabel = "";
        public ExposedReference<SlowMotionCondition> event_Method;
        public float minTimelineSpeed = 0.1f;
        public float lerpSpeed = 1.0f;

        public ClipCaps clipCaps
        {
            get { return ClipCaps.Extrapolation | ClipCaps.Blending; }
        }

        public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
        {
            var playable = ScriptPlayable<SlowMotionBehaviour>.Create(graph, template);

            SlowMotionBehaviour clone = playable.GetBehaviour();
            clone.markerToJumpTo = markerToJumpTo;
            clone.action = action;
            clone.markerLabel = markerLabel;
            clone.minTimelineSpeed = minTimelineSpeed;
            clone.lerpSpeed = lerpSpeed;

            clone.event_Method = event_Method.Resolve(graph.GetResolver());

            return playable;
        }
    }
}