70 lines
1.7 KiB
GDScript

extends Node3D
const MESSAGE_FMT := (
"-= H E L L O G R U N K E R =-\n"
+ "Your GRUNK QUOTA today:\n"
+ ".... {0} g\n"
+ "GRUNK collected:\n"
+ ".... {1} g\n"
+ "-================================-\n"
+ "{2}\n"
+ "{3}\n"
+ "Look forward to: {4}\n"
+ ".... at {5} g\n"
+ "-= YOUR BENEFACTORS THANK YOU =-"
)
const STALLING_MSG := "\n\n\n\n\n. . . C a l c u l a t i n G . . ."
@onready var text_terminal: TextTerminal = %TextTerminal
@onready var stall_timer: Timer = %StallTimer
@onready var terminal_animation: AnimationPlayer = %TerminalAnimation
func _ready() -> void:
World.instance.manager.grunk_emptied.connect(_on_tank_emptied)
recompute()
func _next_milestone_name() -> String:
var next_milestone := World.instance.manager.next_milestone()
return next_milestone.name if next_milestone else "NOTHING"
func _next_milestone_amount() -> String:
var next_milestone_amt := World.instance.manager.next_milestone_amount()
return str(next_milestone_amt) if next_milestone_amt >= 0 else "NEVER"
func build_message() -> String:
var msg_lines := World.instance.manager.latest_milestone().message.split("\n")
var line_1 := msg_lines[0]
var line_2 := msg_lines[1] if len(msg_lines) >= 2 else ""
return MESSAGE_FMT.format(
[
int(World.instance.manager.grunk_quota),
int(World.instance.manager.grunk_vault),
line_1,
line_2,
_next_milestone_name(),
_next_milestone_amount()
]
)
## Trigger a recompute.
##
## Under the hood this is instantaneous, but we want to stall for dramatic effect.
func recompute() -> void:
text_terminal.text = STALLING_MSG
terminal_animation.play("jangle")
stall_timer.start()
func _update_terminal() -> void:
text_terminal.text = build_message()
func _on_tank_emptied(_amount: float) -> void:
recompute()