/
AlembicShotPlayable.cs
80 lines (66 loc) · 2.51 KB
/
AlembicShotPlayable.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#if UNITY_2017_1_OR_NEWER
using System;
using UnityEngine.Playables;
namespace UTJ.Alembic
{
public class AlembicShotPlayable : PlayableBehaviour
{
AlembicStreamPlayer m_StreamPlayer;
public AlembicStreamPlayer streamPlayer
{
get
{
return m_StreamPlayer;
}
set
{
m_StreamPlayer = value;
if( m_StreamPlayer != null )
m_StreamPlayer.m_ManualUpdateMode = true;
}
}
bool m_RestoreState = false;
bool m_OrgState;
public float m_StartTimeOffset;
public float m_EndTimeClipOff;
public float m_TimeScale;
public bool m_AutoActivateTarget;
public AlembicPlaybackSettings.CycleType m_Cycle = AlembicPlaybackSettings.CycleType.Hold;
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
{
base.ProcessFrame(playable, info, playerData);
if (streamPlayer == null)
return;
streamPlayer.m_PlaybackSettings.m_startTime = 0f;
streamPlayer.m_PlaybackSettings.m_cycle = m_Cycle;
streamPlayer.m_PlaybackSettings.m_timeOffset = (float)m_StartTimeOffset;
streamPlayer.m_PlaybackSettings.m_endTime = (float)streamPlayer.m_PlaybackSettings.m_duration - m_EndTimeClipOff;
streamPlayer.m_PlaybackSettings.m_timeScale = (float)m_TimeScale;
streamPlayer.m_PlaybackSettings.m_Time = (float)playable.GetTime();
streamPlayer.m_PlaybackSettings.m_OverrideTime = true;
streamPlayer.m_PlaybackSettings.m_preserveStartTime = true;
streamPlayer.ManualUpdate();
}
public override void OnBehaviourPlay(Playable playable, FrameData info)
{
base.OnBehaviourPlay(playable, info);
if (streamPlayer == null)
return;
if (m_AutoActivateTarget)
{
m_RestoreState = true;
m_OrgState = streamPlayer.gameObject.activeInHierarchy;
streamPlayer.gameObject.SetActive(true);
}
}
public override void OnBehaviourPause(Playable playable, FrameData info)
{
base.OnBehaviourPause(playable, info);
if (streamPlayer == null)
return;
if( m_AutoActivateTarget && m_RestoreState )
streamPlayer.gameObject.SetActive(m_OrgState);
}
}
}
#endif