417cf30a9c
Das Lebensmoos bekommt links und rechts Platz für seinen Umriss, der bei zwei von drei Formen abgeschnitten war; die Bilder der Vitrine sind neu aufgenommen. Die Pausenanzeige kehrt zurück, wenn eine Meldung während der Pause abläuft. Ein Test prüft die Splitter fremder Schläge, und der Test ohne Bilderordner hängt nicht mehr davon ab, was in res://art liegt. Der Fragebogen nennt die Felsproben und sagt, was sofort kommt und was erst mit der Antwort des Hosts. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
78 lines
2.3 KiB
GDScript
78 lines
2.3 KiB
GDScript
class_name Hud
|
|
extends CanvasLayer
|
|
## Text over the game: the stone count, short messages, a status line for
|
|
## playing together and a help line.
|
|
|
|
const MESSAGE_SECONDS := 2.5
|
|
|
|
var _stone := Label.new()
|
|
var _message := Label.new()
|
|
var _status := Label.new()
|
|
var _help := Label.new()
|
|
var _message_left := 0.0
|
|
var _paused := false
|
|
|
|
|
|
func _ready() -> void:
|
|
_stone.position = Vector2(16, 12)
|
|
_stone.add_theme_font_size_override("font_size", 22)
|
|
_message.position = Vector2(16, 48)
|
|
_message.add_theme_font_size_override("font_size", 18)
|
|
_status.add_theme_font_size_override("font_size", 14)
|
|
_status.set_anchors_and_offsets_preset(Control.PRESET_TOP_RIGHT, Control.PRESET_MODE_MINSIZE, 16)
|
|
_status.grow_horizontal = Control.GROW_DIRECTION_BEGIN
|
|
_help.text = tr("HELP")
|
|
_help.add_theme_font_size_override("font_size", 14)
|
|
for label: Label in [_stone, _message, _status, _help]:
|
|
label.add_theme_color_override("font_outline_color", Color.BLACK)
|
|
label.add_theme_constant_override("outline_size", 4)
|
|
add_child(label)
|
|
_help.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_LEFT, Control.PRESET_MODE_MINSIZE, 16)
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if _message_left <= 0.0:
|
|
return
|
|
_message_left -= delta
|
|
if _message_left <= 0.0:
|
|
_message.text = tr("PAUSED") if _paused else ""
|
|
|
|
|
|
func show_stone(count: int) -> void:
|
|
_stone.text = tr("STONE_COUNT") % count
|
|
|
|
|
|
## Shows the text for `key` for a few seconds, with `values` filled into
|
|
## its placeholders.
|
|
func flash(key: String, values: Array = []) -> void:
|
|
_message.text = tr(key) % values if not values.is_empty() else tr(key)
|
|
_message_left = MESSAGE_SECONDS
|
|
|
|
|
|
## Shows or hides the pause notice. It stays until the game continues and
|
|
## returns when a message shown in between ends.
|
|
func show_paused(paused: bool) -> void:
|
|
_paused = paused
|
|
_message.text = tr("PAUSED") if paused else ""
|
|
_message_left = 0.0
|
|
|
|
|
|
## Shows `text` in the top right corner until it is replaced.
|
|
func show_status(text: String) -> void:
|
|
_status.text = text
|
|
|
|
|
|
## The text currently shown in the status line. Tests read it.
|
|
func status_text() -> String:
|
|
return _status.text
|
|
|
|
|
|
## The text currently shown as a message. Tests read it.
|
|
func message() -> String:
|
|
return _message.text
|
|
|
|
|
|
## The text currently shown as the stone count. Tests read it.
|
|
func stone_text() -> String:
|
|
return _stone.text
|