First commit 🎉
This commit is contained in:
commit
43ea213f9b
728 changed files with 37080 additions and 0 deletions
167
addons/popochiu/engine/interfaces/i_graphic_interface.gd
Normal file
167
addons/popochiu/engine/interfaces/i_graphic_interface.gd
Normal file
|
@ -0,0 +1,167 @@
|
|||
class_name PopochiuIGraphicInterface
|
||||
extends Node
|
||||
## Provides access to the in-game [PopochiuGraphicInterface] (GUI). Access with [b]G[/b] (e.g.
|
||||
## [code]G.block()[/code]).[br][br]
|
||||
##
|
||||
## Use it to manage the GUI. Its script is [b]i_graphic_interface.gd[/b].[br][br]
|
||||
##
|
||||
## Some things you can do with it:[br][br]
|
||||
##
|
||||
## [b]•[/b] Show messages in the middle of the screen (like a narrator or a game message).[br]
|
||||
## [b]•[/b] Show info about hovered objects in the game.[br]
|
||||
## [b]•[/b] Show, hide, block or unblock the GUI.[br][br]
|
||||
##
|
||||
## Examples:
|
||||
## [codeblock]
|
||||
## G.show_info('Click this to open the main menu')
|
||||
## G.display('There are no actions set for this object')
|
||||
## G.hide_interface()
|
||||
## G.connect('inventory_shown', self, '_play_inventory_sfx')
|
||||
## [/codeblock]
|
||||
|
||||
## Emitted when [method block] is called. [PopochiuGraphicInterface] connects to this signal in
|
||||
## order to block the GUI.
|
||||
signal blocked
|
||||
## Emitted when [method unblock] is called. [PopochiuGraphicInterface] connects to this signal in
|
||||
## order to unblock the GUI.
|
||||
signal unblocked
|
||||
## Emitted when [method hide_interface] is called. [PopochiuGraphicInterface] connects to this
|
||||
## signal in order to hide the GUI.
|
||||
signal hidden
|
||||
## Emitted when [method show_interface] is called. [PopochiuGraphicInterface] connects to this
|
||||
## signal in order to show the GUI.
|
||||
signal shown
|
||||
## Emitted when the cursor enters (hover) a [param clickable].
|
||||
signal mouse_entered_clickable(clickable: PopochiuClickable)
|
||||
## Emitted when the cursor exits a [param clickable].
|
||||
signal mouse_exited_clickable(clickable: PopochiuClickable)
|
||||
## Emitted when the cursor enters (hover) a [param inventory_item].
|
||||
signal mouse_entered_inventory_item(inventory_item: PopochiuInventoryItem)
|
||||
## Emitted when the cursor exits a [param inventory_item].
|
||||
signal mouse_exited_inventory_item(inventory_item: PopochiuInventoryItem)
|
||||
## Emitted when a [PopochiuCharacter] begins to say a dialogue line.
|
||||
signal dialog_line_started
|
||||
## Emitted when a [PopochiuCharacter] finishes saying a dialogue line.
|
||||
signal dialog_line_finished
|
||||
## Emitted when [method show_hover_text] so the GUI can show [param message] in the hover text.
|
||||
## I.e. when a [PopochiuClickable] is hovered.
|
||||
signal hover_text_shown(message: String)
|
||||
## Emitted when [method show_system_text] so the GUI can show [param message] as a system text.
|
||||
signal system_text_shown(message: String)
|
||||
## Emitted when the system text disappears after a click on the screen.
|
||||
signal system_text_hidden
|
||||
## Emitted when the [PopochiuPopup] identified by [member PopochiuPopup.script_name] is opened.
|
||||
signal popup_requested(script_name: StringName)
|
||||
# NOTE: Maybe add some signals for clicking objects and items
|
||||
#signal clicked_clickable(clickable: PopochiuClickable)
|
||||
#signal clicked_inventory_item(inventory_item: PopochiuInventoryItem)
|
||||
## Emitted when the dialog options of the running [PopochiuDialog] are shown.
|
||||
signal dialog_options_shown
|
||||
## Emitted when a game is loaded and the GUI has shown (or not shown) a notification to the player.
|
||||
signal load_feedback_finished
|
||||
|
||||
## Whether the GUI is blocked or not.
|
||||
var is_blocked := false
|
||||
## Provides access to the identifier of the GUI template used by the game.
|
||||
var template := ""
|
||||
## Provides access to the [PopochiuGraphicInterface] of the GUI template used by the game.
|
||||
var gui: PopochiuGraphicInterface
|
||||
|
||||
|
||||
#region Godot ######################################################################################
|
||||
func _init() -> void:
|
||||
Engine.register_singleton(&"G", self)
|
||||
|
||||
|
||||
func _ready():
|
||||
template = PopochiuResources.get_data_value("ui", "template", "")
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public #####################################################################################
|
||||
## Displays [param msg] at the center of the screen, useful for narration, instructions, or warnings
|
||||
## to players. Temporarily blocks the GUI until players click anywhere on the game window, causing
|
||||
## the text to disappear.
|
||||
func show_system_text(msg: String) -> void:
|
||||
# NOTE: Not sure if this logic should happen here. Perhaps it could trigger a signal to which
|
||||
# the in-game graphic interface connects, allowing it to handle the logic.
|
||||
if not PopochiuUtils.e.playing_queue and gui.popups_stack.is_empty():
|
||||
block()
|
||||
|
||||
if PopochiuUtils.e.cutscene_skipped:
|
||||
await get_tree().process_frame
|
||||
|
||||
return
|
||||
|
||||
system_text_shown.emit(PopochiuUtils.e.get_text(msg))
|
||||
await system_text_hidden
|
||||
|
||||
if not PopochiuUtils.e.playing_queue and gui.popups_stack.is_empty():
|
||||
unblock()
|
||||
|
||||
|
||||
## Displays [param msg] at the center of the screen, useful for narration, instructions, or warnings
|
||||
## to players. Temporarily blocks the GUI until players click anywhere on the game window, causing
|
||||
## the text to disappear.[br][br]
|
||||
## [i]This method is intended to be used inside a [method Popochiu.queue] of instructions.[/i]
|
||||
func queue_show_system_text(msg: String) -> Callable:
|
||||
return func (): await show_system_text(msg)
|
||||
|
||||
|
||||
## Displays [param msg] in the game window without blocking interactions. Used to show players the
|
||||
## name of objects where the cursor is positioned (i.e., a [PopochiuClickable]). It could also be
|
||||
## used to show players what will happen if they use the left click or right click.
|
||||
func show_hover_text(msg := '') -> void:
|
||||
hover_text_shown.emit(msg)
|
||||
|
||||
|
||||
## Causes the in-game graphic interface (GUI) to be blocked. This prevents players from interacting
|
||||
## with the game elements.
|
||||
func block() -> void:
|
||||
is_blocked = true
|
||||
blocked.emit()
|
||||
|
||||
|
||||
## Causes the in-game graphic interface (GUI) to be unblocked.
|
||||
func unblock(wait := false) -> void:
|
||||
is_blocked = false
|
||||
|
||||
if wait:
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
|
||||
if is_blocked: return
|
||||
|
||||
unblocked.emit()
|
||||
|
||||
|
||||
## Makes the in-game graphic interface (GUI) to hide.
|
||||
func hide_interface() -> void:
|
||||
hidden.emit()
|
||||
|
||||
|
||||
## Makes the in-game graphic interface (GUI) to hide.[br][br]
|
||||
## [i]This method is intended to be used inside a [method Popochiu.queue] of instructions.[/i]
|
||||
func queue_hide_interface() -> Callable:
|
||||
return func(): hide_interface()
|
||||
|
||||
|
||||
## Makes the in-game graphic interface (GUI) to show.
|
||||
func show_interface() -> void:
|
||||
shown.emit()
|
||||
|
||||
|
||||
## Makes the in-game graphic interface (GUI) to show.[br][br]
|
||||
## [i]This method is intended to be used inside a [method Popochiu.queue] of instructions.[/i]
|
||||
func queue_show_interface() -> Callable:
|
||||
return func(): show_interface()
|
||||
|
||||
|
||||
## Returns the name of the cursor texture to show.
|
||||
func get_cursor_name() -> String:
|
||||
if not is_instance_valid(gui): return ""
|
||||
|
||||
return gui.get_cursor_name()
|
||||
|
||||
|
||||
#endregion
|
Loading…
Add table
Add a link
Reference in a new issue