Files
wnsrc/lua/includes/extensions/math/ease.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

202 lines
4.2 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
module("math.ease", package.seeall)
--[[---------------------------------------------------------
Source code of functions
-----------------------------------------------------------]]
-- https://github.com/Facepunch/garrysmod/pull/1755
-- https://web.archive.org/web/20201212082306/https://easings.net/
-- https://web.archive.org/web/20201218211606/https://raw.githubusercontent.com/ai/easings.net/master/src/easings.yml
--[[---------------------------------------------------------
Easing constants
-----------------------------------------------------------]]
local c1 = 1.70158
local c3 = c1 + 1
local c2 = c1 * 1.525
local c4 = ( 2 * math.pi ) / 3
local c5 = ( 2 * math.pi ) / 4.5
local n1 = 7.5625
local d1 = 2.75
--[[---------------------------------------------------------
To reduce _G lookups, we'll localize some commonly
used functions in this extension
-----------------------------------------------------------]]
local pi = math.pi
local cos = math.cos
local sin = math.sin
local sqrt = math.sqrt
--[[---------------------------------------------------------
Easing functions
-----------------------------------------------------------]]
function InSine( x )
return 1 - cos( ( x * pi ) / 2 )
end
function OutSine( x )
return sin( ( x * pi ) / 2 )
end
function InOutSine( x )
return -( cos( pi * x ) - 1 ) / 2
end
function InQuad( x )
return x ^ 2
end
function OutQuad( x )
return 1 - ( 1 - x ) * ( 1 - x )
end
function InOutQuad( x )
return x < 0.5 && 2 * x ^ 2 || 1 - ( ( -2 * x + 2 ) ^ 2 ) / 2
end
function InCubic( x )
return x ^ 3
end
function OutCubic( x )
return 1 - ( ( 1 - x ) ^ 3 )
end
function InOutCubic( x )
return x < 0.5 && 4 * x ^ 3 || 1 - ( ( -2 * x + 2 ) ^ 3 ) / 2
end
function InQuart( x )
return x ^ 4
end
function OutQuart( x )
return 1 - ( ( 1 - x ) ^ 4 )
end
function InOutQuart( x )
return x < 0.5 && 8 * x ^ 4 || 1 - ( ( -2 * x + 2 ) ^ 4 ) / 2
end
function InQuint( x )
return x ^ 5
end
function OutQuint( x )
return 1 - ( ( 1 - x ) ^ 5 )
end
function InOutQuint( x )
return x < 0.5 && 16 * x ^ 5 || 1 - ( ( -2 * x + 2 ) ^ 5 ) / 2
end
function InExpo( x )
return x == 0 && 0 || ( 2 ^ ( 10 * x - 10 ) )
end
function OutExpo( x )
return x == 1 && 1 || 1 - ( 2 ^ ( -10 * x ) )
end
function InOutExpo( x )
return x == 0
&& 0
|| x == 1
&& 1
|| x < 0.5 && ( 2 ^ ( 20 * x - 10 ) ) / 2
|| ( 2 - ( 2 ^ ( -20 * x + 10 ) ) ) / 2
end
function InCirc( x )
return 1 - sqrt( 1 - ( x ^ 2 ) )
end
function OutCirc( x )
return sqrt( 1 - ( ( x - 1 ) ^ 2 ) )
end
function InOutCirc( x )
return x < 0.5
&& ( 1 - sqrt( 1 - ( ( 2 * x ) ^ 2 ) ) ) / 2
|| ( sqrt( 1 - ( ( -2 * x + 2 ) ^ 2 ) ) + 1 ) / 2
end
function InBack( x )
return c3 * x ^ 3 - c1 * x ^ 2
end
function OutBack( x )
return 1 + c3 * ( ( x - 1 ) ^ 3 ) + c1 * ( ( x - 1 ) ^ 2 )
end
function InOutBack( x )
return x < 0.5
&& ( ( ( 2 * x ) ^ 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2
|| ( ( ( 2 * x - 2 ) ^ 2 ) * ( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2
end
function InElastic( x )
return x == 0
&& 0
|| x == 1
&& 1
|| -( 2 ^ ( 10 * x - 10 ) ) * sin( ( x * 10 - 10.75 ) * c4 )
end
function OutElastic( x )
return x == 0
&& 0
|| x == 1
&& 1
|| ( 2 ^ ( -10 * x ) ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1
end
function InOutElastic( x )
return x == 0
&& 0
|| x == 1
&& 1
|| x < 0.5
&& -( ( 2 ^ ( 20 * x - 10 ) ) * sin( ( 20 * x - 11.125 ) * c5 ) ) / 2
|| ( ( 2 ^ ( -20 * x + 10 ) ) * sin( ( 20 * x - 11.125 ) * c5 ) ) / 2 + 1
end
function InBounce( x )
return 1 - OutBounce( 1 - x )
end
function OutBounce( x )
if ( x < 1 / d1 ) then
return n1 * x ^ 2
elseif ( x < 2 / d1 ) then
x = x - ( 1.5 / d1 )
return n1 * x ^ 2 + 0.75
elseif ( x < 2.5 / d1 ) then
x = x - ( 2.25 / d1 )
return n1 * x ^ 2 + 0.9375
else
x = x - ( 2.625 / d1 )
return n1 * x ^ 2 + 0.984375
end
end
function InOutBounce( x )
return x < 0.5
&& ( 1 - OutBounce( 1 - 2 * x ) ) / 2
|| ( 1 + OutBounce( 2 * x - 1 ) ) / 2
end