@tool extends Label class_name WaterDisplay @export var character_path: NodePath @export var show_bladder: bool = true @export var show_water: bool = true var _character: GridCharacterController = null func _ready() -> void: set_process(true) _resolve_character() if _character: _character.vitals_changed.connect(_on_vitals_changed) _on_vitals_changed(_character.get_water_level(), _character.get_bladder_level(), _character.is_water_low(), _character.is_bladder_full()) func _process(_delta: float) -> void: if Engine.is_editor_hint(): _update_text(0.0, 0.0, false, false) func _resolve_character() -> void: if character_path != NodePath(): _character = get_node_or_null(character_path) as GridCharacterController else: _character = get_parent() as GridCharacterController func _on_vitals_changed(water_level: float, bladder_level: float, needs_water: bool, needs_bathroom: bool) -> void: _update_text(water_level, bladder_level, needs_water, needs_bathroom) func _update_text(water_level: float, bladder_level: float, needs_water: bool, needs_bathroom: bool) -> void: var parts: Array[String] = [] if show_water: parts.append("Water: %4d ml%s" % [int(water_level), " !" if needs_water else ""]) if show_bladder: parts.append("Bladder: %4d ml%s" % [int(bladder_level), " !" if needs_bathroom else ""]) text = " | ".join(parts)