mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
202 lines
4.2 KiB
Lua
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
|