/
render.go
38 lines (32 loc) · 883 Bytes
/
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
30
31
32
33
34
35
36
37
38
package system
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/yohamta/donburi"
"github.com/yohamta/donburi/examples/bunnymark/component"
"github.com/yohamta/donburi/filter"
)
type Render struct {
query *donburi.Query
}
func NewRender() *Render {
return &Render{
query: donburi.NewQuery(filter.Contains(
component.Position,
component.Hue,
component.Sprite,
))}
}
func (r *Render) Draw(w donburi.World, screen *ebiten.Image) {
r.query.Each(w, func(entry *donburi.Entry) {
position := component.Position.Get(entry)
hue := component.Hue.Get(entry)
sprite := component.Sprite.Get(entry)
op := &ebiten.DrawImageOptions{}
sw, sh := float64(screen.Bounds().Dx()), float64(screen.Bounds().Dy())
op.GeoM.Translate(position.X*sw, position.Y*sh)
if *hue.Colorful {
op.ColorM.RotateHue(hue.Value)
}
screen.DrawImage(sprite.Image, op)
})
}