115 lines
3.5 KiB
Markdown
115 lines
3.5 KiB
Markdown
|
# Menus
|
||
|
|
||
|
There are two specific types of menus in Escoria. One is the "main menu"
|
||
|
and the other is the "in-game menu".
|
||
|
|
||
|
These are defined in `escoria/ui/in_game_menu` and `escoria/ui/main_menu`.
|
||
|
|
||
|
The menu system is somewhat intricate and certainly not final or stable
|
||
|
at the time of writing this. For example localization is quite lacking
|
||
|
when textures are used for buttons.
|
||
|
|
||
|
## Prior documentation
|
||
|
|
||
|
The documentation [at flossmanuals](https://fr.flossmanuals.net/creating-point-and-click-games-with-escoria/game-menues/) is fairly well up to date,
|
||
|
so you may use that as a reference as well.
|
||
|
|
||
|
## Required nodes
|
||
|
|
||
|
Your base node must be `Control`.
|
||
|
|
||
|
You are free to use `Container` nodes to lay out your menu.
|
||
|
|
||
|
Attach `ui/menu_button.gd` or `ui/menu_texturebutton.gd` to your menu buttons and `ui/lang_button.gd`
|
||
|
to your language-changing buttons.
|
||
|
|
||
|
The buttons' signal handlers are resolved dynamically. This means that you
|
||
|
should name the buttons like
|
||
|
|
||
|
* new_game
|
||
|
* continue
|
||
|
* exit
|
||
|
* credits
|
||
|
* instructions
|
||
|
* save
|
||
|
|
||
|
The use of `TextureButton` is possible if you don't intend to switch locales.
|
||
|
Sometime in the future we would like to support localized `TextureButton` buttons.
|
||
|
|
||
|
## Optional nodes
|
||
|
|
||
|
If you want background music, add an `AudioStreamPlayer` by the name
|
||
|
of `stream` and set a file in the `bg_sound` variable. It will play
|
||
|
and loop automatically
|
||
|
|
||
|
## Spawning menus
|
||
|
|
||
|
By default a menu is requested by hitting the escape button. You can
|
||
|
configure this in the `Input Map` tab in your project settings.
|
||
|
|
||
|
The menu that opens up is the in-game menu.
|
||
|
|
||
|
The main menu is used only when starting the game.
|
||
|
|
||
|
## Confirm popup
|
||
|
|
||
|
The structure similar to a regular menu. You have a base `Control`.
|
||
|
Then one `Control` named after each locale; create one and call it "en" in doubt.
|
||
|
|
||
|
In these you can have eg. `TextureRect`s called
|
||
|
|
||
|
* UI_QUIT_CONFIRM
|
||
|
* UI_NEW_GAME_CONFIRM
|
||
|
|
||
|
Optionally you can use the `ui/translated_label.gd` or `ui/translated_rtlabel.gd`
|
||
|
scripts to pull text from localization.
|
||
|
|
||
|
Which are hidden by default and shown on demand.
|
||
|
|
||
|
You must also have the following
|
||
|
|
||
|
* yes
|
||
|
* no
|
||
|
|
||
|
They must be visible, because they are your yes/no buttons.
|
||
|
|
||
|
The types on any of these don't matter, but *their names do*.
|
||
|
|
||
|
If you have multiple locales, hide the top locale-named nodes, all of
|
||
|
them, or the code might pass the click to the wrong button and ignore it.
|
||
|
|
||
|
Any means of passing in messages to the confirmation popups has been
|
||
|
deprecated as not being frameworky enough; that would require altering
|
||
|
Escoria code for a scene that's created by the developer anyway.
|
||
|
|
||
|
## Credits
|
||
|
|
||
|
You may configure a credits screen in `escoria/ui/credits`, and an end
|
||
|
credits screen in `escoria/ui/end_credits`.
|
||
|
|
||
|
This is pretty free-form, but the simplest form is
|
||
|
|
||
|
* credits (`Control`)
|
||
|
* background (`TextureRect`)
|
||
|
* menu (`TextureRect`)
|
||
|
|
||
|
Then you attach the `globals/credits.gd` script to the `credits` node
|
||
|
and everything should work as expected.
|
||
|
|
||
|
You can use the same script for the end credits, but if you want eg.
|
||
|
music there, you have to make a copy and edit that script. Or make
|
||
|
it configurable and submit a pull request with changes and removal
|
||
|
of this statement.
|
||
|
|
||
|
Protip: if you end your game on a fade out, you will not be able to
|
||
|
see the end credits, as `telon` will have made it all black.
|
||
|
|
||
|
You will then make a copy of `credits.gd` for your game, call it
|
||
|
`end_credits.gd` and attach that to `credits`. Then you'll add the
|
||
|
following line to `_ready()`:
|
||
|
|
||
|
```
|
||
|
get_tree().call_group("game", "telon_play_anim", "fade_in")
|
||
|
```
|
||
|
|