55 lines
885 B
Go
55 lines
885 B
Go
|
|
package elements
|
||
|
|
|
||
|
|
import (
|
||
|
|
"ducky/gamedata"
|
||
|
|
"image"
|
||
|
|
|
||
|
|
"github.com/hajimehoshi/ebiten/v2"
|
||
|
|
"golang.org/x/exp/rand"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
DuckyWidth = 36
|
||
|
|
DuckyHeight = DuckyWidth
|
||
|
|
)
|
||
|
|
|
||
|
|
type Ducky struct {
|
||
|
|
Sprite *ebiten.Image
|
||
|
|
asset *ebiten.Image
|
||
|
|
cycle int
|
||
|
|
position gamedata.Coordinates
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewDucky(asset *ebiten.Image) *Ducky {
|
||
|
|
d := &Ducky{
|
||
|
|
Sprite: ebiten.NewImage(DuckyWidth, DuckyHeight),
|
||
|
|
asset: asset,
|
||
|
|
cycle: rand.Intn(11),
|
||
|
|
}
|
||
|
|
return d
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Ducky) Update() {
|
||
|
|
d.cycle++
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Ducky) Draw() {
|
||
|
|
d.Sprite.Clear()
|
||
|
|
|
||
|
|
idx := d.cycle / 4 % 10
|
||
|
|
x0 := idx * DuckyWidth
|
||
|
|
y0 := 0
|
||
|
|
x1 := x0 + DuckyWidth
|
||
|
|
y1 := DuckyHeight
|
||
|
|
|
||
|
|
d.Sprite.DrawImage(d.asset.SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), nil)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Ducky) SetPosition(pos gamedata.Coordinates) {
|
||
|
|
d.position = pos
|
||
|
|
}
|
||
|
|
|
||
|
|
func (d *Ducky) GetPosition() gamedata.Coordinates {
|
||
|
|
return d.position
|
||
|
|
}
|