netfishing/ui/title_credits_page.gd

88 lines
2.1 KiB
GDScript3
Raw Permalink Normal View History

class_name TitleCreditsPage
extends Control
signal back_requested(restore_navigation_focus: bool)
@onready var _paper: PanelContainer = %Paper
@onready var _back_button: Button = %CreditsBackButton
var _navigation_focus_active: bool = false
func _ready() -> void:
UtilityPageStyle.apply_page(self)
_paper.add_theme_stylebox_override(
"panel", UtilityPageStyle.panel_style()
)
UtilityPageStyle.apply_ocean_button(_back_button)
_back_button.pressed.connect(_request_back)
hide()
func open_page(use_navigation_focus: bool) -> void:
_navigation_focus_active = use_navigation_focus
show()
UtilityPageStyle.animate_in(self)
if use_navigation_focus:
call_deferred("_focus_back")
else:
_release_page_focus()
func close_page() -> void:
_navigation_focus_active = false
_release_page_focus()
hide()
scale = Vector2.ONE
modulate.a = 1.0
func handle_input(event: InputEvent) -> bool:
if not visible:
return false
if event is InputEventMouseMotion:
_navigation_focus_active = false
_release_page_focus()
return false
if event is InputEventKey and (event as InputEventKey).echo:
return false
var moves_focus: bool = (
event.is_action_pressed("ui_up")
or event.is_action_pressed("ui_down")
or event.is_action_pressed("ui_left")
or event.is_action_pressed("ui_right")
)
if moves_focus:
_navigation_focus_active = true
if not _page_has_focus():
_back_button.grab_focus()
return true
if event.is_action_pressed("ui_cancel"):
_request_back()
return true
return false
func get_back_button() -> Button:
return _back_button
func _focus_back() -> void:
if visible and _navigation_focus_active:
_back_button.grab_focus()
func _request_back() -> void:
back_requested.emit(_navigation_focus_active)
func _page_has_focus() -> bool:
var focus_owner: Control = get_viewport().gui_get_focus_owner()
return focus_owner != null and is_ancestor_of(focus_owner)
func _release_page_focus() -> void:
var focus_owner: Control = get_viewport().gui_get_focus_owner()
if focus_owner != null and is_ancestor_of(focus_owner):
focus_owner.release_focus()