package elements import ( "image" "math" "mover/assets" "mover/gamedata" "github.com/hajimehoshi/ebiten/v2" ) type FireBall struct { Sprite *ebiten.Image position gamedata.Coordinates angle float64 velocity float64 cycle int } func NewFireBall(angle, velocity float64) *FireBall { fb := &FireBall{ Sprite: ebiten.NewImage(50, 50), cycle: 0, angle: angle, velocity: velocity, } return fb } func (fb *FireBall) Update() error { fb.position.X += fb.velocity * math.Cos(fb.angle) fb.position.Y += fb.velocity * math.Sin(fb.angle) fb.cycle++ return nil } func (fb *FireBall) Draw() { fb.Sprite.Clear() //fb.Sprite.Fill(color.RGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xff}) idx := fb.cycle / 8 % 5 x0 := idx * 50 x1 := x0 + 50 y0 := 0 y1 := 50 fb.Sprite.DrawImage(assets.ImageBank[assets.Fireball].SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), nil) } func (fb *FireBall) GetPosition() gamedata.Coordinates { return fb.position } func (fb *FireBall) SetPosition(pos gamedata.Coordinates) { fb.position = pos } func (fb *FireBall) SetTarget(gamedata.Coordinates) { } func (fb *FireBall) GetAngle() float64 { return fb.angle } func (fb *FireBall) GetVelocity() float64 { return fb.velocity } func (fb *FireBall) GetSprite() *ebiten.Image { return fb.Sprite } func (fb *FireBall) ClearTouched() { } func (fb *FireBall) ExplosionInitiated() bool { return false } func (fb *FireBall) GetEnemyState() gamedata.EnemyState { return gamedata.EnemyStateDefault } func (fb *FireBall) SetHit() { } func (fb *FireBall) SetToggle() { } func (fb *FireBall) IsToggled() bool { return false } func (fb *FireBall) SetTouched() { } func (fb *FireBall) IsTouched() bool { return false } func (fb *FireBall) SetExplosionInitiated() { } func (fb *FireBall) Health() int { return 0 } func (fb *FireBall) MaxHealth() int { return 1 }