Files
LilGuy/internal/ui/hud/hud.go
2025-11-24 12:18:32 -07:00

60 lines
1.2 KiB
Go

package hud
import (
"image/color"
"github.com/hajimehoshi/ebiten/v2"
"github.com/atridad/LilGuy/internal/status"
)
// HUD overlay anchor.
type Overlay struct {
X int
Y int
Color color.Color
}
// Paints the HUD overlay.
func (o Overlay) Draw(screen *ebiten.Image, meters []status.Meter) {
if o.Color == nil {
o.Color = color.White
}
// Instruction text
instructions := Column{
Elements: []Element{
Label{Text: "Lil Guy", Color: o.Color},
Label{Text: "Move with Arrow Keys / WASD", Color: o.Color},
Label{Text: "Hold Shift to Sprint", Color: o.Color}},
Spacing: 7,
}
instructions.Draw(screen, 16, 16)
// Meter column
meterElements := make([]Element, 0, len(meters))
for _, meter := range meters {
if meter.Base < 0 {
// Text-only display (no bar).
meterElements = append(meterElements,
MeterLabel{Meter: meter, Color: o.Color},
)
} else {
// Full meter with bar.
meterElements = append(meterElements, Column{
Elements: []Element{
MeterLabel{Meter: meter, Color: o.Color},
Bar{Meter: meter, MaxWidth: 180, Height: 8, ShowBorder: false},
},
Spacing: 2,
})
}
}
meterPanel := Column{
Elements: meterElements,
Spacing: 16,
}
meterPanel.Draw(screen, o.X, o.Y)
}