Minor tweaks to flygoblin.
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"image/color"
|
||||
"math"
|
||||
"math/rand/v2"
|
||||
"mover/assets"
|
||||
"mover/elements"
|
||||
"mover/fonts"
|
||||
@@ -24,16 +23,17 @@ type Canvas struct {
|
||||
|
||||
eventmap map[gamedata.GameEvent]func()
|
||||
|
||||
initialized bool
|
||||
lastInputs gamedata.GameInputs
|
||||
runtime float64
|
||||
counter int
|
||||
score int
|
||||
hero *elements.Hero
|
||||
charge *elements.Explosion
|
||||
enemies []elements.Enemies
|
||||
projectiles []*elements.Projectile
|
||||
gameover bool
|
||||
initialized bool
|
||||
goblinspawned bool
|
||||
lastInputs gamedata.GameInputs
|
||||
runtime float64
|
||||
counter int
|
||||
score int
|
||||
hero *elements.Hero
|
||||
charge *elements.Explosion
|
||||
enemies []elements.Enemies
|
||||
projectiles []*elements.Projectile
|
||||
gameover bool
|
||||
}
|
||||
|
||||
func NewCanvas(a gamedata.Area) *Canvas {
|
||||
@@ -41,12 +41,13 @@ func NewCanvas(a gamedata.Area) *Canvas {
|
||||
Sprite: ebiten.NewImage(a.Width, a.Height),
|
||||
projectileMask: ebiten.NewImage(a.Width, a.Height),
|
||||
collisionMask: ebiten.NewImage(a.Width, a.Height),
|
||||
heroCollisionMask: ebiten.NewImage(46, 46),
|
||||
heroCollisionCpy: ebiten.NewImage(46, 46),
|
||||
heroCollisionMask: ebiten.NewImage(48, 48),
|
||||
heroCollisionCpy: ebiten.NewImage(48, 48),
|
||||
hero: elements.NewHero(),
|
||||
charge: elements.NewExplosion(),
|
||||
initialized: false,
|
||||
gameover: false,
|
||||
goblinspawned: false,
|
||||
score: 0,
|
||||
runtime: 0.,
|
||||
}
|
||||
@@ -97,8 +98,16 @@ func (c *Canvas) Draw(drawimg *ebiten.Image) {
|
||||
for _, e := range c.enemies {
|
||||
e.Draw()
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM.Translate(e.GetPosition().X-46/2, e.GetPosition().Y-46/2)
|
||||
op.GeoM.Translate(e.GetPosition().X-float64(e.GetSprite().Bounds().Dx())/2, e.GetPosition().Y-float64(e.GetSprite().Bounds().Dy())/2)
|
||||
c.Sprite.DrawImage(e.GetSprite(), op)
|
||||
|
||||
//do we need a health bar for this enemy?
|
||||
if e.Health() > 0 {
|
||||
x0 := e.GetPosition().X - float64(e.GetSprite().Bounds().Dx())
|
||||
y0 := e.GetPosition().Y - 2/3.*float64(e.GetSprite().Bounds().Dy())
|
||||
vector.DrawFilledRect(c.Sprite, float32(x0), float32(y0), 204, 12, color.Black, true)
|
||||
vector.DrawFilledRect(c.Sprite, float32(x0+2), float32(y0+2), float32(e.Health())*2, 8, color.RGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xff}, true)
|
||||
}
|
||||
}
|
||||
|
||||
for _, p := range c.projectiles {
|
||||
@@ -140,6 +149,7 @@ func (c *Canvas) Initialize() {
|
||||
c.score = 0
|
||||
c.counter = 0
|
||||
c.runtime = 0.
|
||||
c.goblinspawned = false
|
||||
|
||||
//temporary
|
||||
c.hero.Action = elements.HeroActionDefault
|
||||
@@ -168,8 +178,8 @@ func (c *Canvas) UpdateHeroPosition() {
|
||||
func (c *Canvas) ComputeHeroCollisions() {
|
||||
for _, e := range c.enemies {
|
||||
//compute collision with hero
|
||||
if c.hero.Pos.X >= e.GetPosition().X-46/2 && c.hero.Pos.X <= e.GetPosition().X+46/2 &&
|
||||
c.hero.Pos.Y >= e.GetPosition().Y-46/2 && c.hero.Pos.Y <= e.GetPosition().Y+46/2 &&
|
||||
if c.hero.Pos.X >= e.GetPosition().X-float64(e.GetSprite().Bounds().Dx())/2 && c.hero.Pos.X <= e.GetPosition().X+float64(e.GetSprite().Bounds().Dx())/2 &&
|
||||
c.hero.Pos.Y >= e.GetPosition().Y-float64(e.GetSprite().Bounds().Dy())/2 && c.hero.Pos.Y <= e.GetPosition().Y+float64(e.GetSprite().Bounds().Dy())/2 &&
|
||||
e.GetEnemyState() < gamedata.EnemyStateDying {
|
||||
|
||||
// target.Action < elements.MoverActionDying && g.hero.Action < elements.HeroActionDying {
|
||||
@@ -183,7 +193,7 @@ func (c *Canvas) ComputeHeroCollisions() {
|
||||
op.GeoM.Translate((c.hero.Pos.X-e.GetPosition().X)-float64(e.GetSprite().Bounds().Dx())/2, (c.hero.Pos.Y-e.GetPosition().Y)-float64(e.GetSprite().Bounds().Dy())/2)
|
||||
c.heroCollisionMask.DrawImage(e.GetSprite(), op)
|
||||
|
||||
if c.HasCollided(c.heroCollisionMask, 46*46*4) {
|
||||
if c.HasCollided(c.heroCollisionMask, 48*48*4) {
|
||||
c.hero.SetHit()
|
||||
c.gameover = true
|
||||
|
||||
@@ -341,30 +351,37 @@ func (c *Canvas) UpdateEnemies() {
|
||||
e.Update()
|
||||
}
|
||||
if !c.gameover {
|
||||
//spawn new enemies
|
||||
f := 40000 / (c.counter + 1)
|
||||
/*
|
||||
//spawn new enemies
|
||||
f := 40000 / (c.counter + 1)
|
||||
|
||||
if c.counter%f == 0 {
|
||||
newenemy := elements.NewFlyEye()
|
||||
if c.counter%f == 0 {
|
||||
newenemy := elements.NewFlyEye()
|
||||
|
||||
x0 := rand.Float64() * 640
|
||||
y0 := rand.Float64() * 480
|
||||
quadrant := rand.IntN(3)
|
||||
x0 := rand.Float64() * 640
|
||||
y0 := rand.Float64() * 480
|
||||
quadrant := rand.IntN(3)
|
||||
|
||||
switch quadrant {
|
||||
case 0:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: x0, Y: -48})
|
||||
case 1:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: x0, Y: 480 + 48})
|
||||
case 2:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: -48, Y: y0})
|
||||
case 3:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: 640 + x0, Y: y0})
|
||||
}
|
||||
switch quadrant {
|
||||
case 0:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: x0, Y: -48})
|
||||
case 1:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: x0, Y: 480 + 48})
|
||||
case 2:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: -48, Y: y0})
|
||||
case 3:
|
||||
newenemy.SetPosition(gamedata.Coordinates{X: 640 + x0, Y: y0})
|
||||
}
|
||||
|
||||
newenemy.SetTarget(c.hero.Pos)
|
||||
newenemy.SetTarget(c.hero.Pos)
|
||||
|
||||
c.enemies = append(c.enemies, newenemy)
|
||||
c.enemies = append(c.enemies, newenemy)
|
||||
}*/
|
||||
|
||||
if !c.goblinspawned {
|
||||
newfg := elements.NewFlyGoblin()
|
||||
c.enemies = append(c.enemies, newfg)
|
||||
c.goblinspawned = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user