r2mods/ilspy_dump/ror2_csproj/RoR2/ObjectTransformCurve.cs

88 lines
1.8 KiB
C#

using UnityEngine;
namespace RoR2;
public class ObjectTransformCurve : MonoBehaviour
{
public bool useRotationCurves;
public bool useTranslationCurves;
public bool loop;
public bool randomizeInitialTime;
public AnimationCurve rotationCurveX;
public AnimationCurve rotationCurveY;
public AnimationCurve rotationCurveZ;
public AnimationCurve translationCurveX;
public AnimationCurve translationCurveY;
public AnimationCurve translationCurveZ;
public float timeMax = 5f;
public float time { get; set; }
public Vector3 basePosition { get; private set; }
public Quaternion baseRotation { get; private set; }
private void Awake()
{
basePosition = base.transform.localPosition;
baseRotation = base.transform.localRotation;
Reset();
}
private void OnEnable()
{
Reset();
}
public void Reset()
{
time = 0f;
if (randomizeInitialTime)
{
time = Random.Range(0f, timeMax);
}
UpdateTransform(time);
}
private void Update()
{
time += Time.deltaTime;
if (loop && time > timeMax)
{
time %= timeMax;
}
UpdateTransform(time);
}
private void UpdateTransform(float time)
{
Vector3 vector = basePosition;
Quaternion quaternion = baseRotation;
float num = ((timeMax > 0f) ? Mathf.Clamp01(time / timeMax) : 0f);
if (useRotationCurves)
{
if (rotationCurveX == null || rotationCurveY == null || rotationCurveZ == null)
{
return;
}
quaternion = Quaternion.Euler(rotationCurveX.Evaluate(num), rotationCurveY.Evaluate(num), rotationCurveZ.Evaluate(num));
base.transform.localRotation = quaternion;
}
if (useTranslationCurves && translationCurveX != null && translationCurveY != null && translationCurveZ != null)
{
vector = new Vector3(translationCurveX.Evaluate(num), translationCurveY.Evaluate(num), translationCurveZ.Evaluate(num));
base.transform.localPosition = vector;
}
}
}