class_name LuneHpBar extends Control ## Thin value bar drawn directly: dark track, fill, a top highlight and optional ticks. var fraction: float = 1.0: set(value): value = clampf(value, 0.0, 1.0) if absf(value - fraction) > .0005: fraction = value queue_redraw() var fill: Color = LuneUiTheme.GOOD: set(value): if value != fill: fill = value queue_redraw() var ticks: int = 0 var track: Color = Color(0, 0, 0, .55) func _init() -> void: mouse_filter = Control.MOUSE_FILTER_IGNORE custom_minimum_size = Vector2(60, 6) func _draw() -> void: var rect := Rect2(Vector2.ZERO, size) draw_rect(rect, track) if fraction > 0.0: var filled := Rect2(Vector2.ZERO, Vector2(maxf(1.0, size.x * fraction), size.y)) draw_rect(filled, fill) draw_line(Vector2(0, .5), Vector2(filled.size.x, .5), Color(1, 1, 1, .28), 1.0) for index: int in range(1, ticks): var x: float = roundf(size.x * float(index) / float(ticks)) draw_line(Vector2(x, 0), Vector2(x, size.y), Color(0, 0, 0, .45), 1.0) draw_rect(rect, Color(1, 1, 1, .12), false, 1.0) ## Green above 60 %, amber above 30 %, red below; the team colour when given. static func health_color(value: float, base: Color = LuneUiTheme.GOOD) -> Color: if value > .6: return base if value > .3: return LuneUiTheme.WARN return LuneUiTheme.DANGER