Refactor to use better interfaces and event callbacks.
This commit is contained in:
83
gameelement/background.go
Normal file
83
gameelement/background.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package gameelement
|
||||
|
||||
import (
|
||||
"image"
|
||||
"math/rand/v2"
|
||||
"mover/assets"
|
||||
"mover/gamedata"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
type Background struct {
|
||||
Sprite *ebiten.Image
|
||||
initialized bool
|
||||
}
|
||||
|
||||
func NewBackground(a gamedata.Area) *Background {
|
||||
b := &Background{
|
||||
Sprite: ebiten.NewImage(a.Width, a.Height),
|
||||
initialized: false,
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *Background) SetInputs(gamedata.GameInputs) {
|
||||
|
||||
}
|
||||
|
||||
func (b *Background) Update() error {
|
||||
|
||||
if !b.initialized {
|
||||
b.Initialize()
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Background) Draw(drawimg *ebiten.Image) {
|
||||
//all the stuff before
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
drawimg.DrawImage(b.Sprite, op)
|
||||
}
|
||||
|
||||
func (b *Background) Initialize() {
|
||||
b.ConstructBackground()
|
||||
b.initialized = true
|
||||
}
|
||||
|
||||
func (b *Background) ConstructBackground() {
|
||||
BLOCK_SIZE := 32
|
||||
|
||||
for i := 0; i < b.Sprite.Bounds().Dx()/BLOCK_SIZE; i++ {
|
||||
for j := 0; j < b.Sprite.Bounds().Dy()/BLOCK_SIZE; j++ {
|
||||
|
||||
//select random tile in x and y from tileset
|
||||
idx_y := rand.IntN(256 / BLOCK_SIZE)
|
||||
idx_x := rand.IntN(256 / BLOCK_SIZE)
|
||||
|
||||
x0 := BLOCK_SIZE * idx_x
|
||||
y0 := BLOCK_SIZE * idx_y
|
||||
x1 := x0 + BLOCK_SIZE
|
||||
y1 := y0 + BLOCK_SIZE
|
||||
|
||||
//translate for grid element we're painting
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(float64(i*BLOCK_SIZE), float64(j*BLOCK_SIZE))
|
||||
b.Sprite.DrawImage(assets.ImageBank[assets.TileSet].SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), op)
|
||||
}
|
||||
}
|
||||
|
||||
ax := float64(rand.IntN(b.Sprite.Bounds().Dx()/BLOCK_SIZE) * BLOCK_SIZE)
|
||||
ay := float64(rand.IntN(b.Sprite.Bounds().Dy()/BLOCK_SIZE) * BLOCK_SIZE)
|
||||
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(ax, ay)
|
||||
b.Sprite.DrawImage(assets.ImageBank[assets.Altar], op)
|
||||
}
|
||||
|
||||
func (b *Background) RegisterEvents(e gamedata.GameEvent, f func()) {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user