mirror of
https://github.com/britzl/monarch.git
synced 2025-06-27 10:27:49 +02:00
Merge pull request #8 from AGulev/master
Replace strings with constants / new type of transactions / information for the focus messages
This commit is contained in:
commit
62684f9795
42
.luacheckrc
Normal file
42
.luacheckrc
Normal file
@ -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"
|
||||
}
|
@ -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)
|
||||
|
@ -8,7 +8,19 @@ 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 UNLOAD = hash("unload")
|
||||
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")
|
||||
|
||||
@ -60,18 +72,18 @@ 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")
|
||||
msg.post(screen.proxy, UNLOAD)
|
||||
coroutine.yield()
|
||||
screen.loaded = false
|
||||
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
|
||||
@ -86,7 +98,7 @@ local function show_in(screen, reload, cb)
|
||||
msg.post(screen.script, CONTEXT)
|
||||
coroutine.yield()
|
||||
if reload and screen.loaded then
|
||||
msg.post(screen.proxy, "unload")
|
||||
msg.post(screen.proxy, UNLOAD)
|
||||
coroutine.yield()
|
||||
screen.loaded = false
|
||||
end
|
||||
@ -94,17 +106,17 @@ local function show_in(screen, reload, cb)
|
||||
-- and the popup asked to show this screen again
|
||||
-- in that case we shouldn't attempt to load it again
|
||||
if not screen.loaded then
|
||||
msg.post(screen.proxy, "async_load")
|
||||
msg.post(screen.proxy, ASYNC_LOAD)
|
||||
coroutine.yield()
|
||||
msg.post(screen.proxy, "enable")
|
||||
msg.post(screen.proxy, ENABLE)
|
||||
screen.loaded = true
|
||||
end
|
||||
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)
|
||||
msg.post(screen.focus_url, M.FOCUS_GAINED, {id = screen.id})
|
||||
end
|
||||
screen.co = nil
|
||||
if cb then cb() end
|
||||
@ -119,16 +131,16 @@ 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.proxy, ENABLE)
|
||||
screen.loaded = true
|
||||
msg.post(screen.transition_url, "transition_back_in")
|
||||
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)
|
||||
msg.post(screen.focus_url, M.FOCUS_GAINED, {id = previous_screen.id})
|
||||
end
|
||||
screen.co = nil
|
||||
if cb then cb() end
|
||||
@ -140,16 +152,16 @@ 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")
|
||||
msg.post(screen.proxy, UNLOAD)
|
||||
coroutine.yield()
|
||||
screen.loaded = false
|
||||
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
|
||||
@ -254,7 +266,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)
|
||||
|
@ -22,11 +22,11 @@ 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")
|
||||
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
|
||||
|
@ -1,3 +1,5 @@
|
||||
local monarch = require "monarch.monarch"
|
||||
|
||||
local M = {}
|
||||
|
||||
local WIDTH = tonumber(sys.get_config("display.width"))
|
||||
@ -8,32 +10,34 @@ 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, "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
|
||||
|
||||
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
|
||||
|
||||
|
||||
@ -41,24 +45,38 @@ 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
|
||||
|
||||
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
|
||||
@ -69,13 +87,15 @@ function M.create(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)
|
||||
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)
|
||||
@ -91,8 +111,8 @@ 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)
|
||||
fn(node, initial_position, easing, duration, delay or 0, url)
|
||||
transitions[monarch.TRANSITION.SHOW_IN] = function(url)
|
||||
fn(node, initial_data, easing, duration, delay or 0, url)
|
||||
end
|
||||
return instance
|
||||
end
|
||||
@ -100,8 +120,8 @@ 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)
|
||||
fn(node, initial_position, easing, duration, delay or 0, url)
|
||||
transitions[monarch.TRANSITION.SHOW_OUT] = function(url)
|
||||
fn(node, initial_data, easing, duration, delay or 0, url)
|
||||
end
|
||||
return instance
|
||||
end
|
||||
@ -109,8 +129,8 @@ 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)
|
||||
fn(node, initial_position, easing, duration, delay or 0, url)
|
||||
transitions[monarch.TRANSITION.BACK_IN] = function(url)
|
||||
fn(node, initial_data, easing, duration, delay or 0, url)
|
||||
end
|
||||
return instance
|
||||
end
|
||||
@ -118,8 +138,8 @@ 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)
|
||||
fn(node, initial_position, easing, duration, delay or 0, url)
|
||||
transitions[monarch.TRANSITION.BACK_OUT] = function(url)
|
||||
fn(node, initial_data, easing, duration, delay or 0, url)
|
||||
end
|
||||
return instance
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user