12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using System;
- namespace UnityEngine.PostProcessing
- {
-
- [Serializable]
- public sealed class ColorGradingCurve
- {
- public AnimationCurve curve;
- [SerializeField]
- bool m_Loop;
- [SerializeField]
- float m_ZeroValue;
- [SerializeField]
- float m_Range;
- AnimationCurve m_InternalLoopingCurve;
- public ColorGradingCurve(AnimationCurve curve, float zeroValue, bool loop, Vector2 bounds)
- {
- this.curve = curve;
- m_ZeroValue = zeroValue;
- m_Loop = loop;
- m_Range = bounds.magnitude;
- }
- public void Cache()
- {
- if (!m_Loop)
- return;
- var length = curve.length;
- if (length < 2)
- return;
- if (m_InternalLoopingCurve == null)
- m_InternalLoopingCurve = new AnimationCurve();
- var prev = curve[length - 1];
- prev.time -= m_Range;
- var next = curve[0];
- next.time += m_Range;
- m_InternalLoopingCurve.keys = curve.keys;
- m_InternalLoopingCurve.AddKey(prev);
- m_InternalLoopingCurve.AddKey(next);
- }
- public float Evaluate(float t)
- {
- if (curve.length == 0)
- return m_ZeroValue;
- if (!m_Loop || curve.length == 1)
- return curve.Evaluate(t);
- return m_InternalLoopingCurve.Evaluate(t);
- }
- }
- }
|