85 lines
2.5 KiB
Go
85 lines
2.5 KiB
Go
package hud
|
|
|
|
import (
|
|
"image/color"
|
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
"github.com/hajimehoshi/ebiten/v2/vector"
|
|
|
|
"github.com/atridad/LilGuy/internal/status"
|
|
)
|
|
|
|
type Overlay struct {
|
|
X int
|
|
Y int
|
|
Color color.Color
|
|
ScreenName string
|
|
}
|
|
|
|
func (o Overlay) Draw(screen *ebiten.Image, meters []status.Meter) {
|
|
if o.Color == nil {
|
|
o.Color = color.White
|
|
}
|
|
|
|
// Draw background box for instructions
|
|
instrBoxWidth := float32(280)
|
|
instrBoxHeight := float32(78)
|
|
instrBoxPaddingX := float32(12)
|
|
instrBoxPaddingY := float32(15)
|
|
vector.FillRect(screen, 10, 10, instrBoxWidth, instrBoxHeight,
|
|
color.NRGBA{R: 0, G: 0, B: 0, A: 180}, false)
|
|
vector.StrokeRect(screen, 10, 10, instrBoxWidth, instrBoxHeight, 2,
|
|
color.NRGBA{R: 200, G: 200, B: 200, A: 255}, false)
|
|
|
|
screenName := o.ScreenName
|
|
if screenName == "" {
|
|
screenName = "Lil Guy"
|
|
}
|
|
|
|
instructions := Column{
|
|
Elements: []Element{
|
|
Label{Text: screenName, Color: color.NRGBA{R: 255, G: 255, B: 100, A: 255}},
|
|
Label{Text: "Move with Arrow Keys / WASD", Color: color.NRGBA{R: 230, G: 230, B: 230, A: 255}},
|
|
Label{Text: "Hold Shift to Sprint", Color: color.NRGBA{R: 230, G: 230, B: 230, A: 255}},
|
|
},
|
|
Spacing: 7,
|
|
}
|
|
instructions.Draw(screen, int(10+instrBoxPaddingX), int(10+instrBoxPaddingY))
|
|
|
|
// Draw background box for meters
|
|
meterBoxPaddingX := float32(12)
|
|
meterBoxPaddingTop := float32(15)
|
|
meterBoxPaddingBottom := float32(8)
|
|
meterBoxWidth := float32(220)
|
|
meterBoxHeight := float32(meterBoxPaddingTop + meterBoxPaddingBottom + float32(len(meters))*35 - 5)
|
|
meterBoxX := float32(o.X) - meterBoxPaddingX
|
|
meterBoxY := float32(o.Y) - meterBoxPaddingTop
|
|
vector.FillRect(screen, meterBoxX, meterBoxY, meterBoxWidth, meterBoxHeight,
|
|
color.NRGBA{R: 0, G: 0, B: 0, A: 180}, false)
|
|
vector.StrokeRect(screen, meterBoxX, meterBoxY, meterBoxWidth, meterBoxHeight, 2,
|
|
color.NRGBA{R: 200, G: 200, B: 200, A: 255}, false)
|
|
|
|
meterElements := make([]Element, 0, len(meters))
|
|
for _, meter := range meters {
|
|
if meter.Base < 0 {
|
|
meterElements = append(meterElements,
|
|
MeterLabel{Meter: meter, Color: color.NRGBA{R: 255, G: 255, B: 255, A: 255}},
|
|
)
|
|
} else {
|
|
meterElements = append(meterElements, Column{
|
|
Elements: []Element{
|
|
MeterLabel{Meter: meter, Color: color.NRGBA{R: 255, G: 255, B: 255, A: 255}},
|
|
Bar{Meter: meter, MaxWidth: 180, Height: 10, ShowBorder: true},
|
|
},
|
|
Spacing: 4,
|
|
})
|
|
}
|
|
}
|
|
|
|
meterPanel := Column{
|
|
Elements: meterElements,
|
|
Spacing: 18,
|
|
}
|
|
meterPanel.Draw(screen, o.X, o.Y)
|
|
}
|