131 lines
5.8 KiB
C#
131 lines
5.8 KiB
C#
using OctoberStudio.Extensions;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace OctoberStudio.Easing
|
|
{
|
|
public static class EasingExtensions
|
|
{
|
|
public static EasingJobAnimation DoPositionJob(this Transform transform, Transform targetTransform, float duration, float delay = 0, bool useUnscaledTime = false, EasingType easingType = EasingType.Linear)
|
|
{
|
|
return new PositionEasingJobAnimation(transform, targetTransform, duration, delay, useUnscaledTime, easingType);
|
|
}
|
|
|
|
public static IEasingCoroutine DoAnchorPosition(this RectTransform rect, Vector2 targetPosition, float duration, float delay = 0)
|
|
{
|
|
return new VectorEasingCoroutine3(rect.anchoredPosition3D, new Vector3(targetPosition.x, targetPosition.y, rect.anchoredPosition3D.z), duration, delay, (position) => rect.anchoredPosition3D = position);
|
|
}
|
|
|
|
public static IEasingCoroutine DoSizeDelta(this RectTransform rect, Vector2 targetSizeDelta, float duration, float delay = 0)
|
|
{
|
|
Vector2 startSizeDelta = rect.sizeDelta;
|
|
|
|
return new VectorEasingCoroutine2(startSizeDelta, targetSizeDelta, duration, delay, (position) => rect.sizeDelta = position);
|
|
}
|
|
|
|
public static IEasingCoroutine DoPosition(this Transform transform, Vector3 targetPosition, float duration, float delay = 0)
|
|
{
|
|
Vector3 startPosition = transform.position;
|
|
|
|
return new VectorEasingCoroutine3(startPosition, targetPosition, duration, delay, (position) => transform.position = position);
|
|
}
|
|
|
|
public static IEasingCoroutine DoPosition(this Transform transform, Transform targetTransform, float duration, float delay = 0)
|
|
{
|
|
Vector3 startPosition = transform.position;
|
|
|
|
IEasingCoroutine coroutine = EasingManager.DoFloat(0, 1, duration, (value) =>
|
|
{
|
|
transform.position = Vector3.LerpUnclamped(startPosition, targetTransform.position, value);
|
|
}, delay);
|
|
|
|
return coroutine;
|
|
}
|
|
|
|
public static IEasingCoroutine DoLocalScale(this Transform transform, Vector3 targetScale, float duration, float delay = 0)
|
|
{
|
|
Vector3 startScale = transform.localScale;
|
|
|
|
return new VectorEasingCoroutine3(startScale, targetScale, duration, delay, (scale) => transform.localScale = scale);
|
|
}
|
|
|
|
public static void StopIfExists(this IEasingCoroutine coroutine)
|
|
{
|
|
if(coroutine != null && coroutine.IsActive) coroutine.Stop();
|
|
}
|
|
|
|
public static bool ExistsAndActive(this IEasingCoroutine coroutine)
|
|
{
|
|
return coroutine != null && coroutine.IsActive;
|
|
}
|
|
|
|
public static IEasingCoroutine DoColor(this MaterialPropertyBlock block, string property, Color color, float duration, float delay = 0)
|
|
{
|
|
var id = Shader.PropertyToID(property);
|
|
|
|
var startColor = block.GetColor(id);
|
|
|
|
return new ColorEasingCoroutine(startColor, color, duration, delay, (color) => block.SetColor(id, color));
|
|
}
|
|
|
|
public static IEasingCoroutine DoColor(this Material material, string property, Color color, float duration, float delay = 0)
|
|
{
|
|
var id = Shader.PropertyToID(property);
|
|
|
|
var startColor = material.GetColor(id);
|
|
|
|
return new ColorEasingCoroutine(startColor, color, duration, delay, (color) => material.SetColor(id, color));
|
|
}
|
|
|
|
public static IEasingCoroutine DoColor(this Material material, int propertyId, Color color, float duration, float delay = 0)
|
|
{
|
|
var startColor = material.GetColor(propertyId);
|
|
|
|
return new ColorEasingCoroutine(startColor, color, duration, delay, (color) => material.SetColor(propertyId, color));
|
|
}
|
|
|
|
public static IEasingCoroutine DoFloat(this Material material, string property, float value, float duration, float delay = 0)
|
|
{
|
|
var id = Shader.PropertyToID(property);
|
|
|
|
var startValue = material.GetFloat(id);
|
|
|
|
return new FloatEasingCoroutine(startValue, value, duration, delay, (value) => material.SetFloat(id, value));
|
|
}
|
|
|
|
public static IEasingCoroutine DoFloat(this Material material, int propertyId, float value, float duration, float delay = 0)
|
|
{
|
|
var startValue = material.GetFloat(propertyId);
|
|
|
|
return new FloatEasingCoroutine(startValue, value, duration, delay, (value) => material.SetFloat(propertyId, value));
|
|
}
|
|
|
|
public static IEasingCoroutine DoAlpha(this Graphic graphic, float targetAlpha, float duration, float delay = 0)
|
|
{
|
|
var initialAplha = graphic.color.a;
|
|
|
|
return new FloatEasingCoroutine(initialAplha, targetAlpha, duration, delay, (alpha) => graphic.SetAlpha(alpha));
|
|
}
|
|
|
|
public static IEasingCoroutine DoAlpha(this CanvasGroup canvasGroup, float targetAlpha, float duration, float delay = 0)
|
|
{
|
|
var initialAplha = canvasGroup.alpha;
|
|
|
|
return new FloatEasingCoroutine(initialAplha, targetAlpha, duration, delay, (alpha) => canvasGroup.alpha = alpha);
|
|
}
|
|
|
|
public static IEasingCoroutine DoAlpha(this SpriteRenderer spriteRederer, float targetAlpha, float duration, float delay = 0)
|
|
{
|
|
var initialAplha = spriteRederer.color.a;
|
|
|
|
return new FloatEasingCoroutine(initialAplha, targetAlpha, duration, delay, (alpha) => spriteRederer.SetAlpha(alpha));
|
|
}
|
|
|
|
public static IEasingCoroutine DoVolume(this AudioSource audioSource, float targetVolume, float duration, float delay = 0)
|
|
{
|
|
return new FloatEasingCoroutine(audioSource.volume, targetVolume, duration, delay, (volume) => audioSource.volume = volume);
|
|
}
|
|
}
|
|
} |