netfishing/ui/typewriter_reveal.gd

48 lines
1.2 KiB
GDScript3
Raw Normal View History

class_name TypewriterReveal
extends RefCounted
const DEFAULT_CHARACTERS_PER_SECOND: float = 28.0
const MIN_CHARACTERS_PER_SECOND: float = 12.0
const MAX_CHARACTERS_PER_SECOND: float = 60.0
static var _characters_per_second: float = DEFAULT_CHARACTERS_PER_SECOND
static func set_characters_per_second(value: float) -> void:
_characters_per_second = clampf(
value,
MIN_CHARACTERS_PER_SECOND,
MAX_CHARACTERS_PER_SECOND,
)
static func get_characters_per_second() -> float:
return _characters_per_second
static func start(
label: Label,
characters_per_second: float = -1.0,
) -> float:
if label == null:
return 0.0
var character_count: int = label.get_total_character_count()
if character_count <= 0:
label.visible_characters = -1
return 0.0
label.visible_characters = 0
var resolved_characters_per_second := (
characters_per_second
if characters_per_second > 0.0
else _characters_per_second
)
var duration := float(character_count) / resolved_characters_per_second
var reveal_tween := label.create_tween()
reveal_tween.tween_property(
label,
"visible_characters",
character_count,
duration,
).from(0).set_trans(Tween.TRANS_LINEAR)
return duration