123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using UnityEngine;
- using UnityEngine.Playables;
- namespace UnityEngine.Timeline
- {
- // The RuntimeClip wraps a single clip in an instantiated sequence.
- // It supports the IInterval interface so that it can be stored in the interval tree
- // It is this class that is returned by an interval tree query.
- 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;
- 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);
- // localTime of the sequence to localtime of the clip
- double clipTime = clip.ToLocalTime(localTime);
- if (clipTime >= -DiscreteTime.tickValue/2 )
- {
- SetTime(clipTime);
- }
- SetDuration(clip.extrapolatedDuration);
- }
- public override void Reset()
- {
- SetTime(m_Clip.clipIn);
- }
- }
- }
|