diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index c29f3cd..e7eb3a6 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -121,11 +121,15 @@ local function create() local current_transition = nil local function create_transition(transition_id, node, fn, easing, duration, delay) + assert(transition_id, "You must provide a valid transition id") + assert(node, "You must provide a node") + assert(fn, "You must provide a transition function") + local t = transitions[transition_id] -- find if there's already a transition for the node in -- question and if so update it instead of creating a new -- transition - for _,transition in ipairs(t) do + for _,transition in ipairs(t.transitions) do if transition.node == node then transition.fn = fn transition.easing = easing diff --git a/test/test_transitions.lua b/test/test_transitions.lua index dbda472..4ef1a45 100644 --- a/test/test_transitions.lua +++ b/test/test_transitions.lua @@ -8,6 +8,12 @@ local easing = require "monarch.transitions.easings" return function() +local function wait_timeout(fn, ...) + local args = { ... } + cowait(function() return fn(unpack(args)) end, 5) + return fn(...) +end + describe("transitions", function() before(function() mock_msg.mock() @@ -22,6 +28,28 @@ describe("transitions", function() end) + it("should replace an existing transition with a new one", function() + local one = false + function dummy_transition1(node, to, easing, duration, delay, cb) + one = true + end + local two = false + function dummy_transition2(node, to, easing, duration, delay, cb) + two = true + end + + local node = gui.new_box_node(vmath.vector3(), vmath.vector3(100, 100, 0)) + local duration = 2 + local t = transitions.create(node) + t.show_in(dummy_transition1, easing.OUT, duration, delay or 0) + t.show_in(dummy_transition2, easing.OUT, duration, delay or 0) + t.handle(monarch.TRANSITION.SHOW_IN) + + wait_timeout(function() return one or two end) + assert(two) + assert(not one) + end) + it("should replay and immediately finish on layout change", function() function dummy_transition(node, to, easing, duration, delay, cb) print("dummy transition")