Nicht abgenommen: Nach dem ersten Spieltest wurde entschieden, Champions of Luneraria nach Unity 6 zu portieren. Dieser Stand ist die Referenz für das HUD im Unity-Projekt (../luneraria-unity). - HUD neu aus Komponenten mit eigenem Theme, Porträts aus den echten Modellen (einmal gerendert, zwischengespeichert), Lane-Übersicht mit deterministischer Bedrohung aus öffentlichem Zustand, Bossgrotte, nächste Welle, Ereignisse, Minimap mit zusammengefassten Armeen, Held/Items/Talente, Einheitendetails, Angriffschampions, Bereit-Sperre, UI-Größe, Team-Formen statt nur Farben - Privatsphäre über LuneHudModel: fremdes Gold und fremde Entwürfe erscheinen nie - Keine Regeländerung: Regeln 91/91, M2 73/73, Netz 43/43; verify_g3 715/715; verify_m1 38/38 und verify_m2 14/14 mit angepassten UI-Treibern - Spieltest bis Welle 8 über die echte Oberfläche, Befunde in G3-HUD.md - HELDEN-KONZEPT.md: vom Projektinhaber vorgegebene Helden (nicht umgesetzt) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.3 KiB
GDScript
41 lines
1.3 KiB
GDScript
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
|