mirror of
https://github.com/britzl/monarch.git
synced 2025-11-26 19:00:53 +01:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66d2c98ccc | ||
|
|
e8249229b9 | ||
|
|
2eb67bf29d | ||
|
|
fe8341263a | ||
|
|
e0b0a286e3 | ||
|
|
c14e4a8a46 | ||
|
|
482e319285 | ||
|
|
9c7ce61f6f | ||
|
|
f5afbad233 | ||
|
|
6fdde9d2a8 | ||
|
|
d963b583b1 | ||
|
|
6fe59c92c4 | ||
|
|
286a270a1c | ||
|
|
c0d45c3d5c | ||
|
|
bcc6264cd4 | ||
|
|
1dec704047 | ||
|
|
9764c68475 | ||
|
|
d57d550859 | ||
|
|
17df189089 | ||
|
|
387a1805eb | ||
|
|
e26da2c6c5 |
2
.github/workflows/ci-workflow.yml
vendored
2
.github/workflows/ci-workflow.yml
vendored
@@ -16,4 +16,4 @@ jobs:
|
|||||||
DEFOLD_USER: bjorn.ritzl@gmail.com
|
DEFOLD_USER: bjorn.ritzl@gmail.com
|
||||||
DEFOLD_AUTH: foobar
|
DEFOLD_AUTH: foobar
|
||||||
DEFOLD_BOOSTRAP_COLLECTION: /test/test.collectionc
|
DEFOLD_BOOSTRAP_COLLECTION: /test/test.collectionc
|
||||||
run: ./.travis/run.sh
|
run: ./.test/run.sh
|
||||||
|
|||||||
42
.luacheckrc
42
.luacheckrc
@@ -1,42 +0,0 @@
|
|||||||
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"
|
|
||||||
}
|
|
||||||
@@ -19,12 +19,12 @@ BOB_URL="http://d.defold.com/archive/${SHA1}/bob/bob.jar"
|
|||||||
|
|
||||||
# Download dmengine_headless
|
# Download dmengine_headless
|
||||||
echo "Downloading ${DMENGINE_URL}"
|
echo "Downloading ${DMENGINE_URL}"
|
||||||
curl -o dmengine_headless ${DMENGINE_URL}
|
curl -L -o dmengine_headless ${DMENGINE_URL}
|
||||||
chmod +x dmengine_headless
|
chmod +x dmengine_headless
|
||||||
|
|
||||||
# Download bob.jar
|
# Download bob.jar
|
||||||
echo "Downloading ${BOB_URL}"
|
echo "Downloading ${BOB_URL}"
|
||||||
curl -o bob.jar ${BOB_URL}
|
curl -L -o bob.jar ${BOB_URL}
|
||||||
|
|
||||||
# Fetch libraries
|
# Fetch libraries
|
||||||
echo "Running bob.jar - resolving dependencies"
|
echo "Running bob.jar - resolving dependencies"
|
||||||
30
.travis.yml
30
.travis.yml
@@ -1,30 +0,0 @@
|
|||||||
sudo: required
|
|
||||||
|
|
||||||
dist: bionic
|
|
||||||
|
|
||||||
script:
|
|
||||||
- sudo unlink /usr/bin/gcc && sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
|
|
||||||
- gcc --version
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- gcc-5
|
|
||||||
- g++-5
|
|
||||||
|
|
||||||
language: java
|
|
||||||
|
|
||||||
jdk:
|
|
||||||
- oraclejdk11
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- DEFOLD_BOOSTRAP_COLLECTION=/test/test.collectionc
|
|
||||||
|
|
||||||
script:
|
|
||||||
- "./.travis/run.sh"
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
60
CHANGELOG.md
60
CHANGELOG.md
@@ -1,60 +0,0 @@
|
|||||||
## Monarch 2.8.0 [britzl released 2018-06-10]
|
|
||||||
NEW: Prevent show/hide operations while busy showing/hiding another screen
|
|
||||||
FIX: Make sure to properly finish active transitions when layout changes
|
|
||||||
|
|
||||||
## Monarch 2.7.0 [britzl released 2018-06-04]
|
|
||||||
NEW: Added monarch.top([offset]) and monarch.bottom([offset]) to get screen id of top and bottom screens (w. optional offset)
|
|
||||||
NEW: Transition messages now contain `next_screen` or `previous_screen`
|
|
||||||
|
|
||||||
## Monarch 2.6.1 [britzl released 2018-06-04]
|
|
||||||
FIX: Check if screen has already been preloaded before trying to preload it again (the callback will still be invoked).
|
|
||||||
|
|
||||||
## Monarch 2.6.0 [britzl released 2018-06-03]
|
|
||||||
NEW: monarch.preload() to load but not show a screen. Useful for content heavy screens that you wish to show without delay.
|
|
||||||
|
|
||||||
## Monarch 2.5.0 [britzl released 2018-06-01]
|
|
||||||
NEW: Transitions will send a `transition_done` message to the creator of the transition to notify that the transition has finished. The `message` will contain which transition that was finished.
|
|
||||||
|
|
||||||
## Monarch 2.4.0 [britzl released 2018-05-26]
|
|
||||||
NEW: Screen transitions are remembered so that they can be replayed when the screen layout changes.
|
|
||||||
|
|
||||||
## Monarch 2.3.0 [britzl released 2018-03-24]
|
|
||||||
CHANGE: The functions in monarch.lua that previously only accepted a hash as screen id now also accepts strings (and does the conversion internally)
|
|
||||||
|
|
||||||
## Monarch 2.2.0 [britzl released 2018-03-19]
|
|
||||||
NEW: Transitions now handle layout changes (via `layout_changed` message)
|
|
||||||
NEW: Transitions can now be notified of changes in window size using transition.window_resize(width, height)
|
|
||||||
|
|
||||||
## Monarch 2.1 [britzl released 2017-12-27]
|
|
||||||
NEW: Added Popup on Popup flag that allows a popup to be shown on top of another popup
|
|
||||||
|
|
||||||
## Monarch 2.0 [britzl released 2017-12-08]
|
|
||||||
BREAKING CHANGE: If you are using custom screen transitions (ie your own transition functions) you need to make a change to the function. The previous function signature was ```(node, to, easing, duration, delay, url)``` where ```url``` was the URL to where the ```transition_done``` message was supposed to be posted. The new function signature for a transition function is: ```(node, to, easing, duration, delay, cb)``` where ```cb``` is a function that should be invoked when the transition is completed.
|
|
||||||
|
|
||||||
FIX: Fixed issues related to screen transitions.
|
|
||||||
FIX: Code cleanup to reduce code duplication.
|
|
||||||
FIX: Improved documentation regarding transitions.
|
|
||||||
|
|
||||||
## Monarch 1.4 [britzl released 2017-12-06]
|
|
||||||
FIX: Several bugfixes for specific corner cases.
|
|
||||||
|
|
||||||
## Monarch 1.3 [britzl released 2017-12-01]
|
|
||||||
FIX: monarch.back(data, cb) set the data on the previous screen not the new current screen.
|
|
||||||
NEW: monarch.is_top(id)
|
|
||||||
NEW: monarch.get_stack()
|
|
||||||
NEW: monarch.in_stack(id)
|
|
||||||
|
|
||||||
## Monarch 1.2 [britzl released 2017-11-28]
|
|
||||||
NEW: Message id constants exposed from the Monarch module
|
|
||||||
NEW: Focus lost/gained contains id of next/previous screen
|
|
||||||
|
|
||||||
## Monarch 1.1 [britzl released 2017-11-22]
|
|
||||||
FIX: Bugfixes for transitions and state under certain circumstances
|
|
||||||
NEW: Added 'reload' option to show() command.
|
|
||||||
|
|
||||||
## Monarch 1.0 [britzl released 2017-09-28]
|
|
||||||
First public stable release
|
|
||||||
|
|
||||||
## Monarch 0.9 [britzl released 2017-09-17]
|
|
||||||
|
|
||||||
|
|
||||||
43
README.md
43
README.md
@@ -37,9 +37,9 @@ For proxies the recommended setup is to create one game object per screen and pe
|
|||||||
* **Timestep below Popup (number)** - Timestep to set on screen proxy when it is below a popup. This is useful when pausing animations and gameplay while a popup is open.
|
* **Timestep below Popup (number)** - Timestep to set on screen proxy when it is below a popup. This is useful when pausing animations and gameplay while a popup is open.
|
||||||
* **Screen Keeps Input Focus When Below Popup (boolean)** - Check this if the screen should keep input focus when it is below a popup.
|
* **Screen Keeps Input Focus When Below Popup (boolean)** - Check this if the screen should keep input focus when it is below a popup.
|
||||||
* **Others Keep Input Focus When Below Screen (boolean)** - Check this if other screens should keep input focus when below this screen.
|
* **Others Keep Input Focus When Below Screen (boolean)** - Check this if other screens should keep input focus when below this screen.
|
||||||
* **Transition Url (url)** - Optional URL to post messages to when the screen is about to be shown/hidden. Use this to trigger a transition (see the section on [transitions](#transitions)).
|
* **Transition Url (url)** - **DEPRECATED** Optional URL to post messages to when the screen is about to be shown/hidden. Use this to trigger a transition (see the section on [transitions](#transitions)).
|
||||||
* **Focus Url (url)** - Optional URL to post messages to when the screen gains or loses focus (see the section on [screen focus](#screen-focus-gainloss)).
|
* **Focus Url (url)** - **DEPRECATED** Optional URL to post messages to when the screen gains or loses focus (see the section on [screen focus](#screen-focus-gainloss)).
|
||||||
* **Receiver Url (url)** - Optional URL to post messages to using `monarch.post()`.
|
* **Receiver Url (url)** - **DEPRECATED** Optional URL to post messages to using `monarch.post()`.
|
||||||
* **Preload (boolean)** - Check this if the screen should be preloaded and kept loaded at all times. For a collection proxy it means that it will be async loaded but not enabled at all times while not visible. This can also temporarily be achieved through the `monarch.preload()` function.
|
* **Preload (boolean)** - Check this if the screen should be preloaded and kept loaded at all times. For a collection proxy it means that it will be async loaded but not enabled at all times while not visible. This can also temporarily be achieved through the `monarch.preload()` function.
|
||||||
|
|
||||||

|

|
||||||
@@ -53,8 +53,8 @@ For factories the recommended setup is to create one game object per screen and
|
|||||||
* **Popup on Popup (boolean)** - Check this if the screen is a [popup](#popups) and it can be shown on top of other popups.
|
* **Popup on Popup (boolean)** - Check this if the screen is a [popup](#popups) and it can be shown on top of other popups.
|
||||||
* **Screen Keeps Input Focus When Below Popup (boolean)** - Check this if the screen should keep input focus when it is below a popup.
|
* **Screen Keeps Input Focus When Below Popup (boolean)** - Check this if the screen should keep input focus when it is below a popup.
|
||||||
* **Others Keep Input Focus When Below Screen (boolean)** - Check this if other screens should keep input focus when below this screen.
|
* **Others Keep Input Focus When Below Screen (boolean)** - Check this if other screens should keep input focus when below this screen.
|
||||||
* **Transition Id (hash)** - Optional id of the game object to send a message to when the screen is about to be shown/hidden. Use this to trigger a transition (see the section on [transitions](#transitions)).
|
* **Transition Id (hash)** - **DEPRECATED** Optional id of the game object to send a message to when the screen is about to be shown/hidden. Use this to trigger a transition (see the section on [transitions](#transitions)).
|
||||||
* **Focus Id (hash)** - Optional id of the game object to send a message to when the screen gains or loses focus (see the section on [screen focus](#screen-focus-gainloss)).
|
* **Focus Id (hash)** - **DEPRECATED** Optional id of the game object to send a message to when the screen gains or loses focus (see the section on [screen focus](#screen-focus-gainloss)).
|
||||||
* **Preload (boolean)** - Check this if the screen should be preloaded and kept loaded at all times. For a collection factory this means that its resources will be dynamically loaded at all times. This can also temporarily be achieved through the `monarch.preload()` function.
|
* **Preload (boolean)** - Check this if the screen should be preloaded and kept loaded at all times. For a collection factory this means that its resources will be dynamically loaded at all times. This can also temporarily be achieved through the `monarch.preload()` function.
|
||||||
|
|
||||||

|

|
||||||
@@ -161,18 +161,30 @@ You can add optional transitions when navigating between screens. This is [descr
|
|||||||
|
|
||||||
|
|
||||||
## Screen focus gain/loss
|
## Screen focus gain/loss
|
||||||
Monarch will send focus gain and focus loss messages if a `Focus Url` (proxy) or `Focus Id` (collectionfactory) was provided when the screen was created. The focus gained message will contain the id of the previous screen and the focus loss message will contain the id of the next screen. Example:
|
Monarch will send focus gain and focus loss messages if a focus change listener has been set using `monarch.on_focus_change(screen_id, fn)`
|
||||||
|
|
||||||
|
DEPRECATED: ~~Monarch will send focus gain and focus loss messages if a `Focus Url` (proxy) or `Focus Id` (collectionfactory) was provided when the screen was created.~~
|
||||||
|
|
||||||
|
The focus gained message will contain the id of the previous screen and the focus loss message will contain the id of the next screen. Example:
|
||||||
|
|
||||||
|
```lua
|
||||||
local monarch = require "monarch.monarch"
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
function on_message(self, message_id, message, sender)
|
function init(self)
|
||||||
if message_id == monarch.FOCUS.GAINED then
|
monarch.on_focus_changed("foobar", function(message_id, message, sender)
|
||||||
print("Focus gained, previous screen: ", message.id)
|
if message_id == monarch.FOCUS.GAINED then
|
||||||
elseif message_id == monarch.FOCUS.LOST then
|
print("Focus gained, previous screen: ", message.id)
|
||||||
print("Focus lost, next screen: ", message.id)
|
elseif message_id == monarch.FOCUS.LOST then
|
||||||
end
|
print("Focus lost, next screen: ", message.id)
|
||||||
|
end
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function on_message(self, message_id, message, sender)
|
||||||
|
monarch.on_message(message_id, message, sender)
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Callbacks
|
## Callbacks
|
||||||
Both the `monarch.show()` and `monarch.back()` functions take an optional callback function that will be invoked when the `transition_show_in` (or the `transition_back_in` in the case of a `monarch.back()` call) transition is completed. The transition is considered completed when a `transition_done` message has been received (see section on [transitions](#transitions) above).
|
Both the `monarch.show()` and `monarch.back()` functions take an optional callback function that will be invoked when the `transition_show_in` (or the `transition_back_in` in the case of a `monarch.back()` call) transition is completed. The transition is considered completed when a `transition_done` message has been received (see section on [transitions](#transitions) above).
|
||||||
@@ -180,10 +192,3 @@ Both the `monarch.show()` and `monarch.back()` functions take an optional callba
|
|||||||
|
|
||||||
## Monarch API
|
## Monarch API
|
||||||
The full [Monarch API is documented here](/README_API.md).
|
The full [Monarch API is documented here](/README_API.md).
|
||||||
|
|
||||||
|
|
||||||
## Monarch FAQ
|
|
||||||
|
|
||||||
**Q**: Why am I getting `ERROR GAMEOBJECT: The collection 'default' could not be created since there is already a socket with the same name`?
|
|
||||||
|
|
||||||
**A**: Each collection that you use must be given a unique id. In this case you have more than one collection loaded with the id `default`. Select the root of each collection in the Outline panel and change the Name field in the properties panel from the default value of `default`.
|
|
||||||
|
|||||||
@@ -48,13 +48,18 @@ Go back to a previous Monarch screen. This operation will be added to the queue
|
|||||||
* `callback` (function) - Optional function to call when the previous screen is visible.
|
* `callback` (function) - Optional function to call when the previous screen is visible.
|
||||||
|
|
||||||
|
|
||||||
## monarch.preload(screen_id, [callback])
|
## monarch.preload(screen_id, [options], [callback])
|
||||||
Preload a Monarch screen. This will load but not enable the screen. This is useful for content heavy screens that you wish to be able to show without having to wait for it load. This operation will be added to the queue if Monarch is busy.
|
Preload a Monarch screen. This will load but not enable the screen. This is useful for content heavy screens that you wish to be able to show without having to wait for it load. This operation will be added to the queue if Monarch is busy.
|
||||||
|
|
||||||
**PARAMETERS**
|
**PARAMETERS**
|
||||||
* `screen_id` (string|hash) - Id of the screen to preload.
|
* `screen_id` (string|hash) - Id of the screen to preload.
|
||||||
|
* `options` (table)
|
||||||
* `callback` (function) - Optional function to call when the screen is preloaded.
|
* `callback` (function) - Optional function to call when the screen is preloaded.
|
||||||
|
|
||||||
|
The options table can contain the following fields:
|
||||||
|
|
||||||
|
* `keep_loaded` (boolean) - If the `keep_loaded` flag is set Monarch will keep the screen preloaded even after a `hide()` or `back()` navigation event that normally would unload the screen.
|
||||||
|
|
||||||
|
|
||||||
## monarch.is_preloading(screen_id)
|
## monarch.is_preloading(screen_id)
|
||||||
Check if a Monarch screen is preloading (via monarch.preload() or the Preload screen setting).
|
Check if a Monarch screen is preloading (via monarch.preload() or the Preload screen setting).
|
||||||
@@ -149,6 +154,14 @@ Check if a Monarch screen is visible.
|
|||||||
* `exists` (boolean) - True if the screen is visible.
|
* `exists` (boolean) - True if the screen is visible.
|
||||||
|
|
||||||
|
|
||||||
|
## monarch.set_timestep_below_popup(screen_id, timestep)
|
||||||
|
Set the timestep to apply for a screen when below a popup.
|
||||||
|
|
||||||
|
**PARAMETERS**
|
||||||
|
* `screen_id` (string|hash) - Id of the screen to change timestep setting for
|
||||||
|
* `timestep` (number) - Timestep to apply
|
||||||
|
|
||||||
|
|
||||||
## monarch.add_listener([url])
|
## monarch.add_listener([url])
|
||||||
Add a URL that will be notified of navigation events.
|
Add a URL that will be notified of navigation events.
|
||||||
|
|
||||||
@@ -176,6 +189,32 @@ Post a message to a visible screen. If the screen is created through a collectio
|
|||||||
* `error` (string|nil) - Error message if unable to send message
|
* `error` (string|nil) - Error message if unable to send message
|
||||||
|
|
||||||
|
|
||||||
|
## monarch.on_transition(screen_id, fn)
|
||||||
|
Set a function to be called when a screen should transition in our out. The function will receive (message_id, message, sender) with `message_id` being one of the transition constants.
|
||||||
|
IMPORTANT! You must call `monarch.on_message(message_id, message, sender)` from the same script as this function was called.
|
||||||
|
|
||||||
|
**PARAMETERS**
|
||||||
|
* `screen_id` (string|hash) - Id of the screen
|
||||||
|
* `fn` (function) - The function to call when a transition should start
|
||||||
|
|
||||||
|
|
||||||
|
## monarch.on_focus_change(screen_id, fn)
|
||||||
|
Set a function to be called when a screen gains or loses focus. The function will receive (message_id, message, sender) with `message_id` being one of the focus change constants.
|
||||||
|
IMPORTANT! You must call `monarch.on_message(message_id, message, sender)` from the same script as this function was called.
|
||||||
|
|
||||||
|
**PARAMETERS**
|
||||||
|
* `screen_id` (string|hash) - Id of the screen
|
||||||
|
* `fn` (function) - The function to call screen focus changes
|
||||||
|
|
||||||
|
|
||||||
|
## monarch.on_post(screen_id, fn)
|
||||||
|
Set a function to be called when `msg.post()` is called on a specific screen. IMPORTANT! You must call `monarch.on_message(message_id, message, sender)` from the same script as this function was called.
|
||||||
|
|
||||||
|
**PARAMETERS**
|
||||||
|
* `screen_id` (string|hash) - Id of the screen
|
||||||
|
* `fn` (function) - The function to call when the screen receives a message using `msg.post`
|
||||||
|
|
||||||
|
|
||||||
## monarch.debug()
|
## monarch.debug()
|
||||||
Enable verbose logging of the internals of Monarch.
|
Enable verbose logging of the internals of Monarch.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
# Transitions
|
# Transitions
|
||||||
You can add optional transitions when navigating between screens. The default behavior is that screen navigation is instant but if you have defined a transition for a screen Monarch will wait until the transition is completed before proceeding. The `Transition Url` (proxy) or `Transition Id` (collectionfactory) property described above should be the URL/Id to a script with an `on_message` handlers for the following messages:
|
You can add optional transitions when navigating between screens. The default behavior is that screen navigation is instant but if you have defined a transition for a screen Monarch will wait until the transition is completed before proceeding.
|
||||||
|
|
||||||
|
Transitions are configured through the `monarch.on_transition(screen_id, fn)` function. The function defines for which screen to configure transitions and sets a function to be called when a transition should be started. This function must accept (message_id, message, sender) as arguments, with `message_id` defining which type of transition to start:
|
||||||
|
|
||||||
* `transition_show_in` (constant defined as `monarch.TRANSITION.SHOW_IN`)
|
* `transition_show_in` (constant defined as `monarch.TRANSITION.SHOW_IN`)
|
||||||
* `transition_show_out` (constant defined as `monarch.TRANSITION.SHOW_OUT`)
|
* `transition_show_out` (constant defined as `monarch.TRANSITION.SHOW_OUT`)
|
||||||
@@ -8,6 +10,11 @@ You can add optional transitions when navigating between screens. The default be
|
|||||||
|
|
||||||
When a transition is completed it is up to the developer to send a `transition_done` (constant `monarch.TRANSITION.DONE`) message back to the sender to indicate that the transition is completed and that Monarch can continue the navigation sequence.
|
When a transition is completed it is up to the developer to send a `transition_done` (constant `monarch.TRANSITION.DONE`) message back to the sender to indicate that the transition is completed and that Monarch can continue the navigation sequence.
|
||||||
|
|
||||||
|
## Transition URL
|
||||||
|
This property is deprecated and will be removed in a future version of Monarch.
|
||||||
|
|
||||||
|
~~It is also possible to configure transitions through the `Transition Url` (proxy) or `Transition Id` (collectionfactory) property. This property must be the URL/Id to a script with an `on_message` handlers for the transition messages mentioned above.~~
|
||||||
|
|
||||||
|
|
||||||
## Predefined transitions
|
## Predefined transitions
|
||||||
Monarch comes with a system for setting up transitions easily in a gui_script using the `monarch.transitions.gui` module. Example:
|
Monarch comes with a system for setting up transitions easily in a gui_script using the `monarch.transitions.gui` module. Example:
|
||||||
@@ -20,15 +27,17 @@ function init(self)
|
|||||||
-- create transitions for the node 'root'
|
-- create transitions for the node 'root'
|
||||||
-- the node will slide in/out from left and right with
|
-- the node will slide in/out from left and right with
|
||||||
-- a specific easing, duration and delay
|
-- a specific easing, duration and delay
|
||||||
self.transition = transitions.create(gui.get_node("root"))
|
local transition = transitions.create(gui.get_node("root"))
|
||||||
.show_in(transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
.show_in(transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
.show_out(transitions.slide_out_left, gui.EASING_INQUAD, 0.6, 0)
|
.show_out(transitions.slide_out_left, gui.EASING_INQUAD, 0.6, 0)
|
||||||
.back_in(transitions.slide_in_left, gui.EASING_OUTQUAD, 0.6, 0)
|
.back_in(transitions.slide_in_left, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
.back_out(transitions.slide_out_right, gui.EASING_INQUAD, 0.6, 0)
|
.back_out(transitions.slide_out_right, gui.EASING_INQUAD, 0.6, 0)
|
||||||
|
|
||||||
|
monarch.on_transition("foobar", transition)
|
||||||
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)
|
||||||
-- you can also check when a transition has completed:
|
-- you can also check when a transition has completed:
|
||||||
if message_id == monarch.TRANSITION.DONE and message.transition == monarch.TRANSITION.SHOW_IN then
|
if message_id == monarch.TRANSITION.DONE and message.transition == monarch.TRANSITION.SHOW_IN then
|
||||||
print("Show in done!")
|
print("Show in done!")
|
||||||
@@ -40,7 +49,7 @@ It is also possible to assign transitions to multiple nodes:
|
|||||||
|
|
||||||
```lua
|
```lua
|
||||||
function init(self)
|
function init(self)
|
||||||
self.transition = transitions.create() -- note that no node is passed to transition.create()!
|
local transition = transitions.create() -- note that no node is passed to transition.create()!
|
||||||
.show_in(gui.get_node("node1"), transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
.show_in(gui.get_node("node1"), transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
.show_in(gui.get_node("node2"), transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
.show_in(gui.get_node("node2"), transitions.slide_in_right, gui.EASING_OUTQUAD, 0.6, 0)
|
||||||
end
|
end
|
||||||
@@ -111,7 +120,7 @@ end
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Screen stack info and transitions
|
## Screen stack info and transitions
|
||||||
The transition message sent to the Transition Url specified in the screen configuration contains additional information about the transition. For the `transition_show_in` and `transition_back_out` messages the message contains the previous screen id:
|
The transition message sent transition listener script contains additional information about the transition. For the `transition_show_in` and `transition_back_out` messages the message contains the previous screen id:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
function on_message(self, message_id, message, sender)
|
function on_message(self, message_id, message, sender)
|
||||||
|
|||||||
@@ -31,12 +31,15 @@ embedded_instances {
|
|||||||
" value: \"/go\"\n"
|
" value: \"/go\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/example/advanced/menu.collection\\\"\\n"
|
" data: \"prototype: \\\"/example/advanced/menu.collection\\\"\\n"
|
||||||
"load_dynamically: true\\n"
|
"load_dynamically: true\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
@@ -84,6 +87,8 @@ embedded_instances {
|
|||||||
" z: 0.0\n"
|
" z: 0.0\n"
|
||||||
" w: 1.0\n"
|
" w: 1.0\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"components {\n"
|
"components {\n"
|
||||||
" id: \"gui\"\n"
|
" id: \"gui\"\n"
|
||||||
@@ -99,6 +104,8 @@ embedded_instances {
|
|||||||
" z: 0.0\n"
|
" z: 0.0\n"
|
||||||
" w: 1.0\n"
|
" w: 1.0\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
""
|
""
|
||||||
position {
|
position {
|
||||||
@@ -144,6 +151,8 @@ embedded_instances {
|
|||||||
" value: \"pregame:/go#pregame\"\n"
|
" value: \"pregame:/go#pregame\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -207,6 +216,8 @@ embedded_instances {
|
|||||||
" value: \"game:/go#game\"\n"
|
" value: \"game:/go#game\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -290,6 +301,8 @@ embedded_instances {
|
|||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -368,6 +381,8 @@ embedded_instances {
|
|||||||
" value: \"confirm:/go#confirm\"\n"
|
" value: \"confirm:/go#confirm\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -426,12 +441,15 @@ embedded_instances {
|
|||||||
" value: \"background\"\n"
|
" value: \"background\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/example/advanced/background.collection\\\"\\n"
|
" data: \"prototype: \\\"/example/advanced/background.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ embedded_instances {
|
|||||||
" z: 0.0\n"
|
" z: 0.0\n"
|
||||||
" w: 1.0\n"
|
" w: 1.0\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
""
|
""
|
||||||
position {
|
position {
|
||||||
@@ -76,12 +78,15 @@ embedded_instances {
|
|||||||
" value: \"/go\"\n"
|
" value: \"/go\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/example/advanced/popup.collection\\\"\\n"
|
" data: \"prototype: \\\"/example/advanced/popup.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ embedded_instances {
|
|||||||
" value: \"screen1\"\n"
|
" value: \"screen1\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -74,6 +76,8 @@ embedded_instances {
|
|||||||
" z: 0.0\n"
|
" z: 0.0\n"
|
||||||
" w: 1.0\n"
|
" w: 1.0\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
""
|
""
|
||||||
position {
|
position {
|
||||||
@@ -114,6 +118,8 @@ embedded_instances {
|
|||||||
" value: \"screen2\"\n"
|
" value: \"screen2\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -151,3 +157,133 @@ embedded_instances {
|
|||||||
z: 1.0
|
z: 1.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
embedded_instances {
|
||||||
|
id: "popup1"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"screen_proxy\"\n"
|
||||||
|
" component: \"/monarch/screen_proxy.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"screen_id\"\n"
|
||||||
|
" value: \"popup1\"\n"
|
||||||
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"popup\"\n"
|
||||||
|
" value: \"true\"\n"
|
||||||
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"embedded_components {\n"
|
||||||
|
" id: \"collectionproxy\"\n"
|
||||||
|
" type: \"collectionproxy\"\n"
|
||||||
|
" data: \"collection: \\\"/example/basic/popup1.collection\\\"\\n"
|
||||||
|
"exclude: false\\n"
|
||||||
|
"\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
embedded_instances {
|
||||||
|
id: "popup2"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"screen_proxy\"\n"
|
||||||
|
" component: \"/monarch/screen_proxy.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"screen_id\"\n"
|
||||||
|
" value: \"popup2\"\n"
|
||||||
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"popup\"\n"
|
||||||
|
" value: \"true\"\n"
|
||||||
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"embedded_components {\n"
|
||||||
|
" id: \"collectionproxy\"\n"
|
||||||
|
" type: \"collectionproxy\"\n"
|
||||||
|
" data: \"collection: \\\"/example/basic/popup2.collection\\\"\\n"
|
||||||
|
"exclude: false\\n"
|
||||||
|
"\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
39
example/basic/popup1.collection
Normal file
39
example/basic/popup1.collection
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "popup1"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"popup1\"\n"
|
||||||
|
" component: \"/example/basic/popup1.gui\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
385
example/basic/popup1.gui
Normal file
385
example/basic/popup1.gui
Normal file
@@ -0,0 +1,385 @@
|
|||||||
|
script: "/example/basic/popup1.gui_script"
|
||||||
|
fonts {
|
||||||
|
name: "example"
|
||||||
|
font: "/assets/example.font"
|
||||||
|
}
|
||||||
|
background_color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 568.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 400.0
|
||||||
|
y: 400.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.5019608
|
||||||
|
y: 0.6
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "root"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "showpopup2"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "SHOW POPUP 2"
|
||||||
|
font: "example"
|
||||||
|
id: "showtext"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "showpopup2"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: -100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "closepopup"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "CLOSE"
|
||||||
|
font: "example"
|
||||||
|
id: "closetext"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "closepopup"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 40.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "THIS IS POPUP 1"
|
||||||
|
font: "example"
|
||||||
|
id: "id"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
material: "/builtins/materials/gui.material"
|
||||||
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
max_nodes: 512
|
||||||
16
example/basic/popup1.gui_script
Normal file
16
example/basic/popup1.gui_script
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
|
function init(self)
|
||||||
|
msg.post(".", "acquire_input_focus")
|
||||||
|
gui.set_render_order(14)
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_input(self, action_id, action)
|
||||||
|
if action_id == hash("touch") and action.pressed then
|
||||||
|
if gui.pick_node(gui.get_node("showpopup2"), action.x, action.y) then
|
||||||
|
monarch.show("popup2")
|
||||||
|
elseif gui.pick_node(gui.get_node("closepopup"), action.x, action.y) then
|
||||||
|
monarch.back()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
39
example/basic/popup2.collection
Normal file
39
example/basic/popup2.collection
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "popup2"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"popup2\"\n"
|
||||||
|
" component: \"/example/basic/popup2.gui\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
385
example/basic/popup2.gui
Normal file
385
example/basic/popup2.gui
Normal file
@@ -0,0 +1,385 @@
|
|||||||
|
script: "/example/basic/popup2.gui_script"
|
||||||
|
fonts {
|
||||||
|
name: "example"
|
||||||
|
font: "/assets/example.font"
|
||||||
|
}
|
||||||
|
background_color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 568.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 400.0
|
||||||
|
y: 400.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.5019608
|
||||||
|
y: 0.7019608
|
||||||
|
z: 0.7019608
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "root"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "showpopup2"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "SHOW POPUP 2"
|
||||||
|
font: "example"
|
||||||
|
id: "showtext"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "showpopup2"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 40.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "THIS IS POPUP 2"
|
||||||
|
font: "example"
|
||||||
|
id: "id"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: -100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "closepopup"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "root"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "CLOSE"
|
||||||
|
font: "example"
|
||||||
|
id: "closetext"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "closepopup"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
material: "/builtins/materials/gui.material"
|
||||||
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
max_nodes: 512
|
||||||
16
example/basic/popup2.gui_script
Normal file
16
example/basic/popup2.gui_script
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
|
function init(self)
|
||||||
|
msg.post(".", "acquire_input_focus")
|
||||||
|
gui.set_render_order(15)
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_input(self, action_id, action)
|
||||||
|
if action_id == hash("touch") and action.pressed then
|
||||||
|
if gui.pick_node(gui.get_node("showpopup2"), action.x, action.y) then
|
||||||
|
monarch.show("popup2")
|
||||||
|
elseif gui.pick_node(gui.get_node("closepopup"), action.x, action.y) then
|
||||||
|
monarch.back()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -62,6 +62,9 @@ nodes {
|
|||||||
alpha: 1.0
|
alpha: 1.0
|
||||||
template_node_child: false
|
template_node_child: false
|
||||||
size_mode: SIZE_MODE_AUTO
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
}
|
}
|
||||||
nodes {
|
nodes {
|
||||||
position {
|
position {
|
||||||
@@ -98,7 +101,7 @@ nodes {
|
|||||||
blend_mode: BLEND_MODE_ALPHA
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
text: "SHOW SCREEN 2"
|
text: "SHOW SCREEN 2"
|
||||||
font: "example"
|
font: "example"
|
||||||
id: "text"
|
id: "showscreen2text"
|
||||||
xanchor: XANCHOR_NONE
|
xanchor: XANCHOR_NONE
|
||||||
yanchor: YANCHOR_NONE
|
yanchor: YANCHOR_NONE
|
||||||
pivot: PIVOT_CENTER
|
pivot: PIVOT_CENTER
|
||||||
@@ -125,6 +128,197 @@ nodes {
|
|||||||
template_node_child: false
|
template_node_child: false
|
||||||
text_leading: 1.0
|
text_leading: 1.0
|
||||||
text_tracking: 0.0
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 10.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 40.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "THIS IS SCREEN 1"
|
||||||
|
font: "example"
|
||||||
|
id: "id"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_S
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 450.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "showpopup1"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "SHOW POPUP 1"
|
||||||
|
font: "example"
|
||||||
|
id: "showpopup1text"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "showpopup1"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
}
|
}
|
||||||
material: "/builtins/materials/gui.material"
|
material: "/builtins/materials/gui.material"
|
||||||
adjust_reference: ADJUST_REFERENCE_PARENT
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ function on_input(self, action_id, action)
|
|||||||
if action_id == hash("touch") and action.pressed then
|
if action_id == hash("touch") and action.pressed then
|
||||||
if gui.pick_node(gui.get_node("showscreen2"), action.x, action.y) then
|
if gui.pick_node(gui.get_node("showscreen2"), action.x, action.y) then
|
||||||
monarch.show("screen2")
|
monarch.show("screen2")
|
||||||
|
elseif gui.pick_node(gui.get_node("showpopup1"), action.x, action.y) then
|
||||||
|
monarch.show("popup1")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -62,6 +62,9 @@ nodes {
|
|||||||
alpha: 1.0
|
alpha: 1.0
|
||||||
template_node_child: false
|
template_node_child: false
|
||||||
size_mode: SIZE_MODE_AUTO
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
}
|
}
|
||||||
nodes {
|
nodes {
|
||||||
position {
|
position {
|
||||||
@@ -125,6 +128,197 @@ nodes {
|
|||||||
template_node_child: false
|
template_node_child: false
|
||||||
text_leading: 1.0
|
text_leading: 1.0
|
||||||
text_tracking: 0.0
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 10.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 40.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "THIS IS SCREEN 2"
|
||||||
|
font: "example"
|
||||||
|
id: "id"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_S
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 450.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "showpopup1"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_AUTO
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "SHOW POPUP 1"
|
||||||
|
font: "example"
|
||||||
|
id: "showpopup1text"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "showpopup1"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
}
|
}
|
||||||
material: "/builtins/materials/gui.material"
|
material: "/builtins/materials/gui.material"
|
||||||
adjust_reference: ADJUST_REFERENCE_PARENT
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ function on_input(self, action_id, action)
|
|||||||
if action_id == hash("touch") and action.pressed then
|
if action_id == hash("touch") and action.pressed then
|
||||||
if gui.pick_node(gui.get_node("backbutton"), action.x, action.y) then
|
if gui.pick_node(gui.get_node("backbutton"), action.x, action.y) then
|
||||||
monarch.back()
|
monarch.back()
|
||||||
|
elseif gui.pick_node(gui.get_node("showpopup1"), action.x, action.y) then
|
||||||
|
monarch.show("popup1")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
159
example/slidingwindow/slidingwindow.collection
Normal file
159
example/slidingwindow/slidingwindow.collection
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
name: "slidingwindow"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"slidingwindow\"\n"
|
||||||
|
" component: \"/example/slidingwindow/slidingwindow.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
embedded_instances {
|
||||||
|
id: "window1"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"screen_proxy\"\n"
|
||||||
|
" component: \"/monarch/screen_proxy.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"screen_id\"\n"
|
||||||
|
" value: \"window1\"\n"
|
||||||
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"embedded_components {\n"
|
||||||
|
" id: \"collectionproxy\"\n"
|
||||||
|
" type: \"collectionproxy\"\n"
|
||||||
|
" data: \"collection: \\\"/example/slidingwindow/window1.collection\\\"\\n"
|
||||||
|
"exclude: false\\n"
|
||||||
|
"\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
embedded_instances {
|
||||||
|
id: "window2"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"screen_proxy\"\n"
|
||||||
|
" component: \"/monarch/screen_proxy.script\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" properties {\n"
|
||||||
|
" id: \"screen_id\"\n"
|
||||||
|
" value: \"window2\"\n"
|
||||||
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
"embedded_components {\n"
|
||||||
|
" id: \"collectionproxy\"\n"
|
||||||
|
" type: \"collectionproxy\"\n"
|
||||||
|
" data: \"collection: \\\"/example/slidingwindow/window2.collection\\\"\\n"
|
||||||
|
"exclude: false\\n"
|
||||||
|
"\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
13
example/slidingwindow/slidingwindow.script
Normal file
13
example/slidingwindow/slidingwindow.script
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
|
function init(self)
|
||||||
|
monarch.debug()
|
||||||
|
msg.post("@render:/", "clear_color", { color = vmath.vector4(0.4, 0.6, 0.8,1.0) })
|
||||||
|
msg.post("#", "init_monarch") -- wait until init() has been called for all screen.script instances
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_message(self, message_id, message, sender)
|
||||||
|
if message_id == hash("init_monarch") then
|
||||||
|
monarch.show(hash("window1"))
|
||||||
|
end
|
||||||
|
end
|
||||||
39
example/slidingwindow/window1.collection
Normal file
39
example/slidingwindow/window1.collection
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "window1"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"window1\"\n"
|
||||||
|
" component: \"/example/slidingwindow/window1.gui\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
261
example/slidingwindow/window1.gui
Normal file
261
example/slidingwindow/window1.gui
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
script: "/example/slidingwindow/window1.gui_script"
|
||||||
|
fonts {
|
||||||
|
name: "example"
|
||||||
|
font: "/assets/example.font"
|
||||||
|
}
|
||||||
|
background_color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 568.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 640.0
|
||||||
|
y: 1136.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.3019608
|
||||||
|
y: 0.3019608
|
||||||
|
z: 0.3019608
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "bg"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_STRETCH
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 50.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "button"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "bg"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 50.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "WINDOW 2"
|
||||||
|
font: "example"
|
||||||
|
id: "text"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "button"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 338.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 2.0
|
||||||
|
y: 2.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "WINDOW 1"
|
||||||
|
font: "example"
|
||||||
|
id: "title"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "bg"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
material: "/builtins/materials/gui.material"
|
||||||
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
max_nodes: 512
|
||||||
35
example/slidingwindow/window1.gui_script
Normal file
35
example/slidingwindow/window1.gui_script
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
local transitions = require "monarch.transitions.gui"
|
||||||
|
|
||||||
|
function init(self)
|
||||||
|
msg.post(".", "acquire_input_focus")
|
||||||
|
|
||||||
|
local DURATION = 0.3
|
||||||
|
local transition = transitions.create(gui.get_node("bg"))
|
||||||
|
.show_in(transitions.slide_in_right, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.show_out(transitions.slide_out_left, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.back_in(transitions.slide_in_left, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.back_out(transitions.slide_out_right, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
|
||||||
|
monarch.on_transition("window1", transition)
|
||||||
|
|
||||||
|
monarch.on_focus_changed("window1", function(message_id, message)
|
||||||
|
if message_id == monarch.FOCUS.GAINED then
|
||||||
|
print("window1 gained focus")
|
||||||
|
elseif message_id == monarch.FOCUS.LOST then
|
||||||
|
print("window1 lost focus")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_input(self, action_id, action)
|
||||||
|
if action_id == hash("touch") and action.released then
|
||||||
|
if gui.pick_node(gui.get_node("button"), action.x, action.y) then
|
||||||
|
monarch.show("window2")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_message(self, message_id, message, sender)
|
||||||
|
monarch.on_message(message_id, message, sender)
|
||||||
|
end
|
||||||
39
example/slidingwindow/window2.collection
Normal file
39
example/slidingwindow/window2.collection
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: "window2"
|
||||||
|
scale_along_z: 0
|
||||||
|
embedded_instances {
|
||||||
|
id: "go"
|
||||||
|
data: "components {\n"
|
||||||
|
" id: \"window2\"\n"
|
||||||
|
" component: \"/example/slidingwindow/window2.gui\"\n"
|
||||||
|
" position {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" }\n"
|
||||||
|
" rotation {\n"
|
||||||
|
" x: 0.0\n"
|
||||||
|
" y: 0.0\n"
|
||||||
|
" z: 0.0\n"
|
||||||
|
" w: 1.0\n"
|
||||||
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
|
"}\n"
|
||||||
|
""
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale3 {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
261
example/slidingwindow/window2.gui
Normal file
261
example/slidingwindow/window2.gui
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
script: "/example/slidingwindow/window2.gui_script"
|
||||||
|
fonts {
|
||||||
|
name: "example"
|
||||||
|
font: "/assets/example.font"
|
||||||
|
}
|
||||||
|
background_color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 320.0
|
||||||
|
y: 568.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 640.0
|
||||||
|
y: 1136.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.3019608
|
||||||
|
y: 0.3019608
|
||||||
|
z: 0.3019608
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "bg"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_STRETCH
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 50.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_BOX
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
texture: ""
|
||||||
|
id: "button"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
parent: "bg"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
slice9 {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 0.0
|
||||||
|
}
|
||||||
|
clipping_mode: CLIPPING_MODE_NONE
|
||||||
|
clipping_visible: true
|
||||||
|
clipping_inverted: false
|
||||||
|
alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
size_mode: SIZE_MODE_MANUAL
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 50.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "BACK"
|
||||||
|
font: "example"
|
||||||
|
id: "text"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "button"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
nodes {
|
||||||
|
position {
|
||||||
|
x: 0.0
|
||||||
|
y: 338.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
rotation {
|
||||||
|
x: 0.0
|
||||||
|
y: 0.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
scale {
|
||||||
|
x: 2.0
|
||||||
|
y: 2.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
x: 200.0
|
||||||
|
y: 100.0
|
||||||
|
z: 0.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
color {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
type: TYPE_TEXT
|
||||||
|
blend_mode: BLEND_MODE_ALPHA
|
||||||
|
text: "WINDOW 2"
|
||||||
|
font: "example"
|
||||||
|
id: "title"
|
||||||
|
xanchor: XANCHOR_NONE
|
||||||
|
yanchor: YANCHOR_NONE
|
||||||
|
pivot: PIVOT_CENTER
|
||||||
|
outline {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
x: 1.0
|
||||||
|
y: 1.0
|
||||||
|
z: 1.0
|
||||||
|
w: 1.0
|
||||||
|
}
|
||||||
|
adjust_mode: ADJUST_MODE_FIT
|
||||||
|
line_break: false
|
||||||
|
parent: "bg"
|
||||||
|
layer: ""
|
||||||
|
inherit_alpha: true
|
||||||
|
alpha: 1.0
|
||||||
|
outline_alpha: 1.0
|
||||||
|
shadow_alpha: 1.0
|
||||||
|
template_node_child: false
|
||||||
|
text_leading: 1.0
|
||||||
|
text_tracking: 0.0
|
||||||
|
custom_type: 0
|
||||||
|
enabled: true
|
||||||
|
visible: true
|
||||||
|
}
|
||||||
|
material: "/builtins/materials/gui.material"
|
||||||
|
adjust_reference: ADJUST_REFERENCE_PARENT
|
||||||
|
max_nodes: 512
|
||||||
28
example/slidingwindow/window2.gui_script
Normal file
28
example/slidingwindow/window2.gui_script
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
local monarch = require "monarch.monarch"
|
||||||
|
local transitions = require "monarch.transitions.gui"
|
||||||
|
|
||||||
|
function init(self)
|
||||||
|
msg.post(".", "acquire_input_focus")
|
||||||
|
|
||||||
|
local DURATION = 0.3
|
||||||
|
local transition = transitions.create(gui.get_node("bg"))
|
||||||
|
.show_in(transitions.slide_in_right, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.show_out(transitions.slide_out_left, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.back_in(transitions.slide_in_left, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
.back_out(transitions.slide_out_right, gui.EASING_LINEAR, DURATION, 0)
|
||||||
|
|
||||||
|
monarch.on_transition("window2", transition)
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_input(self, action_id, action)
|
||||||
|
if action_id == hash("touch") and action.released then
|
||||||
|
if gui.pick_node(gui.get_node("button"), action.x, action.y) then
|
||||||
|
monarch.back()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function on_message(self, message_id, message, sender)
|
||||||
|
print("window2", message_id, message, sender)
|
||||||
|
monarch.on_message(message_id, message, sender)
|
||||||
|
end
|
||||||
@@ -2,9 +2,10 @@
|
|||||||
title = Monarch
|
title = Monarch
|
||||||
version = 0.9
|
version = 0.9
|
||||||
dependencies#0 = https://github.com/britzl/deftest/archive/2.7.0.zip
|
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
|
||||||
|
|
||||||
[bootstrap]
|
[bootstrap]
|
||||||
main_collection = /example/advanced/advanced.collectionc
|
main_collection = /example/slidingwindow/slidingwindow.collectionc
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
game_binding = /input/game.input_bindingc
|
game_binding = /input/game.input_bindingc
|
||||||
|
|||||||
@@ -3,16 +3,21 @@ local async = require "monarch.utils.async"
|
|||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
local CONTEXT = hash("monarch_context")
|
local WAITFOR_CONTEXT = hash("waitfor_monarch_context")
|
||||||
local PROXY_LOADED = hash("proxy_loaded")
|
local WAITFOR_PROXY_LOADED = hash("waitfor_proxy_loaded")
|
||||||
local PROXY_UNLOADED = hash("proxy_unloaded")
|
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")
|
||||||
|
|
||||||
-- transition messages
|
-- transition messages
|
||||||
M.TRANSITION = {}
|
M.TRANSITION = {}
|
||||||
@@ -108,7 +113,7 @@ process_queue = function()
|
|||||||
log("queue() busy")
|
log("queue() busy")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
action = table.remove(queue, 1)
|
local action = table.remove(queue, 1)
|
||||||
if not action then
|
if not action then
|
||||||
log("queue() empty")
|
log("queue() empty")
|
||||||
return
|
return
|
||||||
@@ -134,23 +139,49 @@ local function notify_transition_listeners(message_id, message)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function screen_from_proxy(proxy)
|
local function find_screen(url_to_find)
|
||||||
for _,screen in pairs(screens) do
|
local function find(url)
|
||||||
if screen.proxy == proxy then
|
for _,screen in pairs(screens) do
|
||||||
return screen
|
if screen.script == url or screen.proxy == url then
|
||||||
|
return screen
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return find(msg.url()) or find(url_to_find)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function screen_from_script()
|
local function find_transition_screen(url_to_find)
|
||||||
local url = msg.url()
|
local function find(url)
|
||||||
for _,screen in pairs(screens) do
|
for _,screen in pairs(screens) do
|
||||||
if screen.script == url then
|
if screen.transition_url == url or screen.script == url or screen.proxy == url then
|
||||||
return screen
|
return screen
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return find(msg.url()) or find(url_to_find)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function find_focus_screen(url_to_find)
|
||||||
|
local function find(url)
|
||||||
|
for _,screen in pairs(screens) do
|
||||||
|
if screen.focus_url == url or screen.script == url or screen.proxy == url then
|
||||||
|
return screen
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return find(msg.url()) or find(url_to_find)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function find_post_receiver_screen(url_to_find)
|
||||||
|
local function find(url)
|
||||||
|
for _,screen in pairs(screens) do
|
||||||
|
if screen.receiver_url == url or screen.script == url or screen.proxy == url then
|
||||||
|
return screen
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return find(msg.url()) or find(url_to_find)
|
||||||
|
end
|
||||||
|
|
||||||
--- Check if a screen exists in the current screen stack
|
--- Check if a screen exists in the current screen stack
|
||||||
-- @param id (string|hash)
|
-- @param id (string|hash)
|
||||||
@@ -296,18 +327,23 @@ 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
|
||||||
|
for i = #stack, 1, -1 do
|
||||||
|
if stack[i].id == id then
|
||||||
|
table.remove(stack, i)
|
||||||
|
end
|
||||||
|
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
|
||||||
@@ -325,10 +361,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
|
||||||
@@ -338,8 +374,8 @@ 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
|
||||||
@@ -348,12 +384,14 @@ local function unload(screen, force)
|
|||||||
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
|
||||||
msg.post(screen.proxy, DISABLE)
|
if screen.loaded then
|
||||||
screen.loaded = false
|
msg.post(screen.proxy, MSG_DISABLE)
|
||||||
|
screen.loaded = false
|
||||||
|
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
|
||||||
@@ -401,9 +439,10 @@ 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
|
||||||
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
|
||||||
@@ -442,7 +481,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]
|
||||||
@@ -456,7 +495,7 @@ 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.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()
|
||||||
@@ -605,6 +644,8 @@ local function show_in(screen, previous_screen, reload, add_to_stack, wait_for_t
|
|||||||
notify_transition_listeners(M.SCREEN_TRANSITION_FAILED, { screen = screen.id })
|
notify_transition_listeners(M.SCREEN_TRANSITION_FAILED, { screen = screen.id })
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- wait one frame so that the init() of any script have time to run before starting transitions
|
||||||
|
cowait(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
|
||||||
@@ -629,6 +670,8 @@ local function back_in(screen, previous_screen, wait_for_transition, cb)
|
|||||||
notify_transition_listeners(M.SCREEN_TRANSITION_FAILED, { screen = screen.id })
|
notify_transition_listeners(M.SCREEN_TRANSITION_FAILED, { screen = screen.id })
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- wait one frame so that the init() of any script have time to run before starting transitions
|
||||||
|
cowait(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)
|
||||||
@@ -650,10 +693,10 @@ local function back_out(screen, next_screen, wait_for_transition, cb)
|
|||||||
change_context(screen)
|
change_context(screen)
|
||||||
release_input(screen, next_screen)
|
release_input(screen, next_screen)
|
||||||
focus_lost(screen, next_screen)
|
focus_lost(screen, next_screen)
|
||||||
|
transition(screen, M.TRANSITION.BACK_OUT, { next_screen = next_screen and next_screen.id }, wait_for_transition)
|
||||||
if next_screen and screen.popup then
|
if next_screen and screen.popup then
|
||||||
reset_timestep(next_screen)
|
reset_timestep(next_screen)
|
||||||
end
|
end
|
||||||
transition(screen, M.TRANSITION.BACK_OUT, { next_screen = next_screen and next_screen.id }, wait_for_transition)
|
|
||||||
screen.visible = false
|
screen.visible = false
|
||||||
unload(screen)
|
unload(screen)
|
||||||
active_transition_count = active_transition_count - 1
|
active_transition_count = active_transition_count - 1
|
||||||
@@ -879,7 +922,7 @@ function M.clear(cb)
|
|||||||
local top = stack[#stack]
|
local top = stack[#stack]
|
||||||
while top and top.visible do
|
while top and top.visible do
|
||||||
stack[#stack] = nil
|
stack[#stack] = nil
|
||||||
await(back_out, top, screen, WAIT_FOR_TRANSITION, resume)
|
await(back_out, top, stack[#stack - 1], WAIT_FOR_TRANSITION, resume)
|
||||||
top = stack[#stack]
|
top = stack[#stack]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -921,9 +964,20 @@ function M.back(data, cb)
|
|||||||
if data then
|
if data then
|
||||||
top.data = data
|
top.data = data
|
||||||
end
|
end
|
||||||
back_in(top, screen, DO_NOT_WAIT_FOR_TRANSITION, function()
|
-- if the screen we are backing out from is a popup and the screen we go
|
||||||
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
|
-- back to is not a popup we need to let the popup completely hide before
|
||||||
end)
|
-- we start working on the screen we go back to
|
||||||
|
-- we do this to ensure that we do not reset the times step of the screen
|
||||||
|
-- we go back to until it is no longer obscured by the popup
|
||||||
|
if screen.popup and not top.popup then
|
||||||
|
back_out(screen, top, WAIT_FOR_TRANSITION, function()
|
||||||
|
back_in(top, screen, WAIT_FOR_TRANSITION, back_cb)
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
back_in(top, screen, DO_NOT_WAIT_FOR_TRANSITION, function()
|
||||||
|
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
|
||||||
|
end)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
|
back_out(screen, top, WAIT_FOR_TRANSITION, back_cb)
|
||||||
end
|
end
|
||||||
@@ -979,12 +1033,19 @@ end
|
|||||||
--- Preload a screen. This will load but not enable and show a screen. Useful for "heavier" screens
|
--- Preload a screen. This will load but not enable and show a screen. Useful for "heavier" screens
|
||||||
-- that you wish to show without any delay.
|
-- that you wish to show without any delay.
|
||||||
-- @param id (string|hash) - Id of the screen to preload
|
-- @param id (string|hash) - Id of the screen to preload
|
||||||
|
-- @param options (table)
|
||||||
-- @param cb (function) - Optional callback to invoke when screen is loaded
|
-- @param cb (function) - Optional callback to invoke when screen is loaded
|
||||||
function M.preload(id, cb)
|
function M.preload(id, options, cb)
|
||||||
assert(id, "You must provide a screen id")
|
assert(id, "You must provide a screen 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)))
|
||||||
|
|
||||||
|
-- support old function signature (id, cb)
|
||||||
|
if type(options) == "function" and not cb then
|
||||||
|
cb = options
|
||||||
|
options = nil
|
||||||
|
end
|
||||||
|
|
||||||
log("preload() queuing action", id)
|
log("preload() queuing action", id)
|
||||||
queue_action(function(action_done, action_error)
|
queue_action(function(action_done, action_error)
|
||||||
log("preload()", id)
|
log("preload()", id)
|
||||||
@@ -995,6 +1056,10 @@ function M.preload(id, cb)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- keep_loaded is an option for monarch.preload()
|
||||||
|
-- use it to get the same behavior as the auto preload checkbox
|
||||||
|
screen.auto_preload = screen.auto_preload or options and options.keep_loaded
|
||||||
|
|
||||||
if screen.preloaded or screen.loaded then
|
if screen.preloaded or screen.loaded then
|
||||||
pcallfn(cb)
|
pcallfn(cb)
|
||||||
pcallfn(action_done)
|
pcallfn(action_done)
|
||||||
@@ -1057,7 +1122,7 @@ function M.unload(id, cb)
|
|||||||
end
|
end
|
||||||
run_coroutine(screen, when_unloaded, function()
|
run_coroutine(screen, when_unloaded, function()
|
||||||
change_context(screen)
|
change_context(screen)
|
||||||
unload(screen)
|
unload(screen, true)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
return true -- return true for legacy reasons (before queue existed)
|
return true -- return true for legacy reasons (before queue existed)
|
||||||
@@ -1098,30 +1163,58 @@ 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 = screen_from_proxy(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 = screen_from_proxy(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 = screen_from_script()
|
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 = screen_from_script()
|
local screen = find_transition_screen(sender)
|
||||||
assert(screen, "Unable to find screen for current script url")
|
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
|
||||||
|
or message_id == M.TRANSITION.SHOW_OUT
|
||||||
|
or message_id == M.TRANSITION.BACK_IN
|
||||||
|
or message_id == M.TRANSITION.BACK_OUT
|
||||||
|
then
|
||||||
|
local screen = find_transition_screen(sender)
|
||||||
|
assert(screen, "Unable to find screen for transition")
|
||||||
|
if screen.transition_fn then
|
||||||
|
screen.transition_fn(message_id, message, sender)
|
||||||
|
end
|
||||||
|
elseif message_id == MSG_LAYOUT_CHANGED then
|
||||||
|
local screen = find_screen(sender)
|
||||||
|
if screen and screen.transition_fn then
|
||||||
|
screen.transition_fn(message_id, message, sender)
|
||||||
|
end
|
||||||
|
elseif message_id == M.FOCUS.GAINED
|
||||||
|
or message_id == M.FOCUS.LOST
|
||||||
|
then
|
||||||
|
local screen = find_focus_screen(sender)
|
||||||
|
assert(screen, "Unable to find screen for focus change")
|
||||||
|
if screen.focus_fn then
|
||||||
|
screen.focus_fn(message_id, message, sender)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local screen = find_post_receiver_screen(sender)
|
||||||
|
if screen and screen.receiver_fn then
|
||||||
|
screen.receiver_fn(message_id, message, sender)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1155,6 +1248,70 @@ function M.bottom(offset)
|
|||||||
return screen and screen.id
|
return screen and screen.id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Set the timestep to apply for a screen when below a popup
|
||||||
|
-- @param id (string|hash) Id of the screen to change timestep setting for
|
||||||
|
-- @param timestep (number) Timestep to apply
|
||||||
|
function M.set_timestep_below_popup(id, timestep)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
assert(timestep, "You must provide a timestep")
|
||||||
|
id = tohash(id)
|
||||||
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
screens[id].timestep_below_popup = timestep
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Set a function to call when a transition should be started
|
||||||
|
-- The function will receive (message_id, message, sender)
|
||||||
|
-- IMPORTANT! You must call monarch.on_message() from the same script as
|
||||||
|
-- this function was called
|
||||||
|
-- @param id Screen id to associate transition with
|
||||||
|
-- @param fn Transition handler function
|
||||||
|
function M.on_transition(id, fn)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
assert(fn, "You must provide a transition function")
|
||||||
|
id = tohash(id)
|
||||||
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
local screen = screens[id]
|
||||||
|
screen.transition_url = msg.url()
|
||||||
|
screen.transition_fn = fn
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Set a function to call when a screen gains or loses focus
|
||||||
|
-- The function will receive (message_id, message, sender)
|
||||||
|
-- IMPORTANT! You must call monarch.on_message() from the same script as
|
||||||
|
-- this function was called
|
||||||
|
-- @param id Screen id to associate focus listener function with
|
||||||
|
-- @param fn Focus listener function
|
||||||
|
function M.on_focus_changed(id, fn)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
assert(fn, "You must provide a focus change function")
|
||||||
|
id = tohash(id)
|
||||||
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
local screen = screens[id]
|
||||||
|
screen.focus_url = msg.url()
|
||||||
|
screen.focus_fn = fn
|
||||||
|
end
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Set a function to call when a screen is sent a message using monarch.post()
|
||||||
|
-- The function will receive (message_id, message, sender)
|
||||||
|
-- IMPORTANT! You must call monarch.on_message() from the same script as
|
||||||
|
-- this function was called
|
||||||
|
-- @param id Screen id to associate the message listener function with
|
||||||
|
-- @param fn Message listener function
|
||||||
|
function M.on_post(id, fn)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
assert(fn, "You must provide a post receiver function")
|
||||||
|
id = tohash(id)
|
||||||
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
local screen = screens[id]
|
||||||
|
screen.receiver_url = msg.url()
|
||||||
|
screen.receiver_fn = fn
|
||||||
|
end
|
||||||
|
|
||||||
local function url_to_key(url)
|
local function url_to_key(url)
|
||||||
return (url.socket or hash("")) .. (url.path or hash("")) .. (url.fragment or hash(""))
|
return (url.socket or hash("")) .. (url.path or hash("")) .. (url.fragment or hash(""))
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ local LAYOUT_CHANGED = hash("layout_changed")
|
|||||||
function M.window_resized(width, height)
|
function M.window_resized(width, height)
|
||||||
WIDTH = width
|
WIDTH = width
|
||||||
HEIGHT = height
|
HEIGHT = height
|
||||||
LEFT = vmath.vector3(-WIDTH * 2, 0, 0)
|
LEFT = vmath.vector3(-WIDTH, 0, 0)
|
||||||
RIGHT = vmath.vector3(WIDTH * 2, 0, 0)
|
RIGHT = vmath.vector3(WIDTH, 0, 0)
|
||||||
TOP = vmath.vector3(0, HEIGHT * 2, 0)
|
TOP = vmath.vector3(0, HEIGHT, 0)
|
||||||
BOTTOM = vmath.vector3(0, - HEIGHT * 2, 0)
|
BOTTOM = vmath.vector3(0, - HEIGHT, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
M.window_resized(tonumber(sys.get_config("display.width")), tonumber(sys.get_config("display.height")))
|
M.window_resized(tonumber(sys.get_config("display.width")), tonumber(sys.get_config("display.height")))
|
||||||
@@ -121,11 +121,15 @@ local function create()
|
|||||||
local current_transition = nil
|
local current_transition = nil
|
||||||
|
|
||||||
local function create_transition(transition_id, node, fn, easing, duration, delay)
|
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]
|
local t = transitions[transition_id]
|
||||||
-- find if there's already a transition for the node in
|
-- find if there's already a transition for the node in
|
||||||
-- question and if so update it instead of creating a new
|
-- question and if so update it instead of creating a new
|
||||||
-- transition
|
-- transition
|
||||||
for _,transition in ipairs(t) do
|
for _,transition in ipairs(t.transitions) do
|
||||||
if transition.node == node then
|
if transition.node == node then
|
||||||
transition.fn = fn
|
transition.fn = fn
|
||||||
transition.easing = easing
|
transition.easing = easing
|
||||||
@@ -169,10 +173,10 @@ local function create()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function start_transition(transition_id, url)
|
local function start_transition(transition_id, url)
|
||||||
|
url = url or msg.url()
|
||||||
local t = transitions[transition_id]
|
local t = transitions[transition_id]
|
||||||
table.insert(t.urls, url)
|
table.insert(t.urls, url)
|
||||||
if t.in_progress_count == 0 then
|
if t.in_progress_count == 0 then
|
||||||
table.insert(t.urls, msg.url())
|
|
||||||
current_transition = t
|
current_transition = t
|
||||||
current_transition.id = transition_id
|
current_transition.id = transition_id
|
||||||
if #t.transitions > 0 then
|
if #t.transitions > 0 then
|
||||||
@@ -250,7 +254,11 @@ local function create()
|
|||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
return instance
|
return setmetatable(instance, {
|
||||||
|
__call = function(t, ...)
|
||||||
|
return instance.handle(...)
|
||||||
|
end
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.create(node)
|
function M.create(node)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ function M.create()
|
|||||||
|
|
||||||
local function invoke_if_done()
|
local function invoke_if_done()
|
||||||
if all_callbacks_done then
|
if all_callbacks_done then
|
||||||
print("Warning: The same callback will be invoked twice from the callback tracker!", id or "")
|
print("Warning: The same callback will be invoked twice from the callback tracker!")
|
||||||
end
|
end
|
||||||
if callback_count == 0 and callback then
|
if callback_count == 0 and callback then
|
||||||
all_callbacks_done = true
|
all_callbacks_done = true
|
||||||
@@ -52,6 +52,6 @@ end
|
|||||||
|
|
||||||
return setmetatable(M, {
|
return setmetatable(M, {
|
||||||
__call = function(_, ...)
|
__call = function(_, ...)
|
||||||
return M.create(...)
|
return M.create()
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
@@ -26,6 +26,8 @@ embedded_instances {
|
|||||||
" value: \"screen1:/go\"\n"
|
" value: \"screen1:/go\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -84,12 +86,15 @@ embedded_instances {
|
|||||||
" value: \"screen2\"\n"
|
" value: \"screen2\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/test/data/screen2.collection\\\"\\n"
|
" data: \"prototype: \\\"/test/data/screen2.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
@@ -147,6 +152,8 @@ embedded_instances {
|
|||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -215,6 +222,8 @@ embedded_instances {
|
|||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -278,6 +287,8 @@ embedded_instances {
|
|||||||
" value: \"transition1:/go\"\n"
|
" value: \"transition1:/go\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
@@ -376,12 +387,15 @@ embedded_instances {
|
|||||||
" value: \"background\"\n"
|
" value: \"background\"\n"
|
||||||
" type: PROPERTY_TYPE_HASH\n"
|
" type: PROPERTY_TYPE_HASH\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/test/data/background.collection\\\"\\n"
|
" data: \"prototype: \\\"/test/data/background.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
@@ -439,12 +453,15 @@ embedded_instances {
|
|||||||
" value: \"true\"\n"
|
" value: \"true\"\n"
|
||||||
" type: PROPERTY_TYPE_BOOLEAN\n"
|
" type: PROPERTY_TYPE_BOOLEAN\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionfactory\"\n"
|
" id: \"collectionfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/test/data/screen_preload.collection\\\"\\n"
|
" data: \"prototype: \\\"/test/data/screen_preload.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
@@ -502,6 +519,8 @@ embedded_instances {
|
|||||||
" value: \"focus1:/go#focus1\"\n"
|
" value: \"focus1:/go#focus1\"\n"
|
||||||
" type: PROPERTY_TYPE_URL\n"
|
" type: PROPERTY_TYPE_URL\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"collectionproxy\"\n"
|
" id: \"collectionproxy\"\n"
|
||||||
|
|||||||
@@ -16,12 +16,15 @@ embedded_instances {
|
|||||||
" z: 0.0\n"
|
" z: 0.0\n"
|
||||||
" w: 1.0\n"
|
" w: 1.0\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
|
" property_decls {\n"
|
||||||
|
" }\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"embedded_components {\n"
|
"embedded_components {\n"
|
||||||
" id: \"screensfactory\"\n"
|
" id: \"screensfactory\"\n"
|
||||||
" type: \"collectionfactory\"\n"
|
" type: \"collectionfactory\"\n"
|
||||||
" data: \"prototype: \\\"/test/data/screens.collection\\\"\\n"
|
" data: \"prototype: \\\"/test/data/screens.collection\\\"\\n"
|
||||||
"load_dynamically: false\\n"
|
"load_dynamically: false\\n"
|
||||||
|
"dynamic_prototype: false\\n"
|
||||||
"\"\n"
|
"\"\n"
|
||||||
" position {\n"
|
" position {\n"
|
||||||
" x: 0.0\n"
|
" x: 0.0\n"
|
||||||
|
|||||||
@@ -378,6 +378,20 @@ return function()
|
|||||||
assert(not monarch.is_preloading(TRANSITION1))
|
assert(not monarch.is_preloading(TRANSITION1))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("should be able to preload a screen and keep it loaded", function()
|
||||||
|
assert(not monarch.is_preloading(TRANSITION1))
|
||||||
|
monarch.preload(TRANSITION1, { keep_loaded = true })
|
||||||
|
wait_until_done(function(done)
|
||||||
|
monarch.when_preloaded(TRANSITION1, done)
|
||||||
|
end)
|
||||||
|
|
||||||
|
monarch.show(TRANSITION1)
|
||||||
|
assert(wait_until_visible(TRANSITION1), "Transition1 was never shown")
|
||||||
|
monarch.back()
|
||||||
|
assert(wait_until_hidden(TRANSITION1), "Transition1 was never hidden")
|
||||||
|
assert(monarch.is_preloaded(TRANSITION1))
|
||||||
|
end)
|
||||||
|
|
||||||
it("should ignore any preload calls while busy", function()
|
it("should ignore any preload calls while busy", function()
|
||||||
monarch.show(TRANSITION1)
|
monarch.show(TRANSITION1)
|
||||||
-- previously a call to preload() while also showing a screen would
|
-- previously a call to preload() while also showing a screen would
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ local easing = require "monarch.transitions.easings"
|
|||||||
|
|
||||||
return function()
|
return function()
|
||||||
|
|
||||||
|
local function wait_timeout(fn, ...)
|
||||||
|
local args = { ... }
|
||||||
|
cowait(function() return fn(unpack(args)) end, 5)
|
||||||
|
return fn(...)
|
||||||
|
end
|
||||||
|
|
||||||
describe("transitions", function()
|
describe("transitions", function()
|
||||||
before(function()
|
before(function()
|
||||||
mock_msg.mock()
|
mock_msg.mock()
|
||||||
@@ -22,6 +28,28 @@ describe("transitions", function()
|
|||||||
end)
|
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()
|
it("should replay and immediately finish on layout change", function()
|
||||||
function dummy_transition(node, to, easing, duration, delay, cb)
|
function dummy_transition(node, to, easing, duration, delay, cb)
|
||||||
print("dummy transition")
|
print("dummy transition")
|
||||||
|
|||||||
Reference in New Issue
Block a user