75 lines
2.0 KiB
C#
75 lines
2.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace Febucci.UI.Core
|
|
{
|
|
[System.Serializable]
|
|
internal class FloatCurve : EffectEvaluator
|
|
{
|
|
#pragma warning disable 0649 //disabling the error or unity will throw "field is never assigned" [..], because we actually assign the variables from the custom drawers
|
|
public bool enabled;
|
|
|
|
[SerializeField] protected float amplitude;
|
|
[SerializeField] protected AnimationCurve curve;
|
|
|
|
[SerializeField, HideInInspector] protected float defaultReturn;
|
|
|
|
[SerializeField, Range(0, 100)] protected float charsTimeOffset; //clamping to 100 because it repeates the behavior after it
|
|
|
|
[System.NonSerialized] float calculatedDuration;
|
|
#pragma warning restore 0649
|
|
|
|
public bool isEnabled => enabled;
|
|
|
|
public float GetDuration()
|
|
{
|
|
return calculatedDuration;
|
|
}
|
|
|
|
bool isAppearance;
|
|
|
|
public void Initialize(int type)
|
|
{
|
|
calculatedDuration = curve.CalculateCurveDuration();
|
|
|
|
isAppearance = type >= 3;
|
|
|
|
switch (type)
|
|
{
|
|
//mov
|
|
default:
|
|
case 0: defaultReturn = 0; break;
|
|
|
|
//scale
|
|
case 1: defaultReturn = 1; break;
|
|
|
|
//rot
|
|
case 2: defaultReturn = 0; break;
|
|
|
|
//app mov
|
|
case 3: defaultReturn = 0; break;
|
|
|
|
//app scale
|
|
case 4: defaultReturn = 1; break;
|
|
|
|
//app rot
|
|
case 5: defaultReturn = 0; break;
|
|
|
|
}
|
|
}
|
|
|
|
public float Evaluate(float time, int characterIndex)
|
|
{
|
|
if (!enabled)
|
|
return defaultReturn;
|
|
|
|
if (isAppearance)
|
|
{
|
|
return Mathf.LerpUnclamped(amplitude, defaultReturn, curve.Evaluate(time) * Mathf.Cos(Mathf.Deg2Rad * (characterIndex * charsTimeOffset / 2f)));
|
|
}
|
|
|
|
|
|
//behavior
|
|
return curve.Evaluate(time + characterIndex * (charsTimeOffset / 100f)) * amplitude;
|
|
}
|
|
}
|
|
} |