/
render.go
29 lines (23 loc) · 1.11 KB
/
render.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package uisystem
import (
c "github.com/x-hgg-x/goecsengine/components"
"github.com/x-hgg-x/goecsengine/utils"
w "github.com/x-hgg-x/goecsengine/world"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/text"
ecs "github.com/x-hgg-x/goecs/v2"
)
// RenderUISystem draws text entities
func RenderUISystem(world w.World, screen *ebiten.Image) {
world.Manager.Join(world.Components.Engine.Text, world.Components.Engine.UITransform).Visit(ecs.Visit(func(entity ecs.Entity) {
textData := world.Components.Engine.Text.Get(entity).(*c.Text)
uiTransform := world.Components.Engine.UITransform.Get(entity).(*c.UITransform)
// Compute dot offset
x, y := utils.Try2(c.ComputeDotOffset(textData.Text, textData.FontFace, uiTransform.Pivot))
// Draw text
screenWidth := world.Resources.ScreenDimensions.Width
screenHeight := world.Resources.ScreenDimensions.Height
offsetX, offsetY := uiTransform.ComputeOriginOffset(screenWidth, screenHeight)
text.Draw(screen, textData.Text, textData.FontFace, uiTransform.Translation.X+offsetX-x, screenHeight-uiTransform.Translation.Y-offsetY-y, textData.Color)
}))
}