From de2fa9c4e2379158d0ed250050516810b6b908e4 Mon Sep 17 00:00:00 2001 From: AGulev Date: Fri, 3 Nov 2017 09:50:28 +0300 Subject: [PATCH 1/4] replace hashes with constants --- .luacheckrc | 42 +++++++++++++++++++++++++++++++++ monarch/monarch.lua | 47 +++++++++++++++++++++++-------------- monarch/screen.script | 16 ++++++------- monarch/transitions/gui.lua | 38 ++++++++++++++++-------------- 4 files changed, 99 insertions(+), 44 deletions(-) create mode 100644 .luacheckrc diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..4b1717c --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,42 @@ +std = "max" +files['.luacheckrc'].global = false +unused_args = false + +globals = { + "sys", + "go", + "gui", + "label", + "render", + "crash", + "sprite", + "sound", + "tilemap", + "spine", + "particlefx", + "physics", + "factory", + "collectionfactory", + "iac", + "msg", + "vmath", + "url", + "http", + "image", + "json", + "zlib", + "iap", + "push", + "facebook", + "hash", + "hash_to_hex", + "pprint", + "init", + "final", + "update", + "on_input", + "on_message", + "on_reload", + "window", + "unityads" +} diff --git a/monarch/monarch.lua b/monarch/monarch.lua index fce3bb2..1e59904 100644 --- a/monarch/monarch.lua +++ b/monarch/monarch.lua @@ -8,13 +8,24 @@ local CONTEXT = hash("monarch_context") local PROXY_LOADED = hash("proxy_loaded") local PROXY_UNLOADED = hash("proxy_unloaded") -M.TRANSITION_DONE = hash("transition_done") +local RELEASE_INPUT_FOCUS = hash("release_input_focus") +local ACQUIRE_INPUT_FOCUS = hash("acquire_input_focus") +local ASYNC_LOAD = hash("async_load") +local ENABLE = hash("enable") + +M.TRANSITION = {} +M.TRANSITION.DONE = hash("transition_done") +M.TRANSITION.SHOW_IN = hash("transition_show_in") +M.TRANSITION.SHOW_OUT = hash("transition_show_out") +M.TRANSITION.BACK_IN = hash("transition_back_in") +M.TRANSITION.BACK_OUT = hash("transition_back_out") + M.FOCUS_GAINED = hash("monarch_focus_gained") M.FOCUS_LOST = hash("monarch_focus_lost") local function screen_from_proxy(proxy) - for _,screen in pairs(screens) do + for _, screen in pairs(screens) do if screen.proxy == proxy then return screen end @@ -23,7 +34,7 @@ end local function screen_from_script() local url = msg.url() - for _,screen in pairs(screens) do + for _, screen in pairs(screens) do if screen.script == url then return screen end @@ -31,7 +42,7 @@ local function screen_from_script() end local function in_stack(id) - for i=1,#stack do + for i = 1, #stack do if stack[i].id == id then return true end @@ -60,11 +71,11 @@ local function show_out(screen, next_screen, cb) local co co = coroutine.create(function() screen.co = co - msg.post(screen.script, "release_input_focus") + msg.post(screen.script, RELEASE_INPUT_FOCUS) msg.post(screen.script, CONTEXT) coroutine.yield() if not next_screen.popup then - msg.post(screen.transition_url, "transition_show_out") + msg.post(screen.transition_url, M.TRANSITION.SHOW_OUT) coroutine.yield() msg.post(screen.proxy, "unload") coroutine.yield() @@ -84,13 +95,13 @@ local function show_in(screen, cb) screen.co = co msg.post(screen.script, CONTEXT) coroutine.yield() - msg.post(screen.proxy, "async_load") + msg.post(screen.proxy, ASYNC_LOAD) coroutine.yield() - msg.post(screen.proxy, "enable") + msg.post(screen.proxy, ENABLE) stack[#stack + 1] = screen - msg.post(screen.transition_url, "transition_show_in") + msg.post(screen.transition_url, M.TRANSITION.SHOW_IN) coroutine.yield() - msg.post(screen.script, "acquire_input_focus") + msg.post(screen.script, ACQUIRE_INPUT_FOCUS) if screen.focus_url then msg.post(screen.focus_url, M.FOCUS_GAINED) end @@ -107,13 +118,13 @@ local function back_in(screen, previous_screen, cb) msg.post(screen.script, CONTEXT) coroutine.yield() if not previous_screen.popup then - msg.post(screen.proxy, "async_load") + msg.post(screen.proxy, ASYNC_LOAD) coroutine.yield() - msg.post(screen.proxy, "enable") - msg.post(screen.transition_url, "transition_back_in") + msg.post(screen.proxy, ENABLE) + msg.post(screen.transition_url, M.TRANSITION.BACK_IN) coroutine.yield() end - msg.post(screen.script, "acquire_input_focus") + msg.post(screen.script, ACQUIRE_INPUT_FOCUS) if screen.focus_url then msg.post(screen.focus_url, M.FOCUS_GAINED) end @@ -127,10 +138,10 @@ local function back_out(screen, cb) local co co = coroutine.create(function() screen.co = co - msg.post(screen.script, "release_input_focus") + msg.post(screen.script, RELEASE_INPUT_FOCUS) msg.post(screen.script, CONTEXT) coroutine.yield() - msg.post(screen.transition_url, "transition_back_out") + msg.post(screen.transition_url, M.TRANSITION.BACK_OUT) coroutine.yield() msg.post(screen.proxy, "unload") if screen.focus_url then @@ -232,7 +243,7 @@ function M.on_message(message_id, message, sender) local screen = screen_from_script() assert(screen, "Unable to find screen for current script url") coroutine.resume(screen.co) - elseif message_id == M.TRANSITION_DONE then + elseif message_id == M.TRANSITION.DONE then local screen = screen_from_script() assert(screen, "Unable to find screen for current script url") coroutine.resume(screen.co) @@ -241,7 +252,7 @@ end function M.dump_stack() local s = "" - for i,screen in ipairs(stack) do + for i, screen in ipairs(stack) do s = s .. ("%d = %s\n"):format(i, tostring(screen.id)) end return s diff --git a/monarch/screen.script b/monarch/screen.script index 5e39119..40728b6 100644 --- a/monarch/screen.script +++ b/monarch/screen.script @@ -22,12 +22,12 @@ function on_message(self, message_id, message, sender) monarch.back() elseif message_id == hash("back") then monarch.back() - elseif message_id == hash("transition_show_in") - or message_id == hash("transition_show_out") - or message_id == hash("transition_back_in") - or message_id == hash("transition_back_out") then - msg.post(sender, "transition_done") - else - monarch.on_message(message_id, message, sender) + elseif message_id == monarch.TRANSITION.SHOW_IN + or message_id == monarch.TRANSITION.SHOW_OUT + or message_id == monarch.TRANSITION.BACK_IN + or message_id == monarch.TRANSITION.BACK_OUT then + msg.post(sender, monarch.TRANSITION.DONE) + else + monarch.on_message(message_id, message, sender) + end end -end diff --git a/monarch/transitions/gui.lua b/monarch/transitions/gui.lua index 5ecef8a..58631f5 100644 --- a/monarch/transitions/gui.lua +++ b/monarch/transitions/gui.lua @@ -1,3 +1,5 @@ +local monarch = require "monarch.monarch" + local M = {} local WIDTH = tonumber(sys.get_config("display.width")) @@ -6,17 +8,17 @@ local HEIGHT = tonumber(sys.get_config("display.height")) local LEFT = vmath.vector3(-WIDTH * 2, 0, 0) 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 BOTTOM = vmath.vector3(0, - HEIGHT * 2, 0) function M.instant(node, to, easing, duration, delay, url) - msg.post(url, "transition_done") + msg.post(url, monarch.TRANSITION.DONE) end local function slide_in(direction, node, to, easing, duration, delay, url) local from = to + direction gui.set_position(node, from) gui.animate(node, gui.PROP_POSITION, to, easing, duration, delay, function() - msg.post(url, "transition_done") + msg.post(url, monarch.TRANSITION.DONE) end) end @@ -41,7 +43,7 @@ local function slide_out(direction, node, from, easing, duration, delay, url) local to = from + direction gui.set_position(node, from) gui.animate(node, gui.PROP_POSITION, to, easing, duration, delay, function() - msg.post(url, "transition_done") + msg.post(url, monarch.TRANSITION.DONE) end) end @@ -67,23 +69,23 @@ function M.create(node) assert(node, "You must provide a node") local instance = {} - + local transitions = { - [hash("transition_show_in")] = M.instant, - [hash("transition_show_out")] = M.instant, - [hash("transition_back_in")] = M.instant, - [hash("transition_back_out")] = M.instant, + [monarch.TRANSITION.SHOW_IN] = M.instant, + [monarch.TRANSITION.SHOW_OUT] = M.instant, + [monarch.TRANSITION.BACK_IN] = M.instant, + [monarch.TRANSITION.BACK_OUT] = M.instant, } - + local initial_position = gui.get_position(node) - + -- Forward on_message calls here function instance.handle(message_id, message, sender) if transitions[message_id] then transitions[message_id](sender) end end - + -- Specify the transition function when this node is transitioned -- to -- @param fn Transition function (see slide_in_left and other above) @@ -91,7 +93,7 @@ function M.create(node) -- @param duration Transition duration -- @param delay Transition delay function instance.show_in(fn, easing, duration, delay) - transitions[hash("transition_show_in")] = function(url) + transitions[monarch.TRANSITION.SHOW_IN] = function(url) fn(node, initial_position, easing, duration, delay or 0, url) end return instance @@ -100,7 +102,7 @@ function M.create(node) -- Specify the transition function when this node is transitioned -- from when showing another screen function instance.show_out(fn, easing, duration, delay) - transitions[hash("transition_show_out")] = function(url) + transitions[monarch.TRANSITION.SHOW_OUT] = function(url) fn(node, initial_position, easing, duration, delay or 0, url) end return instance @@ -109,7 +111,7 @@ function M.create(node) --- Specify the transition function when this node is transitioned -- to when navigating back in the screen stack function instance.back_in(fn, easing, duration, delay) - transitions[hash("transition_back_in")] = function(url) + transitions[monarch.TRANSITION.BACK_IN] = function(url) fn(node, initial_position, easing, duration, delay or 0, url) end return instance @@ -118,13 +120,13 @@ function M.create(node) --- Specify the transition function when this node is transitioned -- from when navigating back in the screen stack function instance.back_out(fn, easing, duration, delay) - transitions[hash("transition_back_out")] = function(url) + transitions[monarch.TRANSITION.BACK_OUT] = function(url) fn(node, initial_position, easing, duration, delay or 0, url) end return instance end - + return instance end -return M \ No newline at end of file +return M From 00c458a05a45a41eedd9e8ca06bc8cb76b0a2cb2 Mon Sep 17 00:00:00 2001 From: AGulev Date: Fri, 3 Nov 2017 10:24:37 +0300 Subject: [PATCH 2/4] 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 From 36e3f69f4842ce4c75bfc98dc9ee4bd3509b53fb Mon Sep 17 00:00:00 2001 From: AGulev Date: Mon, 20 Nov 2017 18:52:18 +0300 Subject: [PATCH 3/4] add more information for focus events --- monarch/monarch.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/monarch/monarch.lua b/monarch/monarch.lua index 1e59904..5a13336 100644 --- a/monarch/monarch.lua +++ b/monarch/monarch.lua @@ -81,7 +81,7 @@ local function show_out(screen, next_screen, cb) coroutine.yield() end if screen.focus_url then - msg.post(screen.focus_url, M.FOCUS_LOST) + msg.post(screen.focus_url, M.FOCUS_LOST, {id = next_screen.id}) end screen.co = nil if cb then cb() end @@ -103,7 +103,7 @@ local function show_in(screen, cb) coroutine.yield() msg.post(screen.script, ACQUIRE_INPUT_FOCUS) if screen.focus_url then - msg.post(screen.focus_url, M.FOCUS_GAINED) + msg.post(screen.focus_url, M.FOCUS_GAINED, {id = screen.id}) end screen.co = nil if cb then cb() end @@ -126,7 +126,8 @@ local function back_in(screen, previous_screen, cb) end msg.post(screen.script, ACQUIRE_INPUT_FOCUS) if screen.focus_url then - msg.post(screen.focus_url, M.FOCUS_GAINED) + pprint(previous_screen) + msg.post(screen.focus_url, M.FOCUS_GAINED, {id = previous_screen.id}) end screen.co = nil if cb then cb() end @@ -145,7 +146,7 @@ local function back_out(screen, cb) coroutine.yield() msg.post(screen.proxy, "unload") if screen.focus_url then - msg.post(screen.focus_url, M.FOCUS_LOST) + msg.post(screen.focus_url, M.FOCUS_LOST, {id = screen.id}) end screen.co = nil if cb then cb() end From 8324b54fc58eb34604227352345c45c3b9c49e29 Mon Sep 17 00:00:00 2001 From: AGulev Date: Mon, 20 Nov 2017 18:57:06 +0300 Subject: [PATCH 4/4] remove unneed print --- monarch/monarch.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/monarch/monarch.lua b/monarch/monarch.lua index 5a13336..266598e 100644 --- a/monarch/monarch.lua +++ b/monarch/monarch.lua @@ -126,7 +126,6 @@ local function back_in(screen, previous_screen, cb) end msg.post(screen.script, ACQUIRE_INPUT_FOCUS) if screen.focus_url then - pprint(previous_screen) msg.post(screen.focus_url, M.FOCUS_GAINED, {id = previous_screen.id}) end screen.co = nil