src / ui / button / button.tscn

Diagram

Diagram

Assets

200

Overridden virtual functions

_process

func _process(delta: float) -> void:
	if not focused: return
	blink_time += delta
	add_theme_color_override("font_focus_color", get_focus_color())
	if blink_time > BLINK_INTERVAL: blink_time = 0

Scene Tree

  • Button Button

    • AnimationPlayer AnimationPlayer

Signal Connections

$.:[focus_entered]⇒$.
func _on_focus_entered() -> void:
	focused = true
	%AnimationPlayer.play("focused_%s" % [focus_move_direction_key()])
$.:[focus_exited]⇒$.
func _on_focus_exited() -> void:
	focused = false
	%AnimationPlayer.play("unfocused_%s" % [focus_move_direction_key()])

Animations

Animation_evwsm

Diagram

focused_none

Diagram

focused_right

Diagram

focused_up

Diagram

unfocused_none

Diagram

unfocused_right

Diagram

unfocused_up

Diagram

Properties

Table 1. Root properties
Name Value

texture_filter

2

offset_right

287.0

offset_bottom

91.0

theme

text

` Button`

icon

Options
Figure 1. res://assets/images/ui/Options.svg

flat

true

alignment

0

script

focus_color_1

Color(0.5, 1, 0.5, 1)

focus_color_2

Color(1, 1, 0.5, 1)

Table 2. $AnimationPlayer properties
Name Value

unique_name_in_owner

true

libraries

{ "": SubResource("AnimationLibrary_c4kiu") }

button.gd

extends Button

@export var focus_move_direction : FocusMoveDirection
@export_color_no_alpha var focus_color_1 : Color
@export_color_no_alpha var focus_color_2 : Color
enum FocusMoveDirection { RIGHT, UP, NONE }

const BLINK_INTERVAL := 0.2
var blink_time := 0.0
var focused := false


func _process(delta: float) -> void:
	if not focused: return
	blink_time += delta
	add_theme_color_override("font_focus_color", get_focus_color())
	if blink_time > BLINK_INTERVAL: blink_time = 0


func get_focus_color() -> Color:
	if blink_time > BLINK_INTERVAL / 2:
		return focus_color_1
	else:
		return focus_color_2


func focus_move_direction_key() -> String:
	return FocusMoveDirection.find_key(focus_move_direction).to_lower()


func _on_focus_entered() -> void:
	focused = true
	%AnimationPlayer.play("focused_%s" % [focus_move_direction_key()])


func _on_focus_exited() -> void:
	focused = false
	%AnimationPlayer.play("unfocused_%s" % [focus_move_direction_key()])