summaryrefslogtreecommitdiff
path: root/Penguloon/Projectiles/ProjectileBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Penguloon/Projectiles/ProjectileBase.cs')
-rw-r--r--Penguloon/Projectiles/ProjectileBase.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/Penguloon/Projectiles/ProjectileBase.cs b/Penguloon/Projectiles/ProjectileBase.cs
new file mode 100644
index 0000000..4221569
--- /dev/null
+++ b/Penguloon/Projectiles/ProjectileBase.cs
@@ -0,0 +1,80 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Penguloon.Objects;
+using System;
+
+namespace Penguloon.Projectiles
+{
+ public abstract class ProjectileBase
+ {
+ public Vector2 Position { get; set; }
+ public Vector2 Size { get; set; }
+
+ public float RotationAngle { get; set; }
+
+ public float RotationSpeed { get; set; }
+
+ public float Rotation { get; set; }
+
+ public float Speed { get; set; }
+
+ public int MaxBalloonPops { get; set; }
+
+ public int BaloonsPopped { get; set; } = 0;
+
+ public Texture2D Texture { get; set; }
+
+ public ObjectBase ParentObject { get; set; }
+
+ public ProjectileBase(ObjectBase ParentObject, float RotationAngle)
+ {
+ this.ParentObject = ParentObject;
+ this.RotationAngle = RotationAngle;
+ }
+
+ public void Draw(float deltaTime)
+ {
+ Rectangle rec = new Rectangle(new Point((int)Position.X + (int)Size.X / 2, (int)Position.Y + (int)Size.Y / 2), Size.ToPoint());
+
+ if(Texture != null)
+ ParentObject.Map.Level.ParentScene.Main.SpriteBatch.Draw(Texture,
+ destinationRectangle: rec,
+ rotation: Rotation,
+ origin: new Vector2(Texture.Width / 2, Texture.Height / 2));
+ }
+
+ public void Update(float deltaTime)
+ {
+ Rotation += RotationSpeed * deltaTime;
+
+ Vector2 direction = new Vector2((float)Math.Cos(RotationAngle),
+ (float)Math.Sin(RotationAngle));
+ direction.Normalize();
+ Position += direction * Speed * deltaTime;
+
+ CheckForCollion();
+ }
+
+ private void CheckForCollion()
+ {
+ Rectangle projectileRec = new Rectangle(Position.ToPoint(), Size.ToPoint());
+
+ for(int i = 0; i < ParentObject.Map.Enemies.Count; i++)
+ {
+ if (projectileRec.Intersects(ParentObject.Map.Enemies[i].Box))
+ {
+ ParentObject.Map.Enemies[i].GetHit();
+
+ this.BaloonsPopped++;
+
+ // Remove object if it has hit maximum amount of targets
+ if(BaloonsPopped >= MaxBalloonPops)
+ {
+ ParentObject.Projectiles.Remove(this);
+ return;
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file