ELEC2645 (2018/19) / Mbed 2 deprecated el17ttds

Dependencies:   mbed N5110_tf

Revision:
9:3a0194c87afe
Parent:
8:d1c04f0e4890
--- a/Missiles/Missiles.cpp	Sat May 11 08:23:54 2019 +0000
+++ b/Missiles/Missiles.cpp	Sun May 12 16:21:08 2019 +0000
@@ -7,10 +7,10 @@
 void Missiles::init() {
   _d = N;
   _Apressed = false;
+  frame_counter = 0;
   frame_counter1 = 0;
   frame_counter2 = 0;
   frame_counter3 = 0;
-  reload_rate = 30;
   _xStart = 42 - 1;
   _yStart = 24 - 1;
   _speed = 5;
@@ -33,7 +33,8 @@
   _changey3 = 0;
 }
 
-void Missiles::write(int pix_x, int pix_y, Direction d, bool Apressed, bool Bpressed, int map_x, int map_y, bool m1_hit, bool m2_hit, bool m3_hit, Gamepad &pad, N5110 &lcd) { // lcd for leds
+void Missiles::write(int pix_x, int pix_y, Direction d, bool Apressed, bool Bpressed, int map_x, int map_y, bool m1_hit, bool m2_hit, bool m3_hit, Gamepad &pad, int rerate) { // lcd for leds
+  reload_rate = rerate;
   _Apressed = Apressed;
   _Bpressed = Bpressed;
   _d = d;
@@ -44,21 +45,21 @@
   _m1_hit = m1_hit;
   _m2_hit = m2_hit;
   _m3_hit = m3_hit;
+  reload();
   check_hit();
   move_missile();
   if (_Apressed == true) {
-    pad.tone(1000, 0.2);
     set_forward();
   } else if (_Bpressed == true) {
-    pad.tone(1000, 0.2);
     set_back();
   }
   check_collision_wall();
+  show_ammo(pad);
 }
 
 void Missiles::draw(N5110 &lcd) {
   if ( (_m1x >= 0 ) && (_m1y >= 0) ) {
-    lcd.drawRect(_m1x, _m1y, 3, 3, FILL_TRANSPARENT); // FILL_BLACK is a test
+    lcd.drawRect(_m1x, _m1y, 3, 3, FILL_TRANSPARENT);
   }
   if ( (_m2x >= 0 ) && (_m2y >= 0) ) {
     lcd.drawRect(_m2x, _m2y, 3, 3, FILL_TRANSPARENT);
@@ -90,6 +91,30 @@
 }
 //////////////////////////////////  PRIVATE FUNCTIONS ///////////////////////////////
 
+void Missiles::reload() {
+  if (_m1 == false) {
+    frame_counter1++;
+    _ready1 = false;
+    if (frame_counter1 >= reload_rate) {
+      _ready1 = true;
+    }
+  }
+  if (_m2 == false) {
+    frame_counter2++;
+    _ready2 = false;
+    if (frame_counter2 >= reload_rate) {
+      _ready2 = true;
+    }
+  }
+  if (_m3 == false) {
+    frame_counter3++;
+    _ready3 = false;
+    if (frame_counter3 >= reload_rate) {
+      _ready3 = true;
+    }
+  }
+}
+
 void Missiles::check_hit() {
   if (_m1_hit == true) {
     _m1 = false;
@@ -127,52 +152,64 @@
 }
 
 void Missiles::set_forward() {  // reverses direction to forward again
-  if (_m1 == false) {
+  if (_ready1 == true) {
     direction();
     _changex1 = -_changex;
     _changey1 = -_changey;
     _m1x = _xStart;
     _m1y = _yStart;
     _m1 = true;
-  } else if (_m2 == false) {
+    _ready1 = false;
+    frame_counter1 = 0;
+  } else if (_ready2 == true) {
     direction();
     _changex2 = -_changex;
     _changey2 = -_changey;
     _m2x = _xStart;
     _m2y = _yStart;
     _m2 = true;
-  } else if (_m3 == false) {
+    _ready2 = false;
+    frame_counter2 = 0;
+  } else if (_ready3 == true) {
     direction();
     _changex3 = -_changex;
     _changey3 = -_changey;
     _m3x = _xStart;
     _m3y = _yStart;
     _m3 = true;
+    _ready3 = false;
+    frame_counter3 = 0;
   }
 }
 
 void Missiles::set_back() {
-  if (_m1 == false) {
+  if (_ready1 == true) {
     direction();
     _changex1 = _changex;
     _changey1 = _changey;
     _m1x = _xStart;
     _m1y = _yStart;
     _m1 = true;
-  } else if (_m2 == false) {
+    _ready1 = false;
+    frame_counter1 = 0;
+  } else if (_ready2 == true) {
     direction();
     _changex2 = _changex;
     _changey2 = _changey;
     _m2x = _xStart;
     _m2y = _yStart;
     _m2 = true;
-  } else if (_m3 == false) {
+    _ready2 = false;
+    frame_counter2 = 0;
+  } else if (_ready3 == true) {
     direction();
     _changex3 = _changex;
     _changey3 = _changey;
     _m3x = _xStart;
     _m3y = _yStart;
     _m3 = true;
+    _ready3 = false;
+    frame_counter3 = 0;
   }
 }
 
@@ -230,3 +267,38 @@
       _m3y = -1;
     }
 }
+
+void Missiles::show_ammo(Gamepad &pad) {
+  ammo = 0;
+  frame_counter++;
+  if (_ready1 == true) {
+    ammo++;
+  }
+  if (_ready2 == true) {
+    ammo++;
+  }
+  if (_ready3 == true) {
+    ammo++;
+  }
+  if (ammo == 3) {
+    pad.led(4, 1);
+    pad.led(5, 1);
+    pad.led(6, 1);
+  } else if (ammo == 2) {
+    pad.led(4, 1);
+    pad.led(5, 1);
+    pad.led(6, 0);
+  } else if (ammo == 1) {
+    pad.led(4, 1);
+    pad.led(5, 0);
+    pad.led(6, 0);
+  } else {
+    if (frame_counter%5 > 3) {
+      pad.led(4, 1);
+    } else {
+      pad.led(4, 0);
+    }
+    pad.led(5, 0);
+    pad.led(6, 0);
+  }
+}