From 253c708d45701cff66fb2097a34988aa2d2577a9 Mon Sep 17 00:00:00 2001 From: iegod Date: Fri, 22 Nov 2024 17:57:16 -0500 Subject: [PATCH] Added weapon drops and collection. New laser item asset. --- assets/imagebank.go | 4 ++ assets/item-laser.png | Bin 0 -> 232 bytes elements/weapondrop.go | 66 +++++++++++++++++++++++++++++++++ gameelement/canvas.go | 78 ++++++++++++++++++++++++++++++++++++++- screenmanager/manager.go | 2 +- weapons/holster.go | 5 ++- 6 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 assets/item-laser.png create mode 100644 elements/weapondrop.go diff --git a/assets/imagebank.go b/assets/imagebank.go index a13b5b9..fd675a5 100644 --- a/assets/imagebank.go +++ b/assets/imagebank.go @@ -29,6 +29,7 @@ const ( Fireball ImgAssetName = "Fireball" Splash ImgAssetName = "Splash" LaserBeam ImgAssetName = "LaserBeam" + ItemLaser ImgAssetName = "ItemLaser" ) var ( @@ -66,6 +67,8 @@ var ( splash_img []byte //go:embed laserbeam.png laserbeam_img []byte + //go:embed item-laser.png + itemlaser_img []byte ) func LoadImages() { @@ -87,6 +90,7 @@ func LoadImages() { ImageBank[Fireball] = LoadImagesFatal(fireball_img) ImageBank[Splash] = LoadImagesFatal(splash_img) ImageBank[LaserBeam] = LoadImagesFatal(laserbeam_img) + ImageBank[ItemLaser] = LoadImagesFatal(itemlaser_img) } diff --git a/assets/item-laser.png b/assets/item-laser.png new file mode 100644 index 0000000000000000000000000000000000000000..43c5a1d4d5e8652e6024c2d5503039ec6ae95796 GIT binary patch literal 232 zcmVP)h8!N1saXU#W<@6cS{Jb^M?kV}`Jpl9Iz~KB4+k!W_CD9q!%janV!_(6@0uV;; i1G_mmn@i=5|KSNnUSz^6BBgc!0000 0.98 { + drop := elements.NewWeaponDrop(gamedata.WeaponTypeLaser) + drop.SetPosition(e.GetPosition()) + c.wpdrops = append(c.wpdrops, drop) + } + } + //moving valid targets to the front of the slice if e.GetEnemyState() < elements.MoverActionDead && !(e.GetPosition().X < -640*2 || e.GetPosition().X > 640*2 || @@ -847,7 +869,7 @@ func (c *Canvas) LaserAttempt4() { } //fmt.Printf("%f \n", a) - if d <= 50 && e.GetEnemyState() <= gamedata.EnemyStateHit { + if d <= float64(e.GetSprite().Bounds().Dx()) && e.GetEnemyState() <= gamedata.EnemyStateHit { if IsPixelColliding(c.laserMask, e.GetSprite(), image.Pt(0, 0), @@ -890,6 +912,22 @@ func (c *Canvas) CleanSplashes() { c.splashes = c.splashes[:i] } +func (c *Canvas) CleanupDrops() { + i := 0 + for _, drop := range c.wpdrops { + if !drop.IsCollected() { + c.wpdrops[i] = drop + i++ + } + } + + for j := i; j < len(c.wpdrops); j++ { + c.wpdrops[j] = nil + } + + c.wpdrops = c.wpdrops[:i] +} + func (c *Canvas) UpdateWeapons() { if !c.gameover { //check for weapon inputs @@ -909,3 +947,41 @@ func (c *Canvas) UpdateWeapons() { } } + +func (c *Canvas) UpdateWeaponDrops() { + //do we have any drops? let's calculate the chances + // + + for _, drop := range c.wpdrops { + drop.Update() + + //has the hero collided with any? add to holster + //boundary box collision check + if c.hero.Pos.X >= drop.GetPosition().X-float64(drop.Sprite.Bounds().Dx())/2 && + c.hero.Pos.X <= drop.GetPosition().X+float64(drop.Sprite.Bounds().Dx())/2 && + c.hero.Pos.Y >= drop.GetPosition().Y-float64(drop.Sprite.Bounds().Dy())/2 && + c.hero.Pos.Y <= drop.GetPosition().Y+float64(drop.Sprite.Bounds().Dy())/2 { + //fmt.Println("hero trying to pick up weapon maybe") + + if IsPixelColliding( + c.hero.Sprite, + drop.Sprite, + image.Pt(int(c.hero.Pos.X), int(c.hero.Pos.Y)), + image.Pt(int(drop.GetPosition().X), int(drop.GetPosition().Y)), + ) { + fmt.Println("weapon acquired") + drop.SetCollected(true) + c.holster.AddWeapon(weapons.NewLaser()) + } + + } + } + +} + +func (c *Canvas) ResetWeaponDrops() { + for i := range c.wpdrops { + c.wpdrops[i] = nil + } + c.wpdrops = c.wpdrops[:0] +} diff --git a/screenmanager/manager.go b/screenmanager/manager.go index 2cc87ee..48f018c 100644 --- a/screenmanager/manager.go +++ b/screenmanager/manager.go @@ -26,7 +26,7 @@ func NewManager() Manager { return Manager{ Info: gamedata.GameInfo{ Name: "survive", - Version: "0.30", + Version: "0.32", Dimensions: gamedata.Area{ Width: defaultWidth, Height: defaultHeight, diff --git a/weapons/holster.go b/weapons/holster.go index 120965b..a722481 100644 --- a/weapons/holster.go +++ b/weapons/holster.go @@ -13,7 +13,7 @@ func NewHolster() *Holster { activewp: gamedata.WeaponTypeGun, } holster.AddWeapon(NewGun()) - holster.AddWeapon(NewLaser()) + //holster.AddWeapon(NewLaser()) return holster } @@ -46,8 +46,9 @@ func (h *Holster) CycleWeapon() { } //keep searching until we find the next weapon that exists + var nextwp gamedata.WeaponType = h.activewp for ok := false; !ok; { - nextwp := (h.activewp + 1) % gamedata.WeaponTypeMax + nextwp = (nextwp + 1) % gamedata.WeaponTypeMax _, ok = h.guns[nextwp] if ok { h.activewp = nextwp