Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/FishPartAnim.cs
2026-02-21 16:45:37 +08:00

157 lines
3.5 KiB
C#

using BitStrap;
using UnityEngine;
public class FishPartAnim : MonoBehaviour
{
public FishPartAnimParent fishPartAnimParent;
public float duration = 0.3f;
public float durationShakeFactor = 0.15f;
public bool updatePosition;
public bool useX = true;
public bool useY = true;
public bool useZ = true;
public Vector3 startRotation = Vector3.zero;
public Vector3 finishRotation = Vector3.zero;
public AnimationCurve curve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
[ReadOnly]
public float currentDuration = 0.3f;
[ReadOnly]
public float timer;
[ReadOnly]
public float direction = 1f;
public bool useMultiplier = true;
public float multiplier = 1f;
[Space(10f)]
public bool unscaledTime = true;
public bool updateInEditor;
public float fakeValue;
private double lastTime;
[HideInInspector]
public FishAnimationController fishAnimationController;
private void Start()
{
if (Application.isPlaying || updateInEditor)
{
SetStartValue(true);
currentDuration = duration;
}
}
private void Update()
{
if ((!Application.isPlaying && !updateInEditor) || ((bool)fishPartAnimParent && (!fishPartAnimParent.enabled || fishPartAnimParent.currentDuration == 0f)))
{
return;
}
Vector3 zero = Vector3.zero;
if ((bool)fishPartAnimParent)
{
zero = Vector3.Lerp(startRotation, finishRotation, curve.Evaluate(fishPartAnimParent.timer / fishPartAnimParent.currentDuration)) * ((!useMultiplier) ? 1f : fishPartAnimParent.currentMultiplier);
}
else
{
if (Application.isPlaying)
{
if (Time.unscaledDeltaTime < 1f)
{
if (unscaledTime)
{
timer += direction * Time.unscaledDeltaTime;
}
else
{
timer += direction * Time.deltaTime;
}
}
}
else if (!updateInEditor)
{
}
zero = Vector3.Lerp(startRotation, finishRotation * ((!useMultiplier) ? 1f : multiplier), curve.Evaluate(timer / currentDuration));
if ((timer > currentDuration && direction > 0f) || (timer < 0f && direction < 0f))
{
timer = Mathf.Clamp(timer, 0f, currentDuration);
direction *= -1f;
currentDuration = duration + Random.Range((0f - duration) * durationShakeFactor, duration * durationShakeFactor);
}
}
if (!useX)
{
zero.x = ((!updatePosition) ? base.transform.localEulerAngles.x : base.transform.localPosition.x);
}
if (!useY)
{
zero.y = ((!updatePosition) ? base.transform.localEulerAngles.y : base.transform.localPosition.y);
}
if (!useZ)
{
zero.z = ((!updatePosition) ? base.transform.localEulerAngles.z : base.transform.localPosition.z);
}
if (updatePosition)
{
base.transform.localPosition = zero;
}
else
{
base.transform.localEulerAngles = zero;
}
}
[Button]
public void ResetRotation()
{
startRotation = (finishRotation = ((!updatePosition) ? base.transform.localEulerAngles : base.transform.localPosition));
}
public void Reset()
{
timer = 0f;
}
public void SetStartValue(bool start)
{
Vector3 zero = Vector3.zero;
zero = ((!updatePosition) ? ((!start) ? finishRotation : startRotation) : ((!start) ? finishRotation : startRotation));
if (!useX)
{
zero.x = ((!updatePosition) ? base.transform.localEulerAngles.x : base.transform.localPosition.x);
}
if (!useY)
{
zero.y = ((!updatePosition) ? base.transform.localEulerAngles.y : base.transform.localPosition.y);
}
if (!useZ)
{
zero.z = ((!updatePosition) ? base.transform.localEulerAngles.z : base.transform.localPosition.z);
}
if (updatePosition)
{
base.transform.localPosition = zero;
}
else
{
base.transform.localEulerAngles = zero;
}
}
}