You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.4 KiB
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
|
|
}
|