From 00c458a05a45a41eedd9e8ca06bc8cb76b0a2cb2 Mon Sep 17 00:00:00 2001 From: AGulev Date: Fri, 3 Nov 2017 10:24:37 +0300 Subject: [PATCH] scale_in and scale_out transactions --- example/popup.gui_script | 8 +++---- monarch/transitions/gui.lua | 44 ++++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/example/popup.gui_script b/example/popup.gui_script index 99d872f..50215c6 100644 --- a/example/popup.gui_script +++ b/example/popup.gui_script @@ -8,10 +8,10 @@ function init(self) gui.set_render_order(15) self.transition = transitions.create(gui.get_node("root")) - .show_in(transitions.slide_in_top, gui.EASING_OUTQUAD, 0.6, 0) - .show_out(transitions.slide_out_top, gui.EASING_INQUAD, 0.6, 0) - .back_in(transitions.slide_in_top, gui.EASING_OUTQUAD, 0.6, 0) - .back_out(transitions.slide_out_top, gui.EASING_INQUAD, 0.6, 0) + .show_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0) + .show_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0) + .back_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0) + .back_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0) end function on_input(self, action_id, action) diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index 58631f5..836b34e 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -10,6 +10,8 @@ local RIGHT = vmath.vector3(WIDTH * 2, 0, 0) local TOP = vmath.vector3(0, HEIGHT * 2, 0) local BOTTOM = vmath.vector3(0, - HEIGHT * 2, 0) +local ZERO_SCALE = vmath.vector3(0, 0, 1) + function M.instant(node, to, easing, duration, delay, url) msg.post(url, monarch.TRANSITION.DONE) end @@ -23,19 +25,19 @@ local function slide_in(direction, node, to, easing, duration, delay, url) end function M.slide_in_left(node, to, easing, duration, delay, url) - return slide_in(LEFT, node, to, easing, duration, delay, url) + return slide_in(LEFT, node, to.pos, easing, duration, delay, url) end function M.slide_in_right(node, to, easing, duration, delay, url) - slide_in(RIGHT, node, to, easing, duration, delay, url) + slide_in(RIGHT, node, to.pos, easing, duration, delay, url) end function M.slide_in_top(node, to, easing, duration, delay, url) - slide_in(TOP, node, to, easing, duration, delay, url) + slide_in(TOP, node, to.pos, easing, duration, delay, url) end function M.slide_in_bottom(node, to, easing, duration, delay, url) - slide_in(BOTTOM, node, to, easing, duration, delay, url) + slide_in(BOTTOM, node, to.pos, easing, duration, delay, url) end @@ -48,19 +50,33 @@ local function slide_out(direction, node, from, easing, duration, delay, url) end function M.slide_out_left(node, from, easing, duration, delay, url) - slide_out(LEFT, node, from, easing, duration, delay, url) + slide_out(LEFT, node, from.pos, easing, duration, delay, url) end function M.slide_out_right(node, from, easing, duration, delay, url) - slide_out(RIGHT, node, from, easing, duration, delay, url) + slide_out(RIGHT, node, from.pos, easing, duration, delay, url) end function M.slide_out_top(node, from, easing, duration, delay, url) - slide_out(TOP, node, from, easing, duration, delay, url) + slide_out(TOP, node, from.pos, easing, duration, delay, url) end function M.slide_out_bottom(node, from, easing, duration, delay, url) - slide_out(BOTTOM, node, from, easing, duration, delay, url) + slide_out(BOTTOM, node, from.pos, easing, duration, delay, url) +end + +function M.scale_in(node, to, easing, duration, delay, url) + gui.set_scale(node, ZERO_SCALE) + gui.animate(node, gui.PROP_SCALE, to.scale, easing, duration, delay, function() + msg.post(url, monarch.TRANSITION.DONE) + end) +end + +function M.scale_out(node, from, easing, duration, delay, url) + gui.set_scale(node, from.scale) + gui.animate(node, gui.PROP_SCALE, ZERO_SCALE, easing, duration, delay, function() + msg.post(url, monarch.TRANSITION.DONE) + end) end --- Create a transition for a node @@ -77,7 +93,9 @@ function M.create(node) [monarch.TRANSITION.BACK_OUT] = M.instant, } - local initial_position = gui.get_position(node) + local initial_data = {} + initial_data.pos = gui.get_position(node) + initial_data.scale = gui.get_scale(node) -- Forward on_message calls here function instance.handle(message_id, message, sender) @@ -94,7 +112,7 @@ function M.create(node) -- @param delay Transition delay function instance.show_in(fn, easing, duration, delay) transitions[monarch.TRANSITION.SHOW_IN] = function(url) - fn(node, initial_position, easing, duration, delay or 0, url) + fn(node, initial_data, easing, duration, delay or 0, url) end return instance end @@ -103,7 +121,7 @@ function M.create(node) -- from when showing another screen function instance.show_out(fn, easing, duration, delay) transitions[monarch.TRANSITION.SHOW_OUT] = function(url) - fn(node, initial_position, easing, duration, delay or 0, url) + fn(node, initial_data, easing, duration, delay or 0, url) end return instance end @@ -112,7 +130,7 @@ function M.create(node) -- to when navigating back in the screen stack function instance.back_in(fn, easing, duration, delay) transitions[monarch.TRANSITION.BACK_IN] = function(url) - fn(node, initial_position, easing, duration, delay or 0, url) + fn(node, initial_data, easing, duration, delay or 0, url) end return instance end @@ -121,7 +139,7 @@ function M.create(node) -- from when navigating back in the screen stack function instance.back_out(fn, easing, duration, delay) transitions[monarch.TRANSITION.BACK_OUT] = function(url) - fn(node, initial_position, easing, duration, delay or 0, url) + fn(node, initial_data, easing, duration, delay or 0, url) end return instance end