| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using UnityEngine;
- namespace Cinemachine
- {
- /// <summary>
- /// A definition of an impulse signal that gets propagated to listeners
- /// </summary>
- [DocumentationSorting(DocumentationSortingAttribute.Level.UserRef)]
- [HelpURL(Documentation.BaseURL + "manual/CinemachineImpulseFixedSignals.html")]
- public class CinemachineFixedSignal : SignalSourceAsset
- {
- /// <summary>The raw signal shape along the X axis</summary>
- [Tooltip("The raw signal shape along the X axis")]
- public AnimationCurve m_XCurve;
- /// <summary>The raw signal shape along the Y axis</summary>
- [Tooltip("The raw signal shape along the Y axis")]
- public AnimationCurve m_YCurve;
- /// <summary>The raw signal shape along the Z axis</summary>
- [Tooltip("The raw signal shape along the Z axis")]
- public AnimationCurve m_ZCurve;
- /// <summary>
- /// Returns the length on seconds of the signal.
- /// Returns 0 for signals of indeterminate length.
- /// </summary>
- public override float SignalDuration
- {
- get
- {
- return Mathf.Max(
- AxisDuration(m_XCurve),
- Mathf.Max(AxisDuration(m_YCurve), AxisDuration(m_ZCurve)));
- }
- }
- float AxisDuration(AnimationCurve axis)
- {
- float duration = 0;
- if (axis != null && axis.length > 1)
- {
- float start = axis[0].time;
- duration = axis[axis.length-1].time - start;
- }
- return duration;
- }
-
- /// <summary>Get the raw signal at this time</summary>
- /// <param name="timeSinceSignalStart">The time since in seconds since the start of the signal</param>
- /// <param name="pos">The position impulse signal</param>
- /// <param name="rot">The rotation impulse signal</param>
- public override void GetSignal(float timeSinceSignalStart, out Vector3 pos, out Quaternion rot)
- {
- rot = Quaternion.identity;
- pos = new Vector3(
- AxisValue(m_XCurve, timeSinceSignalStart),
- AxisValue(m_YCurve, timeSinceSignalStart),
- AxisValue(m_ZCurve, timeSinceSignalStart));
- }
- float AxisValue(AnimationCurve axis, float time)
- {
- if (axis == null || axis.length == 0)
- return 0;
- return axis.Evaluate(time);
- }
- }
- }
|