From 4f5430f6d0e958591fb91aa328f3139e2397fde3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Defossez?= Date: Tue, 27 Feb 2018 17:43:28 +0100 Subject: [PATCH 1/2] [Migration] Migrated to Unity 2017.3, and using .NET 4.6 framework. --- ProjectSettings/GraphicsSettings.asset | Bin 4112 -> 4406 bytes ProjectSettings/ProjectSettings.asset | Bin 19924 -> 56159 bytes ProjectSettings/ProjectVersion.txt | 1 + 3 files changed, 1 insertion(+) create mode 100644 ProjectSettings/ProjectVersion.txt diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 4c8d52669a4c52529be384cb3b05b9a212392beb..281359031b1737457033fa4b1e51a8a7bd6b8b73 100644 GIT binary patch literal 4406 zcmZ{nON-?gxVswT zcrh{2gEwO|fr|&@$plZDkm$jK7ZZ)~pq})kccY2x|6f(z+f#$zrlzZY_0{*U$JdV) zV(ni-+`LcVM~HRna1}#?d-v}i-aR-wEdE_uTJk)wd)TqG^ubRbUcOSDIK1P_rEN2_ zmrkdk@AV6@hTX9JLUb@>NjEw|c=-Exh3I_di4NS*%8Exlu>*ygeJC^!wO2Bl>8r?o9^w=&seiy}H!EmZKQmchDx|p3_|2^#*HR+~-?z z-o4Ma>KMJcx8>aEeuOr4Z%3iIx_21dqkCu0yLIo_vPH^euFl3??<7z zy4wxz(dGR|bMK=EH0#xUFz2550r%JUX!CyGi7V2L@x8sMv5-GRURsX70b_WdK1>dy zF7xdI{CQ98B7}LOzw5r7W<=d~8pD zbWVapUYv6HMa!8-H0sj-Ez2tg=losEPdogQ7e~r9D-ktw-@~h9!2~bWva}SYtM?Mm^SRij_o~ zG}ZBmvC7%AiJViSonV^T5m(}tudP?tPw+djI`>S_$3H4;=+ zJ(`-AX{|94&PIuFiNJJ~s6_$NCKhv|Dx_%o;ba>>*ca%@g+jxuH94CoBR>(QDomJC zb{p7*+bxQxRkNjHnYMBB@}b3&+4e%CP!(cr=7DRhlBgZmRI;ZXLSUw99%3_U0ei9R z$MG!L$5hr{{>U-?B|9YRHy?whkIZ~DF1MFIh79A&gqDrhFDbNFTDJVpIRL+8VcNG) g?<>^3oy$J!Z9N;)S7;kA_qTH-n}^%uWtMmR2md(PW&i*H literal 4112 zcmeH~OHRZv42C_tSurQz2*YDoBBViRperg>tfREGXi(chNeYzHaWaaXHc}TH!Im87 z@!O8RtOBt30az{p;FKZ-fSc8Nb(vqm?=TDtTA!0YTK!&`!e!{aX~pcro?TnDeHg^qmW~qe~@ZtDPdE8>fR-7QFkSlS*1&~F7)BL zY%zu7##-G^Bj06zI*%I8$;P`l^NpcBUx6)Zc%G)--j2=gpwwQ&3GE*85m{8usx@kB zYD^wN#iLOcbWuBXZB(j#HR+E3(Z%{Pk6(a!v&TKwz*!i_!J^xBwm^5$wZ``EO@Guion`Ugx@Qkeh% diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index dc9cabc211202fef3c869ea4cd2e72b6002f192d..d7b45baeb701bd97ca48098e576f11c0d800fe05 100644 GIT binary patch literal 56159 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 literal 19924 zcmb_k2Y4h$m2TrD*ccNG7!!<0CNC@P+Tg|5Ga9YJuCy97(rU3WqBT>}v^CQ`?(R{r z!Hmf{n4C?{8Jlo-;Nx;m+;M@+#~qh5mw@HHSFd|s*Hq02xca`9UU&ch>%U*+>XJO~ zc+c||zV3P6Ii7d?R`~55Ie7Tsq4ja^`)AIaISbBjhNIf@_f%X{X&Qu^i8tvd%7fcy z5Rd6j_@n1}x5KZMxiCFE;kDNm*RNCcbT(+H>6QpU zXd`H;m~N8S3|ImKQcZhrs13i{N^A94scsbnVhJI$c3U*XOOf#hT?sU&K3b2WF-a2wvQ*A={M)K;mAr(<<} zSB3RG(sftKD(RCXjUoJAJ!*ISaPOqw)|qfO3GHcNZeV{-ACUls5k}1KZ++dygEI1HcFFDl+xob5OB{MqsMQwB0u$Z>9O}U z?&GPxuZze1EcaPfp=zuKjkHM~?_Xf(6B}bz1)I&3C>QRNLJwJ0>qL6MK1upH8S5f9 ztG%|Q!iI{W=wrO;ArBk|Ux?Nr{{~498b&JD(_mXwqE-~wIzBfJ54JF|EawlP zJb#EAx{|1=)8pd=yI8_X`h;^Kh>}_}+94r9x;Ga#g1QgoXEB_Q{03HhY^xqB9k9&~ zeBFfZ!^xQ2Nh3%)(Af9eu&KarMf%wfv(P9UeybJjs7AR9awBMn)pAsg;xzVyl-~N` zKLT;3lR(cg743xN;t@ZDi+PAdQujM*iHb5-+eiK=^m(|G8wk+iL0lkwiUK64)*h zPC^g54fQ7Pz3^Qg=c2{ka4wwm>sy;~)D0W-jK{mckQvw%*Ps-)lo0g<7h!Q*#WCdn z*jzPgj4gDNpiWPCqKiT{IQ?>n%0ATEpQ(l42i^ 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 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..e6cd1f9 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1 @@ +m_EditorVersion: 2017.3.0f3 From 7a0370a77454bc0488a5a9115abea787e659e7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Defossez?= Date: Tue, 27 Feb 2018 17:45:56 +0100 Subject: [PATCH 2/2] Refactored the whole library. Added generic Interpolate methods to interpolate float, Vector3 and Quaternion. Refactored all transform methods to use these generic interpolation methods. Improved some code. --- Assets/AutoMotion/Scripts/Auto.cs | 446 ++++++++++++++++-------------- 1 file changed, 245 insertions(+), 201 deletions(-) diff --git a/Assets/AutoMotion/Scripts/Auto.cs b/Assets/AutoMotion/Scripts/Auto.cs index 4166d7d..f3250e5 100644 --- a/Assets/AutoMotion/Scripts/Auto.cs +++ b/Assets/AutoMotion/Scripts/Auto.cs @@ -1,4 +1,5 @@ using UnityEngine; +using System; using System.Collections; public delegate bool Predicate(); @@ -6,177 +7,230 @@ public static class Auto { - #region Transform coroutines + #region Generic coroutines - public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration, Easer ease) + /// + /// Interpolates a value between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(float from, float to, float duration, Easer ease, Action action) { float elapsed = 0; - var start = transform.localPosition; - var range = target - start; + float range = to - from; + while (elapsed < duration) { elapsed = Mathf.MoveTowards(elapsed, duration, Time.deltaTime); - transform.localPosition = start + range * ease(elapsed / duration); + action(from + range * ease(elapsed / duration)); yield return 0; } - transform.localPosition = target; - } - public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration) - { - return MoveTo(transform, target, duration, Ease.Linear); - } - public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration, EaseType ease) - { - return MoveTo(transform, target, duration, Ease.FromType(ease)); - } - - public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration, Easer ease) - { - var start = transform.localPosition; - transform.localPosition = target; - return MoveTo(transform, start, duration, ease); - } - public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration) - { - return MoveFrom(transform, target, duration, Ease.Linear); - } - public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration, EaseType ease) - { - return MoveFrom(transform, target, duration, Ease.FromType(ease)); + + action(from + range * ease(1)); } - - public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration, Easer ease) + + /// + /// Interpolates a value between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(float from, float to, float duration, EaseType ease, Action action) => + Interpolate(from, to, duration, Ease.FromType(ease), action); + + /// + /// Interpolates a Vector3 between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(Vector3 from, Vector3 to, float duration, Easer ease, Action action) { float elapsed = 0; - var start = transform.localScale; - var range = target - start; + Vector3 range = to - from; + while (elapsed < duration) { elapsed = Mathf.MoveTowards(elapsed, duration, Time.deltaTime); - transform.localScale = start + range * ease(elapsed / duration); + action(from + range * ease(elapsed / duration)); yield return 0; } - transform.localScale = target; - } - public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration) - { - return ScaleTo(transform, target, duration, Ease.Linear); - } - public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration, EaseType ease) - { - return ScaleTo(transform, target, duration, Ease.FromType(ease)); - } - public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration, Easer ease) - { - var start = transform.localScale; - transform.localScale = target; - return ScaleTo(transform, start, duration, ease); - } - public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration) - { - return ScaleFrom(transform, target, duration, Ease.Linear); + action(from + range * ease(1)); } - public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration, EaseType ease) - { - return ScaleFrom(transform, target, duration, Ease.FromType(ease)); - } - - public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration, Easer ease) + + /// + /// Interpolates a Vector3 between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(Vector3 from, Vector3 to, float duration, EaseType ease, Action action) => + Interpolate(from, to, duration, Ease.FromType(ease), action); + + /// + /// Interpolates a Quaternion between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(Quaternion from, Quaternion to, float duration, Easer ease, Action action) { float elapsed = 0; - var start = transform.localRotation; + while (elapsed < duration) { elapsed = Mathf.MoveTowards(elapsed, duration, Time.deltaTime); - transform.localRotation = Quaternion.Lerp(start, target, ease(elapsed / duration)); + action(Quaternion.Lerp(from, to, ease(elapsed / duration))); yield return 0; } - transform.localRotation = target; - } - public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration) - { - return RotateTo(transform, target, duration, Ease.Linear); - } - public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration, EaseType ease) - { - return RotateTo(transform, target, duration, Ease.FromType(ease)); - } - - public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration, Easer ease) - { - var start = transform.localRotation; - transform.localRotation = target; - return RotateTo(transform, start, duration, ease); - } - public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration) - { - return RotateFrom(transform, target, duration, Ease.Linear); - } - public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration, EaseType ease) - { - return RotateFrom(transform, target, duration, Ease.FromType(ease)); + + action(Quaternion.Lerp(from, to, ease(1))); } - + + /// + /// Interpolates a Quaternion between from and to, using the ease function. + /// + /// The value to interpolate from. + /// The value to interpolate to. + /// The interpolation duration, in seconds. + /// The ease function. + /// The action to perform with the interpolated value. + /// The IEnumerator for the coroutine. + public static IEnumerator Interpolate(Quaternion from, Quaternion to, float duration, EaseType ease, Action action) => + Interpolate(from, to, duration, Ease.FromType(ease), action); + + #endregion + + #region Transform coroutines + + public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration, Easer ease) => + Interpolate(transform.localPosition, target, duration, ease, v => transform.localPosition = v); + + public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration) => + Interpolate(transform.localPosition, target, duration, Ease.Linear, v => transform.localPosition = v); + + public static IEnumerator MoveTo(this Transform transform, Vector3 target, float duration, EaseType ease) => + Interpolate(transform.localPosition, target, duration, ease, v => transform.localPosition = v); + + public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration, Easer ease) => + Interpolate(target, transform.localPosition, duration, ease, v => transform.localPosition = v); + + public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration) => + Interpolate(target, transform.localPosition, duration, Ease.Linear, v => transform.localPosition = v); + + public static IEnumerator MoveFrom(this Transform transform, Vector3 target, float duration, EaseType ease) => + Interpolate(target, transform.localPosition, duration, ease, v => transform.localPosition = v); + + public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration, Easer ease) => + Interpolate(transform.localScale, target, duration, ease, v => transform.localScale = v); + + public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration) => + Interpolate(transform.localScale, target, duration, Ease.Linear, v => transform.localScale = v); + + public static IEnumerator ScaleTo(this Transform transform, Vector3 target, float duration, EaseType ease) => + Interpolate(transform.localScale, target, duration, ease, v => transform.localScale = v); + + public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration, Easer ease) => + Interpolate(target, transform.localScale, duration, ease, v => transform.localScale = v); + + public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration) => + Interpolate(target, transform.localScale, duration, Ease.Linear, v => transform.localScale = v); + + public static IEnumerator ScaleFrom(this Transform transform, Vector3 target, float duration, EaseType ease) => + Interpolate(target, transform.localScale, duration, ease, v => transform.localScale = v); + + public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration, Easer ease) => + Interpolate(transform.localRotation, target, duration, ease, v => transform.localRotation = v); + + public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration) => + Interpolate(transform.localRotation, target, duration, Ease.Linear, v => transform.localRotation = v); + + public static IEnumerator RotateTo(this Transform transform, Quaternion target, float duration, EaseType ease) => + Interpolate(transform.localRotation, target, duration, ease, v => transform.localRotation = v); + + public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration, Easer ease) => + Interpolate(target, transform.localRotation, duration, ease, v => transform.localRotation = v); + + public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration) => + Interpolate(target, transform.localRotation, duration, Ease.Linear, v => transform.localRotation = v); + + public static IEnumerator RotateFrom(this Transform transform, Quaternion target, float duration, EaseType ease) => + Interpolate(target, transform.localRotation, duration, ease, v => transform.localRotation = v); + public static IEnumerator CurveTo(this Transform transform, Vector3 control, Vector3 target, float duration, Easer ease) { float elapsed = 0; var start = transform.localPosition; - Vector3 position; - float t; + while (elapsed < duration) { elapsed = Mathf.MoveTowards(elapsed, duration, Time.deltaTime); - t = ease(elapsed / duration); - position.x = start.x * (1 - t) * (1 - t) + control.x * 2 * (1 - t) * t + target.x * t * t; - position.y = start.y * (1 - t) * (1 - t) + control.y * 2 * (1 - t) * t + target.y * t * t; - position.z = start.z * (1 - t) * (1 - t) + control.z * 2 * (1 - t) * t + target.z * t * t; - transform.localPosition = position; + float t = ease(elapsed / duration); + transform.localPosition = start * (1 - t) * (1 - t) + control * 2 * (1 - t) * t + target * t * t; yield return 0; } + transform.localPosition = target; } - public static IEnumerator CurveTo(this Transform transform, Vector3 control, Vector3 target, float duration) - { - return CurveTo(transform, control, target, duration, Ease.Linear); - } - public static IEnumerator CurveTo(this Transform transform, Vector3 control, Vector3 target, float duration, EaseType ease) - { - return CurveTo(transform, control, target, duration, Ease.FromType(ease)); - } - + + public static IEnumerator CurveTo(this Transform transform, Vector3 control, Vector3 target, float duration) => + CurveTo(transform, control, target, duration, Ease.Linear); + + public static IEnumerator CurveTo(this Transform transform, Vector3 control, Vector3 target, float duration, EaseType ease) => + CurveTo(transform, control, target, duration, Ease.FromType(ease)); + public static IEnumerator CurveFrom(this Transform transform, Vector3 control, Vector3 start, float duration, Easer ease) { var target = transform.localPosition; transform.localPosition = start; return CurveTo(transform, control, target, duration, ease); } - public static IEnumerator CurveFrom(this Transform transform, Vector3 control, Vector3 start, float duration) - { - return CurveFrom(transform, control, start, duration, Ease.Linear); - } - public static IEnumerator CurveFrom(this Transform transform, Vector3 control, Vector3 start, float duration, EaseType ease) - { - return CurveFrom(transform, control, start, duration, Ease.FromType(ease)); - } - + + public static IEnumerator CurveFrom(this Transform transform, Vector3 control, Vector3 start, float duration) => + CurveFrom(transform, control, start, duration, Ease.Linear); + + public static IEnumerator CurveFrom(this Transform transform, Vector3 control, Vector3 start, float duration, EaseType ease) => + CurveFrom(transform, control, start, duration, Ease.FromType(ease)); + public static IEnumerator Shake(this Transform transform, Vector3 amount, float duration) { var start = transform.localPosition; var shake = Vector3.zero; + while (duration > 0) { duration -= Time.deltaTime; - shake.Set(Random.Range(-amount.x, amount.x), Random.Range(-amount.y, amount.y), Random.Range(-amount.z, amount.z)); + shake.Set( + UnityEngine.Random.Range(-amount.x, amount.x), + UnityEngine.Random.Range(-amount.y, amount.y), + UnityEngine.Random.Range(-amount.z, amount.z) + ); transform.localPosition = start + shake; yield return 0; } + transform.localPosition = start; } - public static IEnumerator Shake(this Transform transform, float amount, float duration) - { - return Shake(transform, new Vector3(amount, amount, amount), duration); - } + + public static IEnumerator Shake(this Transform transform, float amount, float duration) => + Shake(transform, Vector3.one * amount, duration); #endregion @@ -200,62 +254,52 @@ public static IEnumerator WaitUntil(Predicate predicate) #endregion #region Time-based motion - + public static float Loop(float duration, float from, float to, float offsetPercent) { var range = to - from; var total = (Time.time + duration * offsetPercent) * (Mathf.Abs(range) / duration); - if (range > 0) - return from + Time.time - (range * Mathf.FloorToInt((Time.time / range))); - else - return from - (Time.time - (Mathf.Abs(range) * Mathf.FloorToInt((total / Mathf.Abs(range))))); - } - public static float Loop(float duration, float from, float to) - { - return Loop(duration, from, to, 0); - } - public static Vector3 Loop(float duration, Vector3 from, Vector3 to, float offsetPercent) - { - return Vector3.Lerp(from, to, Loop(duration, 0, 1, offsetPercent)); - } - public static Vector3 Loop(float duration, Vector3 from, Vector3 to) - { - return Vector3.Lerp(from, to, Loop(duration, 0, 1)); - } - public static Quaternion Loop(float duration, Quaternion from, Quaternion to, float offsetPercent) - { - return Quaternion.Lerp(from, to, Loop(duration, 0, 1, offsetPercent)); - } - public static Quaternion Loop(float duration, Quaternion from, Quaternion to) - { - return Quaternion.Lerp(from, to, Loop(duration, 0, 1)); + + return (range > 0) ? + from + Time.time - (range * Mathf.FloorToInt((Time.time / range))) : + from - (Time.time - (Mathf.Abs(range) * Mathf.FloorToInt((total / Mathf.Abs(range))))); } - + + public static float Loop(float duration, float from, float to) => + Loop(duration, from, to, 0); + + public static Vector3 Loop(float duration, Vector3 from, Vector3 to, float offsetPercent) => + Vector3.Lerp(from, to, Loop(duration, 0, 1, offsetPercent)); + + public static Vector3 Loop(float duration, Vector3 from, Vector3 to) => + Vector3.Lerp(from, to, Loop(duration, 0, 1)); + + public static Quaternion Loop(float duration, Quaternion from, Quaternion to, float offsetPercent) => + Quaternion.Lerp(from, to, Loop(duration, 0, 1, offsetPercent)); + + public static Quaternion Loop(float duration, Quaternion from, Quaternion to) => + Quaternion.Lerp(from, to, Loop(duration, 0, 1)); + public static float Wave(float duration, float from, float to, float offsetPercent) { var range = (to - from) / 2; return from + range + Mathf.Sin(((Time.time + duration * offsetPercent) / duration) * (Mathf.PI * 2)) * range; } - public static float Wave(float duration, float from, float to) - { - return Wave(duration, from, to, 0); - } - public static Vector3 Wave(float duration, Vector3 from, Vector3 to, float offsetPercent) - { - return Vector3.Lerp(from, to, Wave(duration, 0, 1, offsetPercent)); - } - public static Vector3 Wave(float duration, Vector3 from, Vector3 to) - { - return Vector3.Lerp(from, to, Wave(duration, 0, 1)); - } - public static Quaternion Wave(float duration, Quaternion from, Quaternion to, float offsetPercent) - { - return Quaternion.Lerp(from, to, Wave(duration, 0, 1, offsetPercent)); - } - public static Quaternion Wave(float duration, Quaternion from, Quaternion to) - { - return Quaternion.Lerp(from, to, Wave(duration, 0, 1)); - } + + public static float Wave(float duration, float from, float to) => + Wave(duration, from, to, 0); + + public static Vector3 Wave(float duration, Vector3 from, Vector3 to, float offsetPercent) => + Vector3.Lerp(from, to, Wave(duration, 0, 1, offsetPercent)); + + public static Vector3 Wave(float duration, Vector3 from, Vector3 to) => + Vector3.Lerp(from, to, Wave(duration, 0, 1)); + + public static Quaternion Wave(float duration, Quaternion from, Quaternion to, float offsetPercent) => + Quaternion.Lerp(from, to, Wave(duration, 0, 1, offsetPercent)); + + public static Quaternion Wave(float duration, Quaternion from, Quaternion to) => + Quaternion.Lerp(from, to, Wave(duration, 0, 1)); #endregion } @@ -266,52 +310,52 @@ public enum EaseType { Linear, QuadIn, QuadOut, QuadInOut, CubeIn, CubeOut, Cube public static class Ease { - public static readonly Easer Linear = (t) => { return t; }; - public static readonly Easer QuadIn = (t) => { return t * t; }; - public static readonly Easer QuadOut = (t) => { return 1 - QuadIn(1 - t); }; - public static readonly Easer QuadInOut = (t) => { return (t <= 0.5f) ? QuadIn(t * 2) / 2 : QuadOut(t * 2 - 1) / 2 + 0.5f; }; - public static readonly Easer CubeIn = (t) => { return t * t * t; }; - public static readonly Easer CubeOut = (t) => { return 1 - CubeIn(1 - t); }; - public static readonly Easer CubeInOut = (t) => { return (t <= 0.5f) ? CubeIn(t * 2) / 2 : CubeOut(t * 2 - 1) / 2 + 0.5f; }; - public static readonly Easer BackIn = (t) => { return t * t * (2.70158f * t - 1.70158f); }; - public static readonly Easer BackOut = (t) => { return 1 - BackIn(1 - t); }; - public static readonly Easer BackInOut = (t) => { return (t <= 0.5f) ? BackIn(t * 2) / 2 : BackOut(t * 2 - 1) / 2 + 0.5f; }; - public static readonly Easer ExpoIn = (t) => { return (float)Mathf.Pow(2, 10 * (t - 1)); }; - public static readonly Easer ExpoOut = (t) => { return 1 - ExpoIn(t); }; - public static readonly Easer ExpoInOut = (t) => { return t < .5f ? ExpoIn(t * 2) / 2 : ExpoOut(t * 2) / 2; }; - public static readonly Easer SineIn = (t) => { return -Mathf.Cos(Mathf.PI / 2 * t) + 1; }; - public static readonly Easer SineOut = (t) => { return Mathf.Sin(Mathf.PI / 2 * t); }; - public static readonly Easer SineInOut = (t) => { return -Mathf.Cos(Mathf.PI * t) / 2f + .5f; }; - public static readonly Easer ElasticIn = (t) => { return 1 - ElasticOut(1 - t); }; - public static readonly Easer ElasticOut = (t) => { return Mathf.Pow(2, -10 * t) * Mathf.Sin((t - 0.075f) * (2 * Mathf.PI) / 0.3f) + 1; }; - public static readonly Easer ElasticInOut = (t) => { return (t <= 0.5f) ? ElasticIn(t * 2) / 2 : ElasticOut(t * 2 - 1) / 2 + 0.5f; }; + public static readonly Easer Linear = (t) => t; + public static readonly Easer QuadIn = (t) => t * t; + public static readonly Easer QuadOut = (t) => 1 - QuadIn(1 - t); + public static readonly Easer QuadInOut = (t) => (t <= 0.5f) ? QuadIn(t * 2) / 2 : QuadOut(t * 2 - 1) / 2 + 0.5f; + public static readonly Easer CubeIn = (t) => t * t * t; + public static readonly Easer CubeOut = (t) => 1 - CubeIn(1 - t); + public static readonly Easer CubeInOut = (t) => (t <= 0.5f) ? CubeIn(t * 2) / 2 : CubeOut(t * 2 - 1) / 2 + 0.5f; + public static readonly Easer BackIn = (t) => t * t * (2.70158f * t - 1.70158f); + public static readonly Easer BackOut = (t) => 1 - BackIn(1 - t); + public static readonly Easer BackInOut = (t) => (t <= 0.5f) ? BackIn(t * 2) / 2 : BackOut(t * 2 - 1) / 2 + 0.5f; + public static readonly Easer ExpoIn = (t) => (float)Mathf.Pow(2, 10 * (t - 1)); + public static readonly Easer ExpoOut = (t) => 1 - ExpoIn(t); + public static readonly Easer ExpoInOut = (t) => t < .5f ? ExpoIn(t * 2) / 2 : ExpoOut(t * 2) / 2; + public static readonly Easer SineIn = (t) => -Mathf.Cos(Mathf.PI / 2 * t) + 1; + public static readonly Easer SineOut = (t) => Mathf.Sin(Mathf.PI / 2 * t); + public static readonly Easer SineInOut = (t) => -Mathf.Cos(Mathf.PI * t) / 2f + .5f; + public static readonly Easer ElasticIn = (t) => 1 - ElasticOut(1 - t); + public static readonly Easer ElasticOut = (t) => Mathf.Pow(2, -10 * t) * Mathf.Sin((t - 0.075f) * (2 * Mathf.PI) / 0.3f) + 1; + public static readonly Easer ElasticInOut = (t) => (t <= 0.5f) ? ElasticIn(t * 2) / 2 : ElasticOut(t * 2 - 1) / 2 + 0.5f; public static Easer FromType(EaseType type) { switch (type) { - case EaseType.Linear: return Linear; - case EaseType.QuadIn: return QuadIn; - case EaseType.QuadOut: return QuadOut; - case EaseType.QuadInOut: return QuadInOut; - case EaseType.CubeIn: return CubeIn; - case EaseType.CubeOut: return CubeOut; - case EaseType.CubeInOut: return CubeInOut; - case EaseType.BackIn: return BackIn; - case EaseType.BackOut: return BackOut; - case EaseType.BackInOut: return BackInOut; - case EaseType.ExpoIn: return ExpoIn; - case EaseType.ExpoOut: return ExpoOut; - case EaseType.ExpoInOut: return ExpoInOut; - case EaseType.SineIn: return SineIn; - case EaseType.SineOut: return SineOut; - case EaseType.SineInOut: return SineInOut; - case EaseType.ElasticIn: return ElasticIn; - case EaseType.ElasticOut: return ElasticOut; - case EaseType.ElasticInOut: return ElasticInOut; + case EaseType.Linear: return Linear; + case EaseType.QuadIn: return QuadIn; + case EaseType.QuadOut: return QuadOut; + case EaseType.QuadInOut: return QuadInOut; + case EaseType.CubeIn: return CubeIn; + case EaseType.CubeOut: return CubeOut; + case EaseType.CubeInOut: return CubeInOut; + case EaseType.BackIn: return BackIn; + case EaseType.BackOut: return BackOut; + case EaseType.BackInOut: return BackInOut; + case EaseType.ExpoIn: return ExpoIn; + case EaseType.ExpoOut: return ExpoOut; + case EaseType.ExpoInOut: return ExpoInOut; + case EaseType.SineIn: return SineIn; + case EaseType.SineOut: return SineOut; + case EaseType.SineInOut: return SineInOut; + case EaseType.ElasticIn: return ElasticIn; + case EaseType.ElasticOut: return ElasticOut; + case EaseType.ElasticInOut: return ElasticInOut; } return Linear; } } -#endregion \ No newline at end of file +#endregion