Le_Dieu_du_fond_du_Jardin/docs/triggers-and-exits.md

64 lines
2.2 KiB
Markdown
Raw Normal View History

2020-04-18 22:06:40 +02:00
# Triggers and exits
Triggers in Escoria are thought of as "things a character can walk on", either
like opening a door in Prince of Persia by stepping on a plate or a more abstract
"To street" exit trigger.
Inert items, things that are "triggers or hotspots for the mouse" but not to be walked on, should
be implemented using `item.gd`.
Although triggers and exits can be attached to any type of `Node`,
not every case works properly.
The working cases are described here.
Exit is extended from trigger. To make gameplay quicker and "more modern", trigger
implements double-clicking, which therefore works in exit as well.
Sometimes you may want a hidden `trigger`, by having an empty tooltip. As the player
will figure out where they are by the events triggered, it would feel broken if a
double-click teleported the player. Therefore an empty tooltip disables double-clicking.
## Concerning the player
Your player character must be a `KinematicBody2D` in order to work with triggers
and exits.
If you refer to an old documentation that claims otherwise, and don't make it a
`KinematicBody2D`, Godot will complain. So before you start, remember this.
Also bear in mind that your player will need a `CollisionShape2D` or such to
collide with the triggers and exits.
## Triggers
Triggers are `Area2D`, with the required `CollisionPolygon2D` child and optionally also
a `Sprite`) child. You may name them freely.
The `trigger.gd` script must be attached to the `Area2D`.
The triggers react only on the player character, and the player character's position being
within the Area2D.
Note that you will have to create an ESC script with `:enter` and `:exit`
which are triggered when the player enters or exits the `Area2D`.
## Exits
Exits can have the same node structure as a trigger or be `TextureRect`s. Be warned that
`TextureRect` support may be dropped in the near future.
The `exit.gd` script must be attached to either the `Area2D` or `TextureRect`.
Because exits are meant for changing scenes, the event keyword is `:exit_scene` to avoid
confusion with triggers.
An example of this would be
```
:exit_scene
set_global last_exit bridge
change_scene res://game/rooms/office/main.tscn
```