Table of Contents
src / account / account.gd
Attached Scenes
Code
extends BoxContainer
class_name Account
signal ui_backed
signal selected
signal unselected
signal get_started
@export var resource : AccountResource : set = set_resource
const LABELS_IN_RESOURCE = [
'player_name',
'latest_chapter_name',
'obtained_strawberry_count',
'total_failure_count',
'total_play_time',
'obtained_cassettes',
'obtained_blue_hearts',
]
enum State { UNFOCUSED, FOCUSED, SELECTED }
@export var state : State = State.UNFOCUSED
@export var focus_top : bool = false : set = set_focus_top
@export var focus_menu : bool = false : set = set_focus_menu
func _ready() -> void:
FocusHelper.set_neighbors_v(
[%GetStartedButton, %ChangeNameButton, %AssistModeButton])
reset_summary_visiblity()
if resource: load_resource()
func reset_summary_visiblity() -> void:
if resource:
%TicketSummaryPlaceholder.hide()
%TicketSummary.show()
%CoverSummary.show()
else:
%TicketSummaryPlaceholder.show()
%TicketSummary.hide()
%CoverSummary.hide()
func _input(event: InputEvent) -> void:
if is_focused() && event.is_action_pressed("ui_accept"):
selected.emit()
elif event.is_action_pressed("ui_back"):
if is_selected(): unselected.emit()
elif is_focused(): ui_backed.emit()
func set_resource(_resource: AccountResource) -> void:
resource = _resource
func load_resource() -> void:
reset_summary_visiblity()
if not resource: return
for key in LABELS_IN_RESOURCE:
var node = get_node("%" + key.to_pascal_case())
if node:
match key:
'obtained_cassettes':
set_icon_visibility_on(node,
resource.obtained_cassettes())
'obtained_blue_hearts':
set_icon_visibility_on(node,
resource.obtained_blue_hearts())
_:
node.text = str(resource.attr(key))
func set_icon_visibility_on(node: Node, flags: Array[bool]) -> void:
for i in flags.size():
var child = node.get_child(i)
if child: child.visible = flags[i]
func set_focus_top(val) -> void:
if val: grab_focus()
func set_focus_menu(val) -> void:
if val: %GetStartedButton.grab_focus()
func is_focused() -> bool:
return state == State.FOCUSED
func is_unfocused() -> bool:
return state == State.UNFOCUSED
func is_selected() -> bool:
return state == State.SELECTED
func _on_focus_entered() -> void:
if is_unfocused():
%AnimationPlayer.play("focused")
func _on_focus_exited() -> void:
if is_focused():
%AnimationPlayer.play("unfocused")
func _on_selected() -> void:
%AnimationPlayer.play("selected")
func _on_unselected() -> void:
%AnimationPlayer.play("unselected")
func _on_get_started_button_pressed() -> void:
get_started.emit()