Added other bullet classes. Add plasma pickup audio.
This commit is contained in:
17
AlientAttack.MonoGame/Things/Bullets/BulletKind.cs
Normal file
17
AlientAttack.MonoGame/Things/Bullets/BulletKind.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
public enum BulletKind
|
||||
{
|
||||
LaserSmall,
|
||||
LaserMedium,
|
||||
LaserLarge,
|
||||
MinigunSmall,
|
||||
MinigunMedium,
|
||||
MinigunLarge,
|
||||
PlasmaSmall,
|
||||
PlasmaMedium,
|
||||
PlasmaLarge,
|
||||
ProtonSmall,
|
||||
ProtonMedium,
|
||||
ProtonLarge
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletLarge.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletLarge.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class LaserBulletLarge : Bullet
|
||||
{
|
||||
public const int Width = 8;
|
||||
public const int Height = 28;
|
||||
|
||||
public LaserBulletLarge(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 3;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Laser_Large");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletMedium.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletMedium.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class LaserBulletMedium : Bullet
|
||||
{
|
||||
public const int Width = 7;
|
||||
public const int Height = 21;
|
||||
|
||||
public LaserBulletMedium(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 2;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Laser_Medium");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletSmall.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/LaserBulletSmall.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class LaserBulletSmall : Bullet
|
||||
{
|
||||
public const int Width = 6;
|
||||
public const int Height = 18;
|
||||
|
||||
public LaserBulletSmall(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 1;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Laser_Small");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletLarge.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletLarge.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class PlasmaBulletLarge : Bullet
|
||||
{
|
||||
public const int Width = 9;
|
||||
public const int Height = 31;
|
||||
|
||||
public PlasmaBulletLarge(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 3;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Plasma_Large");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletMedium.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletMedium.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class PlasmaBulletMedium : Bullet
|
||||
{
|
||||
public const int Width = 8;
|
||||
public const int Height = 26;
|
||||
|
||||
public PlasmaBulletMedium(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 2;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Plasma_Medium");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletSmall.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/PlasmaBulletSmall.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class PlasmaBulletSmall : Bullet
|
||||
{
|
||||
public const int Width = 7;
|
||||
public const int Height = 24;
|
||||
|
||||
public PlasmaBulletSmall(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 1;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Plasma_Small");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletLarge.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletLarge.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class ProtonBulletLarge : Bullet
|
||||
{
|
||||
public const int Width = 13;
|
||||
public const int Height = 13;
|
||||
|
||||
public ProtonBulletLarge(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 3;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Proton_Large");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletMedium.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletMedium.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class ProtonBulletMedium : Bullet
|
||||
{
|
||||
public const int Width = 10;
|
||||
public const int Height = 10;
|
||||
|
||||
public ProtonBulletMedium(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 2;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Proton_Medium");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletSmall.cs
Normal file
27
AlientAttack.MonoGame/Things/Bullets/ProtonBulletSmall.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
|
||||
namespace AlienAttack.MonoGame.Things.Bullets;
|
||||
|
||||
internal class ProtonBulletSmall : Bullet
|
||||
{
|
||||
public const int Width = 6;
|
||||
public const int Height = 6;
|
||||
|
||||
public ProtonBulletSmall(float x, float y, float xVel, float yVel, Sprite owner) : base(x, y, xVel, yVel, owner)
|
||||
{
|
||||
BoundBox = new(0, 0, Width, Height);
|
||||
Damage = 1;
|
||||
}
|
||||
|
||||
public override void Draw(SpriteDrawArgs args)
|
||||
{
|
||||
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Proton_Small");
|
||||
|
||||
float rotation = MathF.Atan2(YVelocity, XVelocity) + MathF.PI / 2f;
|
||||
Vector2 origin = new(texture.Width / 2f, texture.Height / 2f);
|
||||
|
||||
args.SpriteBatch.Draw(texture, Position, null, DrawColor, rotation, origin, 1f, SpriteEffects.None, 1);
|
||||
}
|
||||
}
|
||||
@@ -22,53 +22,6 @@ internal class Minigun : Weapon
|
||||
context.SpawnSprite(bullet1);
|
||||
context.SpawnSprite(bullet2);
|
||||
|
||||
//int number = context.Random.Next(1, 7);
|
||||
|
||||
//SoundEffect soundEffect = context.Content.Load<SoundEffect>(@$"Sfx\GUNAuto_Assault Rifle A Fire_0{number}_SFRMS_SCIWPNS");
|
||||
//soundEffect.Play(0.25f, (float)(context.Random.NextDouble() * 0.1 - 0.05), 0);
|
||||
|
||||
context.AudioManager.PlayPlayerFire();
|
||||
}
|
||||
}
|
||||
|
||||
internal class MinigunSpread : Weapon
|
||||
{
|
||||
public override int FireThreshold => 20;
|
||||
|
||||
public override void Fire(Sprite owner, SpriteUpdateContext context)
|
||||
{
|
||||
// Calculate bullet spawn positions relative to the player's bounding box
|
||||
int x1 = (int)owner.XPosition + 14;
|
||||
int x2 = (int)owner.XPosition + owner.BoundBox.Width - 16;
|
||||
int x3 = (int)owner.XPosition + owner.BoundBox.Width / 2 - 1;
|
||||
int y = (int)owner.YPosition + 10;
|
||||
|
||||
MinigunBulletLarge bullet1 = new(x1, y, -1, -6, owner);
|
||||
MinigunBulletLarge bullet2 = new(x2, y, 1, -6, owner);
|
||||
MinigunBulletLarge bullet3 = new(x3, y-16, 0, -6, owner);
|
||||
|
||||
//context.SpawnSprite(bullet1);
|
||||
//context.SpawnSprite(bullet2);
|
||||
//context.SpawnSprite(bullet3);
|
||||
|
||||
FireBulletFromMuzzleContext fireBulletContext = new()
|
||||
{
|
||||
Owner = owner,
|
||||
SpriteUpdateContext = context,
|
||||
BulletWidth = MinigunBulletLarge.Width,
|
||||
BulletHeight = MinigunBulletLarge.Height,
|
||||
Factory = (x, y, vx, vy2, o) => new MinigunBulletLarge(x, y, vx, vy2, o),
|
||||
ExtraOffset = new(4f, 0),
|
||||
Shots =
|
||||
[
|
||||
new() { Muzzle = MuzzleId.Left, XVelocity = -1, YVelocity = -6 },
|
||||
new() { Muzzle = MuzzleId.Right, XVelocity = 1, YVelocity = -6 },
|
||||
new() { Muzzle = MuzzleId.Center, XVelocity = 0, YVelocity = -6 }
|
||||
]
|
||||
};
|
||||
|
||||
FireFromMuzzle(fireBulletContext);
|
||||
|
||||
context.AudioManager.PlayPlayerFire();
|
||||
}
|
||||
}
|
||||
@@ -204,9 +157,9 @@ internal abstract class MinigunTripleSpread : Weapon
|
||||
{
|
||||
Owner = owner,
|
||||
SpriteUpdateContext = context,
|
||||
BulletWidth = MinigunBulletLarge.Width,
|
||||
BulletHeight = MinigunBulletLarge.Height,
|
||||
Factory = (x, y, vx, vy2, o) => new MinigunBulletLarge(x, y, vx, vy2, o),
|
||||
BulletWidth = LaserBulletLarge.Width,
|
||||
BulletHeight = LaserBulletLarge.Height,
|
||||
Factory = (x, y, vx, vy2, o) => new LaserBulletLarge(x, y, vx, vy2, o),
|
||||
ExtraOffset = new(4f, 0),
|
||||
Shots =
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user