157 lines
3.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|