aboutsummaryrefslogtreecommitdiff
path: root/SuperPolarity/Actors/Ship.cs
diff options
context:
space:
mode:
authorBen Beltran <ben@nsovocal.com>2014-02-03 10:06:44 -0600
committerBen Beltran <ben@nsovocal.com>2014-02-03 10:06:44 -0600
commit4fc09567c557a1110180940cca40fd7144921026 (patch)
tree5fb7b0b787b739a3f4a2785651c69219a8318ab0 /SuperPolarity/Actors/Ship.cs
parent0cafec445af0a97d96feb1a1daefa1486142c73f (diff)
Removes spaces.
Diffstat (limited to 'SuperPolarity/Actors/Ship.cs')
-rw-r--r--SuperPolarity/Actors/Ship.cs92
1 files changed, 92 insertions, 0 deletions
diff --git a/SuperPolarity/Actors/Ship.cs b/SuperPolarity/Actors/Ship.cs
new file mode 100644
index 0000000..229f639
--- /dev/null
+++ b/SuperPolarity/Actors/Ship.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace SuperPolarity
+{
+ class Ship : Actor
+ {
+ public enum Polarity : byte { Negative, Positive, Neutral };
+
+ public Polarity CurrentPolarity;
+ public uint MagneticRadius;
+
+ public float FleeVelocity;
+ public float ActVelocity;
+ public float ChargeVelocity;
+ public int RepelRadius;
+
+ protected bool Magnetizing;
+
+ public Ship(SuperPolarity newGame) : base(newGame) {
+ MagneticRadius = 250;
+ RepelRadius = 100;
+
+ HP = 2;
+
+ FleeVelocity = 5;
+ ActVelocity = 1;
+ ChargeVelocity = 2.5f;
+ CurrentPolarity = Polarity.Neutral;
+ Magnetizing = false;
+ }
+
+ public virtual void SwitchPolarity()
+ {
+ if (CurrentPolarity == Polarity.Positive)
+ {
+ CurrentPolarity = Polarity.Negative;
+ }
+ else
+ {
+ CurrentPolarity = Polarity.Positive;
+ }
+ }
+
+ public virtual void SetPolarity(Polarity newPolarity)
+ {
+ CurrentPolarity = newPolarity;
+ }
+
+ public virtual void Shoot()
+ {
+ }
+
+ public override void Update(GameTime gameTime)
+ {
+ base.Update(gameTime);
+ Magnetizing = false;
+ }
+
+ public virtual void Magnetize(Ship ship, float distance, float angle)
+ {
+ Magnetizing = true;
+ Polarity polarity = ship.CurrentPolarity;
+
+ if (polarity != CurrentPolarity)
+ {
+ Attract(angle);
+ }
+ else
+ {
+ Repel(distance, angle);
+ }
+ }
+
+ protected void Attract(float angle)
+ {
+ Velocity.X = (float) (ChargeVelocity * Math.Cos(angle));
+ Velocity.Y = (float) (ChargeVelocity * Math.Sin(angle));
+ }
+
+ protected void Repel(float distance, float angle)
+ {
+ if (distance > RepelRadius) { Magnetizing = false; return; }
+ Velocity.X = -(float)(FleeVelocity * Math.Cos(angle));
+ Velocity.Y = -(float)(FleeVelocity * Math.Sin(angle));
+ }
+ }
+}