]> git.r.bdr.sh - rbdr/super-polarity/blob - Super Polarity/Actors/Ship.cs
2839c9738dcebb00ac93f2501bc73ab298ee9bdb
[rbdr/super-polarity] / Super Polarity / Actors / Ship.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using Microsoft.Xna.Framework;
6 using Microsoft.Xna.Framework.Graphics;
7
8 namespace SuperPolarity
9 {
10 class Ship : Actor
11 {
12 public enum Polarity : byte { Negative, Positive, Neutral };
13
14 public Polarity CurrentPolarity;
15 public uint MagneticRadius;
16
17 protected float FleeVelocity;
18 protected float ActVelocity;
19 protected float ChargeVelocity;
20 protected int RepelRadius;
21
22 protected bool Magnetizing;
23
24 public Ship(SuperPolarity newGame) : base(newGame) {
25 MagneticRadius = 250;
26 RepelRadius = 100;
27
28 HP = 5;
29
30 FleeVelocity = 5;
31 ActVelocity = 2;
32 ChargeVelocity = 1.5f;
33 CurrentPolarity = Polarity.Neutral;
34 Magnetizing = false;
35 }
36
37 public virtual void SwitchPolarity()
38 {
39 if (CurrentPolarity == Polarity.Positive)
40 {
41 CurrentPolarity = Polarity.Negative;
42 }
43 else
44 {
45 CurrentPolarity = Polarity.Positive;
46 }
47 }
48
49 public virtual void SetPolarity(Polarity newPolarity)
50 {
51 CurrentPolarity = newPolarity;
52 }
53
54 public virtual void Shoot()
55 {
56 }
57
58 public override void Update(GameTime gameTime)
59 {
60 base.Update(gameTime);
61 Magnetizing = false;
62 }
63
64 public virtual void Magnetize(Ship ship, float distance, float angle)
65 {
66 Magnetizing = true;
67 Polarity polarity = ship.CurrentPolarity;
68
69 if (polarity != CurrentPolarity)
70 {
71 Attract(angle);
72 }
73 else
74 {
75 Repel(distance, angle);
76 }
77 }
78
79 protected void Attract(float angle)
80 {
81 Velocity.X = (float) (ChargeVelocity * Math.Cos(angle));
82 Velocity.Y = (float) (ChargeVelocity * Math.Sin(angle));
83 }
84
85 protected void Repel(float distance, float angle)
86 {
87 if (distance > RepelRadius) { Magnetizing = false; return; }
88 Velocity.X = -(float)(FleeVelocity * Math.Cos(angle));
89 Velocity.Y = -(float)(FleeVelocity * Math.Sin(angle));
90 }
91 }
92 }