@tool extends Control @export var minimum := 0.0 @export var maximum := 36.0 @export var warning_low := 0.0 @export var warning_high := 24.0 @export var fault_low := 0.0 @export var fault_high := 30.0 @export var nominal := NAN var value := 0.0 var available := false func _ready() -> void: resized.connect(queue_redraw) theme_changed.connect(queue_redraw) func _x(number: float) -> float: return 4 + clampf((number - minimum) / maxf(maximum - minimum, 0.001), 0, 1) * (size.x - 8) func _zone(low: float, high: float, role: String) -> void: if high <= low: return var color := get_theme_color(role, "SurfaceSide") color.a = 0.65 draw_rect(Rect2(_x(low), 4, _x(high) - _x(low), 6), color) func _draw() -> void: draw_rect(Rect2(4, 4, maxf(size.x - 8, 0), 6), get_theme_color("instrument_grid", "SurfaceSide")) _zone(minimum, fault_low, "fault") _zone(fault_low, warning_low, "warning") _zone(warning_high, fault_high, "warning") _zone(fault_high, maximum, "fault") if is_finite(nominal): draw_line(Vector2(_x(nominal), 0), Vector2(_x(nominal), 16), get_theme_color("instrument_accent", "SurfaceSide"), 2) if available: var x := _x(value) var ink := get_theme_color("font_color", "Label") draw_line(Vector2(x, 0), Vector2(x, 14), ink, 3) draw_colored_polygon(PackedVector2Array([Vector2(x - 5, 0), Vector2(x + 5, 0), Vector2(x, 4)]), ink)