diff --git a/dropdown.lua b/dropdown.lua index 001949f..0b4b60a 100644 --- a/dropdown.lua +++ b/dropdown.lua @@ -70,40 +70,38 @@ function self.createDropdowns() x = padding + 128 + padding, y = padding, width = 128, - options = skeys(eases), + options = skeys(ease.eases), name = 'ease1' }) - ease = eases[d[dropdownId].options[d[dropdownId].selected]].f + ease.ease = ease.eases[d[dropdownId].options[d[dropdownId].selected]].f elseif d[dropdownId].selected == 2 then -- mix eases insertDropdown(d, { x = padding + 128 + padding, y = padding, width = 128, - options = skeys(eases), + options = skeys(ease.eases), name = 'ease1' }) insertDropdown(d, { x = padding + 128 + padding + 128 + padding, y = padding, width = 128, - options = skeys(eases), + options = skeys(ease.eases), name = 'ease2' }) - ease = mixEase(eases[d[dropdownId - 1].options[d[dropdownId - 1].selected]].f, eases[d[dropdownId].options[d[dropdownId].selected]].f, mixpoint) + ease.ease = ease.mixEase(ease.eases[d[dropdownId - 1].options[d[dropdownId - 1].selected]].f, ease.eases[d[dropdownId].options[d[dropdownId].selected]].f, mixpoint) elseif d[dropdownId].selected == 3 then -- create eases insertDropdown(d, { x = padding + 128 + padding, y = padding, width = 128, - options = skeys(eases), + options = skeys(ease.eases), name = 'ease1' }) end dropdowns = d - minEase = (self.kselected('ease1') and eases[self.kselected('ease1')].min == -1) or (self.kselected('ease2') and eases[self.kselected('ease2')].min == -1) - - return ease, minEase + minEase = (self.kselected('ease1') and ease.eases[self.kselected('ease1')].min == -1) or (self.kselected('ease2') and ease.eases[self.kselected('ease2')].min == -1) end function self.update(dt) diff --git a/ease.lua b/ease.lua new file mode 100644 index 0000000..ff73894 --- /dev/null +++ b/ease.lua @@ -0,0 +1,38 @@ +local self = {} + +local easelib = require 'easelib' + +function self.mixEase(e1, e2, point) + if not point then point = 0.5 end + + return function(a) + if a < point then + return e1(a / point) * point + else + return e2((a - point) / (1 - point)) * (1 - point) + point + end + end +end + +self.eases = {} +for i,v in pairs(easelib) do + local min = 0 + + local q = 10 + for i = 0, q do + local s = v[2](i / q) + if s < 0 then min = -1 end + end + + self.eases[v[1]] = { + f = v[2], + max = 1, + min = min, + i = i + } +end + +self.ease = nil +self.minEase = false + +return self \ No newline at end of file diff --git a/graph.lua b/graph.lua index 6d2c8a0..62b6ac9 100644 --- a/graph.lua +++ b/graph.lua @@ -7,12 +7,12 @@ function self.update(dt) for i = 1, quality do local a = (i - 1) / (quality - 1) if not graph[i] then - graph[i] = ease(a) + graph[i] = ease.ease(a) end end for i,v in ipairs(graph) do local a = (i - 1) / (quality - 1) - local b = ease(a) + local b = ease.ease(a) if minEase then b = b / 2 + 0.5 end @@ -78,10 +78,10 @@ function self.render() love.graphics.line(x + margin, y + h + padding * 2 + csize/2, x + w - margin, y + h + padding * 2 + csize/2) love.graphics.setColor(0.4, 0.4, 1, 1) - local a1 = ease(t) - local a2 = ease(math.max(math.min(t - 0.1, 1), 0)) + local a1 = ease.ease(t) + local a2 = ease.ease(math.max(math.min(t - 0.1, 1), 0)) local da = a1 - if love.timer.getTime() % 2 < 1 and math.floor(ease(0) + 0.5) ~= math.floor(ease(1) + 0.5) then + if love.timer.getTime() % 2 < 1 and math.floor(ease.ease(0) + 0.5) ~= math.floor(ease.ease(1) + 0.5) then da = 1 - da end if minEase then diff --git a/main.lua b/main.lua index 99b7548..b113fd9 100644 --- a/main.lua +++ b/main.lua @@ -3,52 +3,15 @@ for k, v in pairs(_G) do table.insert(default_G, k) end -local easelib = require 'easelib' +ease = require 'ease' dropdown = require 'dropdown' graph = require 'graph' --- utils - -function mix(x, y, a) - return x * (1 - a) + y * a -end +require 'util' -- exports into global table -- eases -function mixEase(e1, e2, point) - if not point then point = 0.5 end - - return function(a) - if a < point then - return e1(a / point) * point - else - return e2((a - point) / (1 - point)) * (1 - point) + point - end - end -end - -eases = {} -for i,v in pairs(easelib) do - local min = 0 - - local q = 10 - for i = 0, q do - local s = v[2](i / q) - if s < 0 then min = -1 end - end - - eases[v[1]] = { - f = v[2], - max = 1, - min = min, - i = i - } -end - -ease = nil -minEase = false - -- rendering constants padding = 6 diff --git a/util.lua b/util.lua new file mode 100644 index 0000000..b6e5ccf --- /dev/null +++ b/util.lua @@ -0,0 +1,3 @@ +function mix(x, y, a) + return x * (1 - a) + y * a +end \ No newline at end of file