12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # Copyright (C) 2022-2023 John Pennycook
- # SPDX-License-Identifier: MIT
- @tool
- @icon("res://addons/input_prompts/icon.svg")
- class_name InputPrompt
- extends TextureRect
- ## Base class for input prompts.
- ##
- ## Base class for input prompts.
- ## Emitted when one of the [InputEvent]s associated with this prompt is pressed.
- signal pressed
- enum Icons {
- AUTOMATIC,
- XBOX,
- SONY,
- NINTENDO,
- KEYBOARD,
- }
- ## The set of [InputEvent]s that should satisfy this input prompt.
- @export var events: Array[InputEvent] = []
- func _init():
- texture = null
- stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
- func _update_icon():
- pass
- func _refresh():
- _update_icon()
- func _input(event: InputEvent):
- if not events.any(func(e): return event.is_match(e)):
- return
- if not event.is_pressed():
- return
- if event.is_echo():
- return
- emit_signal("pressed")
- func _enter_tree():
- PromptManager.icons_changed.connect(_update_icon)
- add_to_group("_input_prompts")
- func _exit_tree():
- remove_from_group("_input_prompts")
- PromptManager.icons_changed.disconnect(_update_icon)
- ## Force this [InputPrompt] node to refresh its icons and events.
- ## Must be called if the [InputMap] is changed.
- ## [br][br]
- ## [b]Note[/b]: Use [InputPromptManager] to refresh all nodes at once.
- func refresh():
- _refresh()
|