Button¶
Renders a ButtonSprite inline of the text and adjust the offset accordingly to resume processing after the sprite.
Syntax¶
(1)
|button,buttonid|
(2) (Not compatible with OrganiseLines)
|button,buttonid,type|
(3) (Not compatible with OrganiseLines)
|button,buttonid,type,description|
Parameters¶
buttonid
: int¶
The button id to render. This must be a valid integer or an exception will be thrown. If it is not a valid button id, this is undefined behavior which may lead to an exception being thrown. Here are the different button ids available:
id | name |
---|---|
0 | Up |
1 | Down |
2 | Left |
3 | Right |
4 | Confirm / Jump / Interact |
5 | Cancel / Field Action |
6 | Scroll Faster / Switch Party |
7 | Show / Hide HUD |
8 | Pause |
9 | Help |
type
: int¶
Determines how to render between keyboard input If no value is specified, this defaults to -1. This must be a valid integer or an exception will be thrown. Here are the different behaviors:
- -1: Automatically determine which input to render based on the current control scheme
- >= 1: Always render the controller input
- Anything else: Always render the keyboard input
This parameter is only used in the Key Bindings List Type under normal gameplay.
description
: string¶
If no value is specified, this defaults to null. This render some text immediately after the button. This parameter is not used under normal gameplay and the text does not render correctly as its rendering is not considered during offset calculations.
Remarks¶
The command will first create a GameObject with a ButtonSprite which will get added to the buts
list. This ButtonSprite will have the following properties:
- tridimentional: set to
tridimensional
- parent: set to the textholder
- localEulerAngles: Vector3.zero.
- If
tridimensional
is false, the layer and the gameObject's layer is set to the current one (defaults to 5, but may be changed by a layer command).
The ButtonSprite is initialised like so:
id
:buttonid
onlyone
:type
labeltext
:description
tposition
: (current offset + o, current line + 0.225 * size.y) where o is 0.25 or 0.55 if it is a longer button than usualsize
: (size.x / 2.2, size.y / 2.2, 1.0)overridesortorder
: sortparent
: nullbasecolor
: pure whitelabeloffset
: Vector3.zero
After the button has been fully setup, the current offset will be increased by 0.75 (1.5 if this was a longer button than usual). Finally, if the current speed is above 0 and Text advance is not reporting a text skipping, an additional yield will be performed using the current speed as amount of seconds. This will simulate an additional cycle of the Char loop.
This command has special logic in OrganiseLines. It adds 0.7 to the line accumulator when encountered and another 0.7 if the the keyboard input text is not empty and it doesn't have Arrow
. Then, it reset the word accumulator to 0.
It should be noted that this command does not work correctly under Single Letter Rendering because the offset calculations are off which means the ButtonSprite may not render on the screen or it may render at the incorrect position.
This command is accumulated for the Backtracking system.
Known issue with spacing¶
While it is possible to place this command anywhere in the input string, it is strongly recommended to place it at the start of a line or after a space. This is because a known issue with the button rendering is that the render position is slightly off to the left and if this command is placed directly after some text, it will overlap said text by a slight amount. Putting a space before the command or ensuring the command is placed at the start of a line remedies this problem. Additionally, it also helps OrganiseLines because it increases the chance that the button will not overflow the line if it is placed at the end of it due to the method resetting the word width accumulator when encountering this command which would ignore the current word.
Compatibility with OrganiseLines¶
Syntax (2) and (3) are not recommended to use because while they technically work, if the linebreak requested isn't null, this will throw an exception during OrganiseLines. The auto line breaker assumes that the command will be in syntax (1) as far as parsing the buttonid
parameter goes. It is still possible to use these syntaxes, but care must be given to make sure OrganiseLines is never called on the input string. The game uses syntax (2) only during the Key Bindings List Type.