| using System; |
| using UnityEngine; |
| using UnityEngine.Playables; |
|
|
| namespace UnityEngine.Timeline |
| { |
| |
| |
| |
| class RuntimeClip : RuntimeClipBase |
| { |
| TimelineClip m_Clip; |
| Playable m_Playable; |
| Playable m_ParentMixer; |
|
|
| public override double start |
| { |
| get { return m_Clip.extrapolatedStart; } |
| } |
|
|
| public override double duration |
| { |
| get { return m_Clip.extrapolatedDuration; } |
| } |
|
|
| public RuntimeClip(TimelineClip clip, Playable clipPlayable, Playable parentMixer) |
| { |
| Create(clip, clipPlayable, parentMixer); |
| } |
|
|
| void Create(TimelineClip clip, Playable clipPlayable, Playable parentMixer) |
| { |
| m_Clip = clip; |
| m_Playable = clipPlayable; |
| m_ParentMixer = parentMixer; |
| clipPlayable.Pause(); |
| } |
|
|
| public TimelineClip clip |
| { |
| get { return m_Clip; } |
| } |
|
|
| public Playable mixer |
| { |
| get { return m_ParentMixer; } |
| } |
|
|
| public Playable playable |
| { |
| get { return m_Playable; } |
| } |
|
|
| public override bool enable |
| { |
| set |
| { |
| if (value && m_Playable.GetPlayState() != PlayState.Playing) |
| { |
| m_Playable.Play(); |
| SetTime(m_Clip.clipIn); |
| } |
| else if (!value && m_Playable.GetPlayState() != PlayState.Paused) |
| { |
| m_Playable.Pause(); |
| if (m_ParentMixer.IsValid()) |
| m_ParentMixer.SetInputWeight(m_Playable, 0.0f); |
| } |
| } |
| } |
|
|
| public void SetTime(double time) |
| { |
| m_Playable.SetTime(time); |
| } |
|
|
| public void SetDuration(double duration) |
| { |
| m_Playable.SetDuration(duration); |
| } |
|
|
| public override void EvaluateAt(double localTime, FrameData frameData) |
| { |
| enable = true; |
| if (frameData.timeLooped) |
| { |
| |
| SetTime(clip.clipIn); |
| SetTime(clip.clipIn); |
| } |
|
|
| float weight = 1.0f; |
| if (clip.IsPreExtrapolatedTime(localTime)) |
| weight = clip.EvaluateMixIn((float)clip.start); |
| else if (clip.IsPostExtrapolatedTime(localTime)) |
| weight = clip.EvaluateMixOut((float)clip.end); |
| else |
| weight = clip.EvaluateMixIn(localTime) * clip.EvaluateMixOut(localTime); |
|
|
| if (mixer.IsValid()) |
| mixer.SetInputWeight(playable, weight); |
|
|
| |
| double clipTime = clip.ToLocalTime(localTime); |
| if (clipTime >= -DiscreteTime.tickValue / 2) |
| { |
| SetTime(clipTime); |
| } |
|
|
| SetDuration(clip.extrapolatedDuration); |
| } |
|
|
| public override void DisableAt(double localTime, double rootDuration, FrameData frameData) |
| { |
| var time = Math.Min(localTime, (double)DiscreteTime.FromTicks(intervalEnd)); |
| if (frameData.timeLooped) |
| time = Math.Min(time, rootDuration); |
|
|
| var clipTime = clip.ToLocalTime(time); |
| if (clipTime > -DiscreteTime.tickValue / 2) |
| { |
| SetTime(clipTime); |
| } |
| enable = false; |
| } |
| } |
| } |
|
|