Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Missiles/Missiles.cpp
- 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); + } +}