mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
201
lua/includes/extensions/math/ease.lua
Normal file
201
lua/includes/extensions/math/ease.lua
Normal file
@@ -0,0 +1,201 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user