This commit is contained in:
jill 2021-09-18 13:02:25 +03:00
parent 3c3cc1c6d7
commit 56f3ba6fae
11 changed files with 88 additions and 54 deletions

View File

@ -1,5 +1,15 @@
local self = {} local self = {}
local icon = {
inease = love.graphics.newImage('inease-icon.png'),
outease = love.graphics.newImage('outease-icon.png'),
inoutease = love.graphics.newImage('inoutease-icon.png'),
transientease = love.graphics.newImage('transientease-icon.png'),
unknownease = love.graphics.newImage('unknownease-icon.png'),
linearease = love.graphics.newImage('linearease-icon.png'),
instantease = love.graphics.newImage('instantease-icon.png'),
}
local dropdowns = {} local dropdowns = {}
local dropdownValueCache = {} local dropdownValueCache = {}
@ -20,6 +30,14 @@ local function skeys(t)
return k2 return k2
end end
local function icons(keys)
local e = {}
for i,v in ipairs(keys) do
table.insert(e, (ease.eases[v].type or 'unknown') .. 'ease')
end
return e
end
function self.get(index) function self.get(index)
return dropdowns[index] return dropdowns[index]
end end
@ -70,13 +88,16 @@ function self.createDropdowns()
local param1 = {} local param1 = {}
local param2 = {} local param2 = {}
local eases = skeys(ease.eases)
if d[dropdownId].selected == 1 then -- preview ease if d[dropdownId].selected == 1 then -- preview ease
insertDropdown(d, { insertDropdown(d, {
x = outerpadding + dropdownWidth + padding, x = outerpadding + dropdownWidth + padding,
y = outerpadding, y = outerpadding,
width = dropdownWidth, width = dropdownWidth,
options = skeys(ease.eases), options = eases,
name = 'ease1' name = 'ease1',
icons = icons(eases)
}) })
local _e = ease.eases[d[dropdownId].options[d[dropdownId].selected]] local _e = ease.eases[d[dropdownId].options[d[dropdownId].selected]]
param1[1] = slider.kvalue(_e.name .. 'param11') or (_e.params[1] and _e.params[1].default) or 1 param1[1] = slider.kvalue(_e.name .. 'param11') or (_e.params[1] and _e.params[1].default) or 1
@ -89,15 +110,17 @@ function self.createDropdowns()
x = outerpadding + dropdownWidth + padding, x = outerpadding + dropdownWidth + padding,
y = outerpadding, y = outerpadding,
width = dropdownWidth, width = dropdownWidth,
options = skeys(ease.eases), options = eases,
name = 'ease1' name = 'ease1',
icons = icons(eases)
}) })
insertDropdown(d, { insertDropdown(d, {
x = outerpadding + dropdownWidth + padding + dropdownWidth + padding, x = outerpadding + dropdownWidth + padding + dropdownWidth + padding,
y = outerpadding, y = outerpadding,
width = dropdownWidth, width = dropdownWidth,
options = skeys(ease.eases), options = eases,
name = 'ease2' name = 'ease2',
icons = icons(eases)
}) })
local _e1 = ease.eases[d[dropdownId - 1].options[d[dropdownId - 1].selected]] local _e1 = ease.eases[d[dropdownId - 1].options[d[dropdownId - 1].selected]]
@ -112,8 +135,9 @@ function self.createDropdowns()
x = outerpadding + dropdownWidth + padding, x = outerpadding + dropdownWidth + padding,
y = outerpadding, y = outerpadding,
width = dropdownWidth, width = dropdownWidth,
options = skeys(ease.eases), options = eases,
name = 'ease1' name = 'ease1',
icons = icons(eases)
}) })
end end
@ -182,7 +206,14 @@ function self.render()
if i == v.selected then if i == v.selected then
love.graphics.setColor(0.8, 0.8, 1, 1 * a) love.graphics.setColor(0.8, 0.8, 1, 1 * a)
end end
love.graphics.print(v.options[i], x + 2, y + 2)
if v.icons and v.icons[i] then
local sprite = icon[v.icons[i]]
love.graphics.draw(sprite, x + 2, y + 2, 0, fontHeight / sprite:getWidth(), fontHeight / sprite:getHeight())
love.graphics.print(v.options[i], x + 2 + fontHeight, y + 2)
else
love.graphics.print(v.options[i], x + 2, y + 2)
end
::continue:: ::continue::
end end

View File

@ -37,7 +37,8 @@ for i,v in pairs(easelib) do
min = min, min = min,
i = i, i = i,
name = v[1], name = v[1],
params = params params = params,
type = v.type
} }
end end

View File

@ -19,52 +19,52 @@ self = setmetatable(self, {
end end
}) })
table.insert(self, {'linear', function(t) return t end}) table.insert(self, {'linear', function(t) return t end, type = 'linear'})
table.insert(self, {'instant', function() return 1 end}) table.insert(self, {'instant', function() return 1 end, type = 'instant'})
table.insert(self, {'bounce', function(t) return 4 * t * (1 - t) end}) table.insert(self, {'bounce', function(t) return 4 * t * (1 - t) end, type = 'transient'})
table.insert(self, {'tri', function(t) return 1 - abs(2 * t - 1) end}) table.insert(self, {'tri', function(t) return 1 - abs(2 * t - 1) end, type = 'transient'})
table.insert(self, {'bell', function(t) return self.inOutQuint(self.tri(t)) end}) table.insert(self, {'bell', function(t) return self.inOutQuint(self.tri(t)) end, type = 'transient'})
table.insert(self, {'pop', function(t) return 3.5 * (1 - t) * (1 - t) * sqrt(t) end}) table.insert(self, {'pop', function(t) return 3.5 * (1 - t) * (1 - t) * sqrt(t) end, type = 'transient'})
table.insert(self, {'tap', function(t) return 3.5 * t * t * sqrt(1 - t) end}) table.insert(self, {'tap', function(t) return 3.5 * t * t * sqrt(1 - t) end, type = 'transient'})
table.insert(self, {'pulse', function(t) return t < .5 and self.tap(t * 2) or -self.pop(t * 2 - 1) end}) table.insert(self, {'pulse', function(t) return t < .5 and self.tap(t * 2) or -self.pop(t * 2 - 1) end, type = 'transient'})
table.insert(self, {'spike', function(t) return exp(-10 * abs(2 * t - 1)) end}) table.insert(self, {'spike', function(t) return exp(-10 * abs(2 * t - 1)) end, type = 'transient'})
table.insert(self, {'inverse', function(t) return t * t * (1 - t) * (1 - t) / (0.5 - t) end}) table.insert(self, {'inverse', function(t) return t * t * (1 - t) * (1 - t) / (0.5 - t) end, type = 'transient'})
table.insert(self, {'popElastic', function(t, damp, count) table.insert(self, {'popElastic', function(t, damp, count)
return (1000 ^ -(t ^ damp) - 0.001) * sin(count * pi * t) return (1000 ^ -(t ^ damp) - 0.001) * sin(count * pi * t)
end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}}) end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}, type = 'transient'})
table.insert(self, {'tapElastic', function(t, damp, count) table.insert(self, {'tapElastic', function(t, damp, count)
return (1000 ^ -((1 - t) ^ damp) - 0.001) * sin(count * pi * (1 - t)) return (1000 ^ -((1 - t) ^ damp) - 0.001) * sin(count * pi * (1 - t))
end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}}) end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}, type = 'transient'})
table.insert(self, {'pulseElastic', function(t, damp, count) table.insert(self, {'pulseElastic', function(t, damp, count)
if t < .5 then if t < .5 then
return self.tapElastic(t * 2, damp, count) return self.tapElastic(t * 2, damp, count)
else else
return -self.popElastic(t * 2 - 1, damp, count) return -self.popElastic(t * 2 - 1, damp, count)
end end
end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}}) end, {1, 10, 1.4, 'damp'}, {1, 25, 6, 'count'}, type = 'transient'})
table.insert(self, {'impulse', function(t, damp) table.insert(self, {'impulse', function(t, damp)
t = t ^ damp t = t ^ damp
return t * (1000 ^ -t - 0.001) * 18.6 return t * (1000 ^ -t - 0.001) * 18.6
end, {0, 10, 0.9, 'damp'}}) end, {0, 10, 0.9, 'damp'}, type = 'transient'})
table.insert(self, {'inSine', function(x) table.insert(self, {'inSine', function(x)
return 1 - cos(x * (pi * 0.5)) return 1 - cos(x * (pi * 0.5))
end}) end, type = 'in'})
table.insert(self, {'outSine', function(x) table.insert(self, {'outSine', function(x)
return sin(x * (pi * 0.5)) return sin(x * (pi * 0.5))
end}) end, type = 'out'})
table.insert(self, {'inOutSine', function(x) table.insert(self, {'inOutSine', function(x)
return 0.5 - 0.5 * cos(x * pi) return 0.5 - 0.5 * cos(x * pi)
end}) end, type = 'inout'})
table.insert(self, {'inQuad', function(t) return t * t end}) table.insert(self, {'inQuad', function(t) return t * t end, type = 'in'})
table.insert(self, {'outQuad', function(t) return -t * (t - 2) end}) table.insert(self, {'outQuad', function(t) return -t * (t - 2) end, type = 'out'})
table.insert(self, {'inOutQuad', function(t) table.insert(self, {'inOutQuad', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -72,9 +72,9 @@ table.insert(self, {'inOutQuad', function(t)
else else
return 1 - 0.5 * (2 - t) ^ 2 return 1 - 0.5 * (2 - t) ^ 2
end end
end}) end, type = 'inout'})
table.insert(self, {'inCubic', function(t) return t * t * t end}) table.insert(self, {'inCubic', function(t) return t * t * t end, type = 'in'})
table.insert(self, {'outCubic', function(t) return 1 - (1 - t) ^ 3 end}) table.insert(self, {'outCubic', function(t) return 1 - (1 - t) ^ 3 end, type = 'out'})
table.insert(self, {'inOutCubic', function(t) table.insert(self, {'inOutCubic', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -82,9 +82,9 @@ table.insert(self, {'inOutCubic', function(t)
else else
return 1 - 0.5 * (2 - t) ^ 3 return 1 - 0.5 * (2 - t) ^ 3
end end
end}) end, type = 'inout'})
table.insert(self, {'inQuart', function(t) return t * t * t * t end}) table.insert(self, {'inQuart', function(t) return t * t * t * t end, type = 'in'})
table.insert(self, {'outQuart', function(t) return 1 - (1 - t) ^ 4 end}) table.insert(self, {'outQuart', function(t) return 1 - (1 - t) ^ 4 end, type = 'out'})
table.insert(self, {'inOutQuart', function(t) table.insert(self, {'inOutQuart', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -92,9 +92,9 @@ table.insert(self, {'inOutQuart', function(t)
else else
return 1 - 0.5 * (2 - t) ^ 4 return 1 - 0.5 * (2 - t) ^ 4
end end
end}) end, type = 'inout'})
table.insert(self, {'inQuint', function(t) return t ^ 5 end}) table.insert(self, {'inQuint', function(t) return t ^ 5 end, type = 'in'})
table.insert(self, {'outQuint', function(t) return 1 - (1 - t) ^ 5 end}) table.insert(self, {'outQuint', function(t) return 1 - (1 - t) ^ 5 end, type = 'out'})
table.insert(self, {'inOutQuint', function(t) table.insert(self, {'inOutQuint', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -102,9 +102,9 @@ table.insert(self, {'inOutQuint', function(t)
else else
return 1 - 0.5 * (2 - t) ^ 5 return 1 - 0.5 * (2 - t) ^ 5
end end
end}) end, type = 'inout'})
table.insert(self, {'inExpo', function(t) return 1000 ^ (t - 1) - 0.001 end}) table.insert(self, {'inExpo', function(t) return 1000 ^ (t - 1) - 0.001 end, type = 'in'})
table.insert(self, {'outExpo', function(t) return 1.001 - 1000 ^ -t end}) table.insert(self, {'outExpo', function(t) return 1.001 - 1000 ^ -t end, type = 'out'})
table.insert(self, {'inOutExpo', function(t) table.insert(self, {'inOutExpo', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -112,9 +112,9 @@ table.insert(self, {'inOutExpo', function(t)
else else
return 1.0005 - 0.5 * 1000 ^ (1 - t) return 1.0005 - 0.5 * 1000 ^ (1 - t)
end end
end}) end, type = 'inout'})
table.insert(self, {'inCirc', function(t) return 1 - sqrt(1 - t * t) end}) table.insert(self, {'inCirc', function(t) return 1 - sqrt(1 - t * t) end, type = 'in'})
table.insert(self, {'outCirc', function(t) return sqrt(-t * t + 2 * t) end}) table.insert(self, {'outCirc', function(t) return sqrt(-t * t + 2 * t) end, type = 'out'})
table.insert(self, {'inOutCirc', function(t) table.insert(self, {'inOutCirc', function(t)
t = t * 2 t = t * 2
if t < 1 then if t < 1 then
@ -123,9 +123,9 @@ table.insert(self, {'inOutCirc', function(t)
t = t - 2 t = t - 2
return 0.5 + 0.5 * sqrt(1 - t * t) return 0.5 + 0.5 * sqrt(1 - t * t)
end end
end}) end, type = 'inout'})
table.insert(self, {'inBounce', function(t) return 1 - self.outBounce(1 - t) end}) table.insert(self, {'inBounce', function(t) return 1 - self.outBounce(1 - t) end, type = 'in'})
table.insert(self, {'outBounce', function(t) table.insert(self, {'outBounce', function(t)
if t < 1 / 2.75 then if t < 1 / 2.75 then
return 7.5625 * t * t return 7.5625 * t * t
@ -139,37 +139,37 @@ table.insert(self, {'outBounce', function(t)
t = t - 2.625 / 2.75 t = t - 2.625 / 2.75
return 7.5625 * t * t + 0.984375 return 7.5625 * t * t + 0.984375
end end
end}) end, type = 'out'})
table.insert(self, {'inOutBounce', function(t) table.insert(self, {'inOutBounce', function(t)
if t < 0.5 then if t < 0.5 then
return self.inBounce(t * 2) * 0.5 return self.inBounce(t * 2) * 0.5
else else
return self.outBounce(t * 2 - 1) * 0.5 + 0.5 return self.outBounce(t * 2 - 1) * 0.5 + 0.5
end end
end}) end, type = 'inout'})
table.insert(self, {'inElastic', function(t, a, p) table.insert(self, {'inElastic', function(t, a, p)
return 1 - self.outElastic(1 - t, a, p) return 1 - self.outElastic(1 - t, a, p)
end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true}) end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true, type = 'in'})
table.insert(self, {'outElastic', function(t, a, p) table.insert(self, {'outElastic', function(t, a, p)
return a * pow(2, -10 * t) * sin((t - p / (2 * pi) * asin(1/a)) * 2 * pi / p) + 1 return a * pow(2, -10 * t) * sin((t - p / (2 * pi) * asin(1/a)) * 2 * pi / p) + 1
end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true}) end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true, type = 'out'})
table.insert(self, {'inOutElastic', function(t, a, p) table.insert(self, {'inOutElastic', function(t, a, p)
return t < 0.5 return t < 0.5
and 0.5 * self.inElastic(t * 2, a, p) and 0.5 * self.inElastic(t * 2, a, p)
or 0.5 + 0.5 * self.outElastic(t * 2 - 1, a, p) or 0.5 + 0.5 * self.outElastic(t * 2 - 1, a, p)
end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true}) end, {1, 3, 1, 'a'}, {0, 2, 0.3, 'p'}, overridemin = true, type = 'inout'})
table.insert(self, {'inBack', function(t, a) table.insert(self, {'inBack', function(t, a)
return t * t * (a * t + t - a) return t * t * (a * t + t - a)
end, {0, 3, 1.70158, 'a'}, overridemin = true}) end, {0, 3, 1.70158, 'a'}, overridemin = true, type = 'in'})
table.insert(self, {'outBack', function(t, a) table.insert(self, {'outBack', function(t, a)
t = t - 1 return t * t * ((a + 1) * t + a) + 1 t = t - 1 return t * t * ((a + 1) * t + a) + 1
end, {0, 3, 1.70158, 'a'}, overridemin = true}) end, {0, 3, 1.70158, 'a'}, overridemin = true, type = 'out'})
table.insert(self, {'inOutBack', function(t, a) table.insert(self, {'inOutBack', function(t, a)
return t < 0.5 return t < 0.5
and 0.5 * self.inBack(t * 2, a) and 0.5 * self.inBack(t * 2, a)
or 0.5 + 0.5 * self.outBack(t * 2 - 1, a) or 0.5 + 0.5 * self.outBack(t * 2 - 1, a)
end, {0, 3, 1.70158, 'a'}, overridemin = true}) end, {0, 3, 1.70158, 'a'}, overridemin = true, type = 'inout'})
return self return self

BIN
inease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

BIN
inoutease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

BIN
instantease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

BIN
linearease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

View File

@ -3,6 +3,8 @@ for k, v in pairs(_G) do
table.insert(default_G, k) table.insert(default_G, k)
end end
love.graphics.setDefaultFilter('nearest', 'nearest')
ease = require 'ease' ease = require 'ease'
slider = require 'slider' slider = require 'slider'

BIN
outease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

BIN
transientease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

BIN
unknownease-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B