Add utils + refacto
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
using UnityEngine;
|
||||
using TMPro;
|
||||
|
||||
namespace Unheimlich.Utility
|
||||
{
|
||||
public static class TweenHelper
|
||||
{
|
||||
public static int FadeCanvasGroup(CanvasGroup canvasGroup, float targetAlpha,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInQuad)
|
||||
{
|
||||
if (canvasGroup == null) return -1;
|
||||
|
||||
LeanTween.cancel(canvasGroup.gameObject);
|
||||
return LeanTween.alphaCanvas(canvasGroup, targetAlpha, duration)
|
||||
.setEase(easeType)
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int FadeText(TextMeshProUGUI text, float targetAlpha,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInQuad)
|
||||
{
|
||||
return FadeText(text?.gameObject, text, null, targetAlpha, duration, 1f, onComplete, easeType);
|
||||
}
|
||||
|
||||
public static int FadeText(GameObject targetObject, TextMeshProUGUI mainText,
|
||||
TextMeshProUGUI ghostText, float targetAlpha, float duration,
|
||||
float ghostAlphaRatio, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInQuad)
|
||||
{
|
||||
if (mainText == null || targetObject == null) return -1;
|
||||
|
||||
float startAlpha = mainText.color.a;
|
||||
LeanTween.cancel(targetObject);
|
||||
|
||||
return LeanTween.value(targetObject, startAlpha, targetAlpha, duration)
|
||||
.setEase(easeType)
|
||||
.setOnUpdate((float val) => {
|
||||
if (mainText != null)
|
||||
{
|
||||
Color c = mainText.color;
|
||||
c.a = val;
|
||||
mainText.color = c;
|
||||
}
|
||||
|
||||
if (ghostText != null)
|
||||
{
|
||||
Color gc = ghostText.color;
|
||||
gc.a = val * ghostAlphaRatio;
|
||||
ghostText.color = gc;
|
||||
}
|
||||
})
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int ScaleLocal(GameObject target, Vector3 targetScale,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInOutQuad)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
return LeanTween.scale(target, targetScale, duration)
|
||||
.setEase(easeType)
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int MoveLocal(GameObject target, Vector3 targetPosition,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInOutQuad)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
return LeanTween.moveLocal(target, targetPosition, duration)
|
||||
.setEase(easeType)
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int RotateLocal(GameObject target, Vector3 targetRotation,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInOutQuad)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
return LeanTween.rotate(target, targetRotation, duration)
|
||||
.setEase(easeType)
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int MoveLocalWithCurve(GameObject target, Vector3 targetPosition,
|
||||
float duration, AnimationCurve curve, System.Action onComplete = null)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
return LeanTween.moveLocal(target, targetPosition, duration)
|
||||
.setEase(curve)
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int FadeVolume(AudioSource source, float targetVolume,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInOutQuad)
|
||||
{
|
||||
if (source == null) return -1;
|
||||
|
||||
GameObject sourceObject = source.gameObject;
|
||||
LeanTween.cancel(sourceObject);
|
||||
|
||||
return LeanTween.value(sourceObject, source.volume, targetVolume, duration)
|
||||
.setEase(easeType)
|
||||
.setOnUpdate((float val) => {
|
||||
if (source != null)
|
||||
source.volume = val;
|
||||
})
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int FadeVolume(GameObject target, float targetVolume,
|
||||
float duration, System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.linear)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
float startVolume = AudioListener.volume;
|
||||
LeanTween.cancel(target);
|
||||
|
||||
return LeanTween.value(target, startVolume, targetVolume, duration)
|
||||
.setEase(easeType)
|
||||
.setOnUpdate((float val) => {
|
||||
AudioListener.volume = val;
|
||||
})
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int FloatAnimation(GameObject target, Vector3 basePosition,
|
||||
float amplitude, float duration, float delay = 0f, Axis axis = Axis.Y)
|
||||
{
|
||||
if (target == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
|
||||
return LeanTween.value(target, 0f, Mathf.PI * 2f, duration)
|
||||
.setDelay(delay)
|
||||
.setOnUpdate((float val) => {
|
||||
if (target != null)
|
||||
{
|
||||
Vector3 newPos = basePosition;
|
||||
float offset = Mathf.Sin(val) * amplitude;
|
||||
|
||||
switch (axis)
|
||||
{
|
||||
case Axis.X: newPos.x += offset; break;
|
||||
case Axis.Y: newPos.y += offset; break;
|
||||
case Axis.Z: newPos.z += offset; break;
|
||||
}
|
||||
|
||||
target.transform.localPosition = newPos;
|
||||
}
|
||||
})
|
||||
.setLoopClamp()
|
||||
.setEase(LeanTweenType.linear)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int RotateAround(GameObject target, Vector3 axis, float degreesPerSecond)
|
||||
{
|
||||
if (target == null || degreesPerSecond <= 0f) return -1;
|
||||
|
||||
float duration = 360f / degreesPerSecond;
|
||||
LeanTween.cancel(target);
|
||||
|
||||
return LeanTween.rotateAroundLocal(target, axis, 360f, duration)
|
||||
.setLoopClamp()
|
||||
.setEase(LeanTweenType.linear)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static int AnimateMaterialFloat(GameObject target, Material material,
|
||||
int propertyID, float fromValue, float toValue, float duration,
|
||||
System.Action onComplete = null,
|
||||
LeanTweenType easeType = LeanTweenType.easeInOutQuad)
|
||||
{
|
||||
if (target == null || material == null) return -1;
|
||||
|
||||
LeanTween.cancel(target);
|
||||
|
||||
return LeanTween.value(target, fromValue, toValue, duration)
|
||||
.setEase(easeType)
|
||||
.setOnUpdate((float val) => {
|
||||
if (material != null)
|
||||
material.SetFloat(propertyID, val);
|
||||
})
|
||||
.setOnComplete(onComplete)
|
||||
.id;
|
||||
}
|
||||
|
||||
public static void CancelTween(ref int tweenId)
|
||||
{
|
||||
if (tweenId != -1)
|
||||
{
|
||||
LeanTween.cancel(tweenId);
|
||||
tweenId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum Axis
|
||||
{
|
||||
X, Y, Z
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user