doctorlectro/system/rendermessage.go

64 lines
1.4 KiB
Go

package system
import (
"image/color"
_ "image/png"
"strings"
"code.rocketnine.space/tslocum/doctorlectro/component"
"code.rocketnine.space/tslocum/doctorlectro/world"
"code.rocketnine.space/tslocum/gohan"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
)
type RenderMessageSystem struct {
Player *component.Player
op *ebiten.DrawImageOptions
debugImg *ebiten.Image
}
func NewRenderMessageSystem() *RenderMessageSystem {
s := &RenderMessageSystem{
op: &ebiten.DrawImageOptions{},
debugImg: ebiten.NewImage(94, 114),
}
return s
}
func (s *RenderMessageSystem) Update(_ gohan.Entity) error {
return gohan.ErrUnregister
}
func (s *RenderMessageSystem) Draw(e gohan.Entity, screen *ebiten.Image) error {
if world.MessageText == "" {
return nil
}
message := world.MessageText
split := strings.Split(message, "\n")
lines := len(split)
var maxLength int
for _, line := range split {
l := len(line)
if l > maxLength {
maxLength = l
}
}
w, h := maxLength*6, (lines)*16
w, h = w+10, h+6
s.debugImg = ebiten.NewImage(w, h)
s.debugImg.Fill(color.RGBA{80, 80, 80, 255})
ebitenutil.DebugPrintAt(s.debugImg, message, 4, 2)
x, y := world.ScreenWidth/2-float64(w)/2, world.ScreenHeight/2-float64(h)/2
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(x, y)
screen.DrawImage(s.debugImg, op)
return nil
}