mirror of
https://github.com/britzl/monarch.git
synced 2025-11-26 19:00:53 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d8fa8e220 | ||
|
|
df2a2a62ea | ||
|
|
4e13660d63 | ||
|
|
0191a4e540 | ||
|
|
c601174b9d | ||
|
|
66d2c98ccc | ||
|
|
e8249229b9 |
2
.github/workflows/ci-workflow.yml
vendored
2
.github/workflows/ci-workflow.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v1
|
||||||
with:
|
with:
|
||||||
java-version: '11'
|
java-version: '17'
|
||||||
- name: Run.sh
|
- name: Run.sh
|
||||||
env:
|
env:
|
||||||
DEFOLD_USER: bjorn.ritzl@gmail.com
|
DEFOLD_USER: bjorn.ritzl@gmail.com
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ Remove a previously added listener.
|
|||||||
|
|
||||||
|
|
||||||
## monarch.post(screen_id, message_id, [message])
|
## monarch.post(screen_id, message_id, [message])
|
||||||
Post a message to a visible screen. If the screen is created through a collection proxy it must have specified a receiver url. If the screen is created through a collection factory the function will post the message to all game objects within the collection.
|
Post a message to a visible screen. The screen must have set a message listener using `monarch.on_post()`.
|
||||||
|
|
||||||
**PARAMETERS**
|
**PARAMETERS**
|
||||||
* `screen_id` (string|hash) - Id of the screen to post message to
|
* `screen_id` (string|hash) - Id of the screen to post message to
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 83 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 92 KiB |
@@ -5,11 +5,13 @@ function init(self)
|
|||||||
msg.post(".", "acquire_input_focus")
|
msg.post(".", "acquire_input_focus")
|
||||||
gui.set_render_order(15)
|
gui.set_render_order(15)
|
||||||
|
|
||||||
self.transition = transitions.create(gui.get_node("root"))
|
local transition = transitions.create(gui.get_node("root"))
|
||||||
.show_in(transitions.slide_in_top, gui.EASING_OUTQUAD, 0.6, 0)
|
.show_in(transitions.slide_in_top, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
.show_out(transitions.slide_out_top, gui.EASING_INQUAD, 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_in(transitions.slide_in_top, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
.back_out(transitions.slide_out_top, gui.EASING_INQUAD, 0.6, 0)
|
.back_out(transitions.slide_out_top, gui.EASING_INQUAD, 0.6, 0)
|
||||||
|
|
||||||
|
monarch.on_transition("about", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -27,5 +29,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -21,16 +21,6 @@ embedded_instances {
|
|||||||
" value: \"menu\"\n"
|
" value: \"menu\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
|
||||||
" id: \"transition_id\"\n"
|
|
||||||
" value: \"/go\"\n"
|
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
|
||||||
" }\n"
|
|
||||||
" properties {\n"
|
|
||||||
" id: \"focus_id\"\n"
|
|
||||||
" value: \"/go\"\n"
|
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
|
||||||
" }\n"
|
|
||||||
" property_decls {\n"
|
" property_decls {\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
@@ -146,11 +136,6 @@ embedded_instances {
|
|||||||
" value: \"pregame\"\n"
|
" value: \"pregame\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
|
||||||
" id: \"transition_url\"\n"
|
|
||||||
" value: \"pregame:/go#pregame\"\n"
|
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
|
||||||
" }\n"
|
|
||||||
" property_decls {\n"
|
" property_decls {\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
@@ -211,11 +196,6 @@ embedded_instances {
|
|||||||
" value: \"game\"\n"
|
" value: \"game\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
|
||||||
" id: \"transition_url\"\n"
|
|
||||||
" value: \"game:/go#game\"\n"
|
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
|
||||||
" }\n"
|
|
||||||
" property_decls {\n"
|
" property_decls {\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
@@ -287,16 +267,6 @@ embedded_instances {
|
|||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
" properties {\n"
|
||||||
" id: \"transition_url\"\n"
|
|
||||||
" value: \"about:/go#about\"\n"
|
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
|
||||||
" }\n"
|
|
||||||
" properties {\n"
|
|
||||||
" id: \"focus_url\"\n"
|
|
||||||
" value: \"about:/go#about\"\n"
|
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
|
||||||
" }\n"
|
|
||||||
" properties {\n"
|
|
||||||
" id: \"preload\"\n"
|
" id: \"preload\"\n"
|
||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
@@ -376,11 +346,6 @@ embedded_instances {
|
|||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" properties {\n"
|
|
||||||
" id: \"transition_url\"\n"
|
|
||||||
" value: \"confirm:/go#confirm\"\n"
|
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
|
||||||
" }\n"
|
|
||||||
" property_decls {\n"
|
" property_decls {\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
|
|||||||
@@ -7,11 +7,13 @@ function init(self)
|
|||||||
self.no = gui.get_node("no_button")
|
self.no = gui.get_node("no_button")
|
||||||
gui.set_render_order(15)
|
gui.set_render_order(15)
|
||||||
|
|
||||||
self.transition = transitions.create(gui.get_node("root"))
|
local transition = transitions.create(gui.get_node("root"))
|
||||||
.show_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
.show_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
||||||
.show_out(transitions.scale_out, gui.EASING_INBACK, 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_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
||||||
.back_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0)
|
.back_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0)
|
||||||
|
|
||||||
|
monarch.on_transition("confirm", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -35,5 +37,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ function init(self)
|
|||||||
local data = monarch.data(hash("game"))
|
local data = monarch.data(hash("game"))
|
||||||
gui.set_text(gui.get_node("level"), tostring(data.level))
|
gui.set_text(gui.get_node("level"), tostring(data.level))
|
||||||
|
|
||||||
self.transition = transitions.in_right_out_left(gui.get_node("root"), 0.6, 0)
|
local transition = transitions.in_right_out_left(gui.get_node("root"), 0.6, 0)
|
||||||
|
monarch.on_transition("game", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -21,5 +22,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ function init(self)
|
|||||||
|
|
||||||
gui.animate(gui.get_node("spinner"), gui.PROP_ROTATION, vmath.vector3(0, 0, -360), gui.EASING_INOUTQUAD, 2, 0, nil, gui.PLAYBACK_LOOP_FORWARD)
|
gui.animate(gui.get_node("spinner"), gui.PROP_ROTATION, vmath.vector3(0, 0, -360), gui.EASING_INOUTQUAD, 2, 0, nil, gui.PLAYBACK_LOOP_FORWARD)
|
||||||
|
|
||||||
self.transition = transitions.fade_in_out(gui.get_node("root"), 0.6, 0)
|
local transition = transitions.fade_in_out(gui.get_node("root"), 0.6, 0)
|
||||||
|
monarch.on_transition("menu", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -28,7 +29,7 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
if message_id == monarch.FOCUS.GAINED then
|
if message_id == monarch.FOCUS.GAINED then
|
||||||
gui.set_text(gui.get_node("timestamp"), os.date())
|
gui.set_text(gui.get_node("timestamp"), os.date())
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,11 +10,12 @@ function init(self)
|
|||||||
|
|
||||||
gui.animate(gui.get_node("spinner"), gui.PROP_ROTATION, vmath.vector3(0, 0, -360), gui.EASING_INOUTQUAD, 2, 0, nil, gui.PLAYBACK_LOOP_FORWARD)
|
gui.animate(gui.get_node("spinner"), gui.PROP_ROTATION, vmath.vector3(0, 0, -360), gui.EASING_INOUTQUAD, 2, 0, nil, gui.PLAYBACK_LOOP_FORWARD)
|
||||||
|
|
||||||
self.transition = transitions.create(gui.get_node("root"))
|
local transition = transitions.create(gui.get_node("root"))
|
||||||
.show_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
.show_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
||||||
.show_out(transitions.scale_out, gui.EASING_INBACK, 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_in(transitions.scale_in, gui.EASING_OUTBACK, 0.3, 0)
|
||||||
.back_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0)
|
.back_out(transitions.scale_out, gui.EASING_INBACK, 0.3, 0)
|
||||||
|
monarch.on_transition("popup", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -39,5 +40,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ function init(self)
|
|||||||
self.play = gui.get_node("play_button")
|
self.play = gui.get_node("play_button")
|
||||||
self.back = gui.get_node("back_button")
|
self.back = gui.get_node("back_button")
|
||||||
|
|
||||||
self.transition = transitions.in_right_out_left(gui.get_node("root"), 0.6, 0)
|
local transition = transitions.in_right_out_left(gui.get_node("root"), 0.6, 0)
|
||||||
|
monarch.on_transition("pregame", transition)
|
||||||
end
|
end
|
||||||
|
|
||||||
function on_input(self, action_id, action)
|
function on_input(self, action_id, action)
|
||||||
@@ -26,5 +27,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
self.transition.handle(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -23,6 +23,5 @@ function on_input(self, action_id, action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
print("window2", message_id, message, sender)
|
|
||||||
monarch.on_message(message_id, message, sender)
|
monarch.on_message(message_id, message, sender)
|
||||||
end
|
end
|
||||||
@@ -5,7 +5,7 @@ dependencies#0 = https://github.com/britzl/deftest/archive/2.7.0.zip
|
|||||||
dependencies#1 = https://github.com/defold/lua-language-server/releases/download/v0.0.3/release.zip
|
dependencies#1 = https://github.com/defold/lua-language-server/releases/download/v0.0.3/release.zip
|
||||||
|
|
||||||
[bootstrap]
|
[bootstrap]
|
||||||
main_collection = /example/slidingwindow/slidingwindow.collectionc
|
main_collection = /example/advanced/advanced.collectionc
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
game_binding = /input/game.input_bindingc
|
game_binding = /input/game.input_bindingc
|
||||||
|
|||||||
@@ -3,17 +3,25 @@ local async = require "monarch.utils.async"
|
|||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
local CONTEXT = hash("monarch_context")
|
local WAITFOR_COWAIT = hash("waitfor_cowait")
|
||||||
local PROXY_LOADED = hash("proxy_loaded")
|
local WAITFOR_CONTEXT = hash("waitfor_monarch_context")
|
||||||
local PROXY_UNLOADED = hash("proxy_unloaded")
|
local WAITFOR_PROXY_LOADED = hash("waitfor_proxy_loaded")
|
||||||
local LAYOUT_CHANGED = hash("layout_changed")
|
local WAITFOR_PROXY_UNLOADED = hash("waitfor_proxy_unloaded")
|
||||||
|
local WAITFOR_TRANSITION_DONE = hash("waitfor_transition_done")
|
||||||
|
|
||||||
local RELEASE_INPUT_FOCUS = hash("release_input_focus")
|
local MSG_CONTEXT = hash("monarch_context")
|
||||||
local ACQUIRE_INPUT_FOCUS = hash("acquire_input_focus")
|
local MSG_PROXY_LOADED = hash("proxy_loaded")
|
||||||
local ASYNC_LOAD = hash("async_load")
|
local MSG_PROXY_UNLOADED = hash("proxy_unloaded")
|
||||||
local UNLOAD = hash("unload")
|
local MSG_LAYOUT_CHANGED = hash("layout_changed")
|
||||||
local ENABLE = hash("enable")
|
local MSG_RELEASE_INPUT_FOCUS = hash("release_input_focus")
|
||||||
local DISABLE = hash("disable")
|
local MSG_ACQUIRE_INPUT_FOCUS = hash("acquire_input_focus")
|
||||||
|
local MSG_ASYNC_LOAD = hash("async_load")
|
||||||
|
local MSG_UNLOAD = hash("unload")
|
||||||
|
local MSG_ENABLE = hash("enable")
|
||||||
|
local MSG_DISABLE = hash("disable")
|
||||||
|
|
||||||
|
|
||||||
|
local DEPRECATED = hash("__DEPRECATED__")
|
||||||
|
|
||||||
-- transition messages
|
-- transition messages
|
||||||
M.TRANSITION = {}
|
M.TRANSITION = {}
|
||||||
@@ -82,10 +90,13 @@ local function assign(to, from)
|
|||||||
return to
|
return to
|
||||||
end
|
end
|
||||||
|
|
||||||
local function cowait(delay)
|
local function cowait(screen, delay)
|
||||||
|
log("cowait()", screen.id, delay)
|
||||||
local co = coroutine.running()
|
local co = coroutine.running()
|
||||||
assert(co, "You must run this from within a coroutine")
|
assert(co, "You must run this from within a coroutine")
|
||||||
|
screen.wait_for = WAITFOR_COWAIT
|
||||||
timer.delay(delay, false, function()
|
timer.delay(delay, false, function()
|
||||||
|
screen.wait_for = nil
|
||||||
assert(coroutine.resume(co))
|
assert(coroutine.resume(co))
|
||||||
end)
|
end)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
@@ -261,12 +272,6 @@ end
|
|||||||
-- keep input focus when below a popup
|
-- keep input focus when below a popup
|
||||||
-- * others_keep_input_focus_when_below_screen - If screens below this
|
-- * others_keep_input_focus_when_below_screen - If screens below this
|
||||||
-- screen should keep input focus
|
-- screen should keep input focus
|
||||||
-- * transition_url - URL to a script that is responsible for the
|
|
||||||
-- screen transitions
|
|
||||||
-- * focus_url - URL to a script that is to be notified of focus
|
|
||||||
-- lost/gained events
|
|
||||||
-- * receiver_url - URL to a script that is to receive messages sent
|
|
||||||
-- using monarch.send()
|
|
||||||
-- * auto_preload - true if the screen should be automatically preloaded
|
-- * auto_preload - true if the screen should be automatically preloaded
|
||||||
function M.register_proxy(id, proxy, settings)
|
function M.register_proxy(id, proxy, settings)
|
||||||
assert(proxy, "You must provide a collection proxy URL")
|
assert(proxy, "You must provide a collection proxy URL")
|
||||||
@@ -276,6 +281,15 @@ function M.register_proxy(id, proxy, settings)
|
|||||||
screen.focus_url = settings and settings.focus_url
|
screen.focus_url = settings and settings.focus_url
|
||||||
screen.receiver_url = settings and settings.receiver_url
|
screen.receiver_url = settings and settings.receiver_url
|
||||||
screen.auto_preload = settings and settings.auto_preload
|
screen.auto_preload = settings and settings.auto_preload
|
||||||
|
if screen.transition_url.fragment == DEPRECATED then
|
||||||
|
screen.transition_url = nil
|
||||||
|
end
|
||||||
|
if screen.focus_url.fragment == DEPRECATED then
|
||||||
|
screen.focus_url = nil
|
||||||
|
end
|
||||||
|
if screen.receiver_url.fragment == DEPRECATED then
|
||||||
|
screen.receiver_url = nil
|
||||||
|
end
|
||||||
if screen.auto_preload then
|
if screen.auto_preload then
|
||||||
M.preload(id)
|
M.preload(id)
|
||||||
end
|
end
|
||||||
@@ -298,10 +312,6 @@ M.register = M.register_proxy
|
|||||||
-- keep input focus when below a popup
|
-- keep input focus when below a popup
|
||||||
-- * others_keep_input_focus_when_below_screen - If screens below this
|
-- * others_keep_input_focus_when_below_screen - If screens below this
|
||||||
-- screen should keep input focus
|
-- screen should keep input focus
|
||||||
-- * transition_id - Id of the game object in the collection that is responsible
|
|
||||||
-- for the screen transitions
|
|
||||||
-- * focus_id - Id of the game object in the collection that is to be notified
|
|
||||||
-- of focus lost/gained events
|
|
||||||
-- * auto_preload - true if the screen should be automatically preloaded
|
-- * auto_preload - true if the screen should be automatically preloaded
|
||||||
function M.register_factory(id, factory, settings)
|
function M.register_factory(id, factory, settings)
|
||||||
assert(factory, "You must provide a collection factory URL")
|
assert(factory, "You must provide a collection factory URL")
|
||||||
@@ -310,6 +320,13 @@ function M.register_factory(id, factory, settings)
|
|||||||
screen.transition_id = settings and settings.transition_id
|
screen.transition_id = settings and settings.transition_id
|
||||||
screen.focus_id = settings and settings.focus_id
|
screen.focus_id = settings and settings.focus_id
|
||||||
screen.auto_preload = settings and settings.auto_preload
|
screen.auto_preload = settings and settings.auto_preload
|
||||||
|
|
||||||
|
if screen.transition_id == DEPRECATED then
|
||||||
|
screen.transition_id = nil
|
||||||
|
end
|
||||||
|
if screen.focus_id == DEPRECATED then
|
||||||
|
screen.focus_id = nil
|
||||||
|
end
|
||||||
if screen.auto_preload then
|
if screen.auto_preload then
|
||||||
M.preload(id)
|
M.preload(id)
|
||||||
end
|
end
|
||||||
@@ -323,6 +340,7 @@ function M.unregister(id)
|
|||||||
id = tohash(id)
|
id = tohash(id)
|
||||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
log("unregister()", id)
|
log("unregister()", id)
|
||||||
|
local screen = screens[id]
|
||||||
screens[id] = nil
|
screens[id] = nil
|
||||||
-- remove screen from stack
|
-- remove screen from stack
|
||||||
for i = #stack, 1, -1 do
|
for i = #stack, 1, -1 do
|
||||||
@@ -330,16 +348,20 @@ function M.unregister(id)
|
|||||||
table.remove(stack, i)
|
table.remove(stack, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
screen.unregistered = true
|
||||||
|
if screen.wait_for then
|
||||||
|
assert(coroutine.resume(screen.co))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function acquire_input(screen)
|
local function acquire_input(screen)
|
||||||
log("acquire_input()", screen.id)
|
log("acquire_input()", screen.id)
|
||||||
if not screen.input then
|
if not screen.input then
|
||||||
if screen.proxy then
|
if screen.proxy then
|
||||||
msg.post(screen.script, ACQUIRE_INPUT_FOCUS)
|
msg.post(screen.script, MSG_ACQUIRE_INPUT_FOCUS)
|
||||||
elseif screen.factory then
|
elseif screen.factory then
|
||||||
for id,instance in pairs(screen.factory_ids) do
|
for id,instance in pairs(screen.factory_ids) do
|
||||||
msg.post(instance, ACQUIRE_INPUT_FOCUS)
|
msg.post(instance, MSG_ACQUIRE_INPUT_FOCUS)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
screen.input = true
|
screen.input = true
|
||||||
@@ -357,10 +379,10 @@ local function release_input(screen, next_screen)
|
|||||||
local release_focus = not keep_if_next_is_popup and not keep_when_below_next
|
local release_focus = not keep_if_next_is_popup and not keep_when_below_next
|
||||||
if release_focus then
|
if release_focus then
|
||||||
if screen.proxy then
|
if screen.proxy then
|
||||||
msg.post(screen.script, RELEASE_INPUT_FOCUS)
|
msg.post(screen.script, MSG_RELEASE_INPUT_FOCUS)
|
||||||
elseif screen.factory then
|
elseif screen.factory then
|
||||||
for id,instance in pairs(screen.factory_ids) do
|
for id,instance in pairs(screen.factory_ids) do
|
||||||
msg.post(instance, RELEASE_INPUT_FOCUS)
|
msg.post(instance, MSG_RELEASE_INPUT_FOCUS)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
screen.input = false
|
screen.input = false
|
||||||
@@ -370,24 +392,25 @@ end
|
|||||||
|
|
||||||
local function change_context(screen)
|
local function change_context(screen)
|
||||||
log("change_context()", screen.id)
|
log("change_context()", screen.id)
|
||||||
screen.wait_for = CONTEXT
|
screen.wait_for = WAITFOR_CONTEXT
|
||||||
msg.post(screen.script, CONTEXT, { id = screen.id })
|
msg.post(screen.script, MSG_CONTEXT, { id = screen.id })
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
screen.wait_for = nil
|
screen.wait_for = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local function unload(screen, force)
|
local function unload(screen, force)
|
||||||
|
if screen.unregistered then return end
|
||||||
if screen.proxy then
|
if screen.proxy then
|
||||||
log("unload() proxy", screen.id)
|
log("unload() proxy", screen.id)
|
||||||
if screen.auto_preload and not force then
|
if screen.auto_preload and not force then
|
||||||
if screen.loaded then
|
if screen.loaded then
|
||||||
msg.post(screen.proxy, DISABLE)
|
msg.post(screen.proxy, MSG_DISABLE)
|
||||||
screen.loaded = false
|
screen.loaded = false
|
||||||
end
|
end
|
||||||
screen.preloaded = true
|
screen.preloaded = true
|
||||||
else
|
else
|
||||||
screen.wait_for = PROXY_UNLOADED
|
screen.wait_for = WAITFOR_PROXY_UNLOADED
|
||||||
msg.post(screen.proxy, UNLOAD)
|
msg.post(screen.proxy, MSG_UNLOAD)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
screen.loaded = false
|
screen.loaded = false
|
||||||
screen.preloaded = false
|
screen.preloaded = false
|
||||||
@@ -411,8 +434,8 @@ local function unload(screen, force)
|
|||||||
-- we need to wait here in case the unloaded screen contained any screens
|
-- we need to wait here in case the unloaded screen contained any screens
|
||||||
-- if this is the case we need to let these sub-screens have their final()
|
-- if this is the case we need to let these sub-screens have their final()
|
||||||
-- functions called so that they have time to call unregister()
|
-- functions called so that they have time to call unregister()
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -435,9 +458,13 @@ local function preload(screen)
|
|||||||
screen.preloading = false
|
screen.preloading = false
|
||||||
return false, error_message
|
return false, error_message
|
||||||
end
|
end
|
||||||
screen.wait_for = PROXY_LOADED
|
screen.wait_for = WAITFOR_PROXY_LOADED
|
||||||
msg.post(screen.proxy, ASYNC_LOAD)
|
msg.post(screen.proxy, MSG_ASYNC_LOAD)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
screen.wait_for = nil
|
||||||
|
if screen.unregistered then
|
||||||
|
return false, "Screen was unregistered while loading"
|
||||||
|
end
|
||||||
elseif screen.factory then
|
elseif screen.factory then
|
||||||
log("preload() factory")
|
log("preload() factory")
|
||||||
if collectionfactory.get_status(screen.factory) == collectionfactory.STATUS_UNLOADED then
|
if collectionfactory.get_status(screen.factory) == collectionfactory.STATUS_UNLOADED then
|
||||||
@@ -445,6 +472,9 @@ local function preload(screen)
|
|||||||
assert(coroutine.resume(screen.co))
|
assert(coroutine.resume(screen.co))
|
||||||
end)
|
end)
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
if screen.unregistered then
|
||||||
|
return false, "Screen was unregistered while loading"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if collectionfactory.get_status(screen.factory) ~= collectionfactory.STATUS_LOADED then
|
if collectionfactory.get_status(screen.factory) ~= collectionfactory.STATUS_LOADED then
|
||||||
@@ -476,7 +506,7 @@ local function load(screen)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if screen.proxy then
|
if screen.proxy then
|
||||||
msg.post(screen.proxy, ENABLE)
|
msg.post(screen.proxy, MSG_ENABLE)
|
||||||
elseif screen.factory then
|
elseif screen.factory then
|
||||||
screen.factory_ids = collectionfactory.create(screen.factory)
|
screen.factory_ids = collectionfactory.create(screen.factory)
|
||||||
screen.transition_url = screen.factory_ids[screen.transition_id]
|
screen.transition_url = screen.factory_ids[screen.transition_id]
|
||||||
@@ -489,8 +519,9 @@ end
|
|||||||
|
|
||||||
local function transition(screen, message_id, message, wait)
|
local function transition(screen, message_id, message, wait)
|
||||||
log("transition()", screen.id)
|
log("transition()", screen.id)
|
||||||
|
if screen.unregistered then return end
|
||||||
if screen.transition_url then
|
if screen.transition_url then
|
||||||
screen.wait_for = M.TRANSITION.DONE
|
screen.wait_for = WAITFOR_TRANSITION_DONE
|
||||||
msg.post(screen.transition_url, message_id, message)
|
msg.post(screen.transition_url, message_id, message)
|
||||||
if wait then
|
if wait then
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
@@ -512,14 +543,15 @@ end
|
|||||||
|
|
||||||
local function focus_lost(screen, next_screen)
|
local function focus_lost(screen, next_screen)
|
||||||
log("focus_lost()", screen.id)
|
log("focus_lost()", screen.id)
|
||||||
|
if screen.unregistered then return end
|
||||||
if screen.focus_url then
|
if screen.focus_url then
|
||||||
msg.post(screen.focus_url, M.FOCUS.LOST, { id = next_screen and next_screen.id })
|
msg.post(screen.focus_url, M.FOCUS.LOST, { id = next_screen and next_screen.id })
|
||||||
-- if there's no transition on the screen losing focus and it gets
|
-- if there's no transition on the screen losing focus and it gets
|
||||||
-- unloaded this will happen before the focus_lost message reaches
|
-- unloaded this will happen before the focus_lost message reaches
|
||||||
-- the focus_url
|
-- the focus_url
|
||||||
-- we add a delay to ensure the message queue has time to be processed
|
-- we add a delay to ensure the message queue has time to be processed
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
else
|
else
|
||||||
log("focus_lost() no focus url - ignoring")
|
log("focus_lost() no focus url - ignoring")
|
||||||
end
|
end
|
||||||
@@ -640,7 +672,7 @@ local function show_in(screen, previous_screen, reload, add_to_stack, wait_for_t
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- wait one frame so that the init() of any script have time to run before starting transitions
|
-- wait one frame so that the init() of any script have time to run before starting transitions
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
reset_timestep(screen)
|
reset_timestep(screen)
|
||||||
transition(screen, M.TRANSITION.SHOW_IN, { previous_screen = previous_screen and previous_screen.id }, wait_for_transition)
|
transition(screen, M.TRANSITION.SHOW_IN, { previous_screen = previous_screen and previous_screen.id }, wait_for_transition)
|
||||||
screen.visible = true
|
screen.visible = true
|
||||||
@@ -666,7 +698,7 @@ local function back_in(screen, previous_screen, wait_for_transition, cb)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- wait one frame so that the init() of any script have time to run before starting transitions
|
-- wait one frame so that the init() of any script have time to run before starting transitions
|
||||||
cowait(0)
|
cowait(screen, 0)
|
||||||
reset_timestep(screen)
|
reset_timestep(screen)
|
||||||
if previous_screen and not previous_screen.popup then
|
if previous_screen and not previous_screen.popup then
|
||||||
transition(screen, M.TRANSITION.BACK_IN, { previous_screen = previous_screen.id }, wait_for_transition)
|
transition(screen, M.TRANSITION.BACK_IN, { previous_screen = previous_screen.id }, wait_for_transition)
|
||||||
@@ -1141,45 +1173,39 @@ function M.post(id, message_id, message)
|
|||||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
|
||||||
local screen = screens[id]
|
local screen = screens[id]
|
||||||
if screen.proxy then
|
if screen.receiver_url then
|
||||||
if screen.receiver_url then
|
log("post() sending message to", screen.receiver_url)
|
||||||
log("post() sending message to", screen.receiver_url)
|
msg.post(screen.receiver_url, message_id, message)
|
||||||
msg.post(screen.receiver_url, message_id, message)
|
|
||||||
else
|
|
||||||
return false, "Unable to post message since screen has no receiver url specified"
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
for id,instance in pairs(screen.factory_ids) do
|
return false, "Unable to post message since screen has no receiver url specified. Set one using monarch.on_post()."
|
||||||
msg.post(instance, message_id, message)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function M.on_message(message_id, message, sender)
|
function M.on_message(message_id, message, sender)
|
||||||
if message_id == PROXY_LOADED then
|
if message_id == MSG_PROXY_LOADED then
|
||||||
local screen = find_screen(sender)
|
local screen = find_screen(sender)
|
||||||
assert(screen, "Unable to find screen for loaded proxy")
|
assert(screen, "Unable to find screen for loaded proxy")
|
||||||
if screen.wait_for == PROXY_LOADED then
|
if screen.wait_for == WAITFOR_PROXY_LOADED then
|
||||||
assert(coroutine.resume(screen.co))
|
assert(coroutine.resume(screen.co))
|
||||||
end
|
end
|
||||||
elseif message_id == PROXY_UNLOADED then
|
elseif message_id == MSG_PROXY_UNLOADED then
|
||||||
local screen = find_screen(sender)
|
local screen = find_screen(sender)
|
||||||
assert(screen, "Unable to find screen for unloaded proxy")
|
assert(screen, "Unable to find screen for unloaded proxy")
|
||||||
if screen.wait_for == PROXY_UNLOADED then
|
if screen.wait_for == WAITFOR_PROXY_UNLOADED then
|
||||||
assert(coroutine.resume(screen.co))
|
assert(coroutine.resume(screen.co))
|
||||||
end
|
end
|
||||||
elseif message_id == CONTEXT then
|
elseif message_id == MSG_CONTEXT then
|
||||||
local screen = find_screen(sender)
|
local screen = find_screen(sender)
|
||||||
assert(screen, "Unable to find screen for current script url")
|
assert(screen, "Unable to find screen for current script url")
|
||||||
if screen.wait_for == CONTEXT then
|
if screen.wait_for == WAITFOR_CONTEXT then
|
||||||
assert(coroutine.resume(screen.co))
|
assert(coroutine.resume(screen.co))
|
||||||
end
|
end
|
||||||
elseif message_id == M.TRANSITION.DONE then
|
elseif message_id == M.TRANSITION.DONE then
|
||||||
local screen = find_transition_screen(sender)
|
local screen = find_transition_screen(sender)
|
||||||
assert(screen, "Unable to find screen for transition")
|
assert(screen, "Unable to find screen for transition")
|
||||||
if screen.wait_for == M.TRANSITION.DONE then
|
if screen.wait_for == WAITFOR_TRANSITION_DONE then
|
||||||
assert(coroutine.resume(screen.co))
|
assert(coroutine.resume(screen.co))
|
||||||
end
|
end
|
||||||
elseif message_id == M.TRANSITION.SHOW_IN
|
elseif message_id == M.TRANSITION.SHOW_IN
|
||||||
@@ -1192,7 +1218,7 @@ function M.on_message(message_id, message, sender)
|
|||||||
if screen.transition_fn then
|
if screen.transition_fn then
|
||||||
screen.transition_fn(message_id, message, sender)
|
screen.transition_fn(message_id, message, sender)
|
||||||
end
|
end
|
||||||
elseif message_id == LAYOUT_CHANGED then
|
elseif message_id == MSG_LAYOUT_CHANGED then
|
||||||
local screen = find_screen(sender)
|
local screen = find_screen(sender)
|
||||||
if screen and screen.transition_fn then
|
if screen and screen.transition_fn then
|
||||||
screen.transition_fn(message_id, message, sender)
|
screen.transition_fn(message_id, message, sender)
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ go.property("popup", false)
|
|||||||
go.property("popup_on_popup", false)
|
go.property("popup_on_popup", false)
|
||||||
go.property("screen_keeps_input_focus_when_below_popup", false)
|
go.property("screen_keeps_input_focus_when_below_popup", false)
|
||||||
go.property("others_keep_input_focus_when_below_screen", false)
|
go.property("others_keep_input_focus_when_below_screen", false)
|
||||||
go.property("transition_id", hash(""))
|
go.property("transition_id", hash("__DEPRECATED__"))
|
||||||
go.property("focus_id", hash(""))
|
go.property("focus_id", hash("__DEPRECATED__"))
|
||||||
go.property("preload", false)
|
go.property("preload", false)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ go.property("popup_on_popup", false)
|
|||||||
go.property("timestep_below_popup", 1)
|
go.property("timestep_below_popup", 1)
|
||||||
go.property("screen_keeps_input_focus_when_below_popup", false)
|
go.property("screen_keeps_input_focus_when_below_popup", false)
|
||||||
go.property("others_keep_input_focus_when_below_screen", false)
|
go.property("others_keep_input_focus_when_below_screen", false)
|
||||||
go.property("transition_url", msg.url())
|
go.property("transition_url", msg.url("#__DEPRECATED__"))
|
||||||
go.property("focus_url", msg.url())
|
go.property("focus_url", msg.url("#__DEPRECATED__"))
|
||||||
go.property("receiver_url", msg.url())
|
go.property("receiver_url", msg.url("#__DEPRECATED__"))
|
||||||
go.property("preload", false)
|
go.property("preload", false)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user