Thomas Foster 201 096 550 Re published. Please check time of final commit

Dependencies:   mbed N5110_tf

Committer:
el17ttds
Date:
Sun May 12 16:31:45 2019 +0000
Revision:
11:fd7f7b531e50
Parent:
9:3a0194c87afe
Final submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17ttds 8:d1c04f0e4890 1 #include "Missiles.h"
el17ttds 8:d1c04f0e4890 2
el17ttds 8:d1c04f0e4890 3 Missiles::Missiles() {
el17ttds 8:d1c04f0e4890 4
el17ttds 8:d1c04f0e4890 5 }
el17ttds 8:d1c04f0e4890 6
el17ttds 8:d1c04f0e4890 7 void Missiles::init() {
el17ttds 8:d1c04f0e4890 8 _d = N;
el17ttds 8:d1c04f0e4890 9 _Apressed = false;
el17ttds 9:3a0194c87afe 10 frame_counter = 0;
el17ttds 8:d1c04f0e4890 11 frame_counter1 = 0;
el17ttds 8:d1c04f0e4890 12 frame_counter2 = 0;
el17ttds 8:d1c04f0e4890 13 frame_counter3 = 0;
el17ttds 8:d1c04f0e4890 14 _xStart = 42 - 1;
el17ttds 8:d1c04f0e4890 15 _yStart = 24 - 1;
el17ttds 8:d1c04f0e4890 16 _speed = 5;
el17ttds 8:d1c04f0e4890 17 _changex = 0;
el17ttds 8:d1c04f0e4890 18 _changey = -_speed; // Shoots up if no input
el17ttds 8:d1c04f0e4890 19 _m1 = 0;
el17ttds 8:d1c04f0e4890 20 _m1x = -1;
el17ttds 8:d1c04f0e4890 21 _changex1 = 0;
el17ttds 8:d1c04f0e4890 22 _m1y = -1;
el17ttds 8:d1c04f0e4890 23 _changey1 = 0;
el17ttds 8:d1c04f0e4890 24 _m2 = 0;
el17ttds 8:d1c04f0e4890 25 _m2x = -1;
el17ttds 8:d1c04f0e4890 26 _changex2 = 0;
el17ttds 8:d1c04f0e4890 27 _m2y = -1;
el17ttds 8:d1c04f0e4890 28 _changey2 = 0;
el17ttds 8:d1c04f0e4890 29 _m3 = 0;
el17ttds 8:d1c04f0e4890 30 _m3x = -1;
el17ttds 8:d1c04f0e4890 31 _changex3 = 0;
el17ttds 8:d1c04f0e4890 32 _m3y = -1;
el17ttds 8:d1c04f0e4890 33 _changey3 = 0;
el17ttds 8:d1c04f0e4890 34 }
el17ttds 8:d1c04f0e4890 35
el17ttds 9:3a0194c87afe 36 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
el17ttds 9:3a0194c87afe 37 reload_rate = rerate;
el17ttds 8:d1c04f0e4890 38 _Apressed = Apressed;
el17ttds 8:d1c04f0e4890 39 _Bpressed = Bpressed;
el17ttds 8:d1c04f0e4890 40 _d = d;
el17ttds 8:d1c04f0e4890 41 _pix_x = pix_x;
el17ttds 8:d1c04f0e4890 42 _pix_y = pix_y;
el17ttds 8:d1c04f0e4890 43 _map_x = map_x;
el17ttds 8:d1c04f0e4890 44 _map_y = map_y;
el17ttds 8:d1c04f0e4890 45 _m1_hit = m1_hit;
el17ttds 8:d1c04f0e4890 46 _m2_hit = m2_hit;
el17ttds 8:d1c04f0e4890 47 _m3_hit = m3_hit;
el17ttds 9:3a0194c87afe 48 reload();
el17ttds 8:d1c04f0e4890 49 check_hit();
el17ttds 8:d1c04f0e4890 50 move_missile();
el17ttds 8:d1c04f0e4890 51 if (_Apressed == true) {
el17ttds 8:d1c04f0e4890 52 set_forward();
el17ttds 8:d1c04f0e4890 53 } else if (_Bpressed == true) {
el17ttds 8:d1c04f0e4890 54 set_back();
el17ttds 8:d1c04f0e4890 55 }
el17ttds 8:d1c04f0e4890 56 check_collision_wall();
el17ttds 9:3a0194c87afe 57 show_ammo(pad);
el17ttds 8:d1c04f0e4890 58 }
el17ttds 8:d1c04f0e4890 59
el17ttds 8:d1c04f0e4890 60 void Missiles::draw(N5110 &lcd) {
el17ttds 8:d1c04f0e4890 61 if ( (_m1x >= 0 ) && (_m1y >= 0) ) {
el17ttds 9:3a0194c87afe 62 lcd.drawRect(_m1x, _m1y, 3, 3, FILL_TRANSPARENT);
el17ttds 8:d1c04f0e4890 63 }
el17ttds 8:d1c04f0e4890 64 if ( (_m2x >= 0 ) && (_m2y >= 0) ) {
el17ttds 8:d1c04f0e4890 65 lcd.drawRect(_m2x, _m2y, 3, 3, FILL_TRANSPARENT);
el17ttds 8:d1c04f0e4890 66 }
el17ttds 8:d1c04f0e4890 67 if ( (_m3x >= 0 ) && (_m3y >= 0) ) {
el17ttds 8:d1c04f0e4890 68 lcd.drawRect(_m3x, _m3y, 3, 3, FILL_TRANSPARENT);
el17ttds 8:d1c04f0e4890 69 }
el17ttds 8:d1c04f0e4890 70 }
el17ttds 8:d1c04f0e4890 71
el17ttds 8:d1c04f0e4890 72 Vector2D Missiles::get_m1_pos() {
el17ttds 8:d1c04f0e4890 73 if (_m1 == true) {
el17ttds 8:d1c04f0e4890 74 Vector2D m1_pos = {_m1x, _m1y};
el17ttds 8:d1c04f0e4890 75 return m1_pos;
el17ttds 8:d1c04f0e4890 76 } else {return {_map_x, _map_y}; }
el17ttds 8:d1c04f0e4890 77 }
el17ttds 8:d1c04f0e4890 78
el17ttds 8:d1c04f0e4890 79 Vector2D Missiles::get_m2_pos() {
el17ttds 8:d1c04f0e4890 80 if (_m2 == true) {
el17ttds 8:d1c04f0e4890 81 Vector2D m2_pos = {_m2x, _m2y};
el17ttds 8:d1c04f0e4890 82 return m2_pos;
el17ttds 8:d1c04f0e4890 83 } else {return {_map_x, _map_y}; }
el17ttds 8:d1c04f0e4890 84 }
el17ttds 8:d1c04f0e4890 85
el17ttds 8:d1c04f0e4890 86 Vector2D Missiles::get_m3_pos() {
el17ttds 8:d1c04f0e4890 87 if (_m3 == true) {
el17ttds 8:d1c04f0e4890 88 Vector2D m3_pos = {_m3x, _m3y};
el17ttds 8:d1c04f0e4890 89 return m3_pos;
el17ttds 8:d1c04f0e4890 90 } else {return {_map_x, _map_y}; } // If missile doesnt exist, return a location that collides with no enemy.
el17ttds 8:d1c04f0e4890 91 }
el17ttds 8:d1c04f0e4890 92 ////////////////////////////////// PRIVATE FUNCTIONS ///////////////////////////////
el17ttds 8:d1c04f0e4890 93
el17ttds 9:3a0194c87afe 94 void Missiles::reload() {
el17ttds 9:3a0194c87afe 95 if (_m1 == false) {
el17ttds 9:3a0194c87afe 96 frame_counter1++;
el17ttds 9:3a0194c87afe 97 _ready1 = false;
el17ttds 9:3a0194c87afe 98 if (frame_counter1 >= reload_rate) {
el17ttds 9:3a0194c87afe 99 _ready1 = true;
el17ttds 9:3a0194c87afe 100 }
el17ttds 9:3a0194c87afe 101 }
el17ttds 9:3a0194c87afe 102 if (_m2 == false) {
el17ttds 9:3a0194c87afe 103 frame_counter2++;
el17ttds 9:3a0194c87afe 104 _ready2 = false;
el17ttds 9:3a0194c87afe 105 if (frame_counter2 >= reload_rate) {
el17ttds 9:3a0194c87afe 106 _ready2 = true;
el17ttds 9:3a0194c87afe 107 }
el17ttds 9:3a0194c87afe 108 }
el17ttds 9:3a0194c87afe 109 if (_m3 == false) {
el17ttds 9:3a0194c87afe 110 frame_counter3++;
el17ttds 9:3a0194c87afe 111 _ready3 = false;
el17ttds 9:3a0194c87afe 112 if (frame_counter3 >= reload_rate) {
el17ttds 9:3a0194c87afe 113 _ready3 = true;
el17ttds 9:3a0194c87afe 114 }
el17ttds 9:3a0194c87afe 115 }
el17ttds 9:3a0194c87afe 116 }
el17ttds 9:3a0194c87afe 117
el17ttds 8:d1c04f0e4890 118 void Missiles::check_hit() {
el17ttds 8:d1c04f0e4890 119 if (_m1_hit == true) {
el17ttds 8:d1c04f0e4890 120 _m1 = false;
el17ttds 8:d1c04f0e4890 121 }
el17ttds 8:d1c04f0e4890 122 if (_m2_hit == true) {
el17ttds 8:d1c04f0e4890 123 _m2 = false;
el17ttds 8:d1c04f0e4890 124 }
el17ttds 8:d1c04f0e4890 125 if (_m3_hit == true) {
el17ttds 8:d1c04f0e4890 126 _m3 = false;
el17ttds 8:d1c04f0e4890 127 }
el17ttds 8:d1c04f0e4890 128 }
el17ttds 8:d1c04f0e4890 129
el17ttds 8:d1c04f0e4890 130 void Missiles::move_missile() {
el17ttds 8:d1c04f0e4890 131 if (_m1 == true) {
el17ttds 8:d1c04f0e4890 132 _m1x += _changex1 - _pix_x;
el17ttds 8:d1c04f0e4890 133 _m1y += _changey1 + _pix_y;
el17ttds 8:d1c04f0e4890 134 } else {
el17ttds 8:d1c04f0e4890 135 _m1x = -1;
el17ttds 8:d1c04f0e4890 136 _m1y = -1;
el17ttds 8:d1c04f0e4890 137 }
el17ttds 8:d1c04f0e4890 138 if (_m2 == true) {
el17ttds 8:d1c04f0e4890 139 _m2x += _changex2 - _pix_x;
el17ttds 8:d1c04f0e4890 140 _m2y += _changey2 + _pix_y;
el17ttds 8:d1c04f0e4890 141 } else {
el17ttds 8:d1c04f0e4890 142 _m2x = -1;
el17ttds 8:d1c04f0e4890 143 _m2y = -1;
el17ttds 8:d1c04f0e4890 144 }
el17ttds 8:d1c04f0e4890 145 if (_m3 == true) {
el17ttds 8:d1c04f0e4890 146 _m3x += _changex3 - _pix_x;
el17ttds 8:d1c04f0e4890 147 _m3y += _changey3 + _pix_y;
el17ttds 8:d1c04f0e4890 148 } else {
el17ttds 8:d1c04f0e4890 149 _m3x = -1;
el17ttds 8:d1c04f0e4890 150 _m3y = -1;
el17ttds 8:d1c04f0e4890 151 }
el17ttds 8:d1c04f0e4890 152 }
el17ttds 8:d1c04f0e4890 153
el17ttds 8:d1c04f0e4890 154 void Missiles::set_forward() { // reverses direction to forward again
el17ttds 9:3a0194c87afe 155 if (_ready1 == true) {
el17ttds 8:d1c04f0e4890 156 direction();
el17ttds 8:d1c04f0e4890 157 _changex1 = -_changex;
el17ttds 8:d1c04f0e4890 158 _changey1 = -_changey;
el17ttds 8:d1c04f0e4890 159 _m1x = _xStart;
el17ttds 8:d1c04f0e4890 160 _m1y = _yStart;
el17ttds 8:d1c04f0e4890 161 _m1 = true;
el17ttds 9:3a0194c87afe 162 _ready1 = false;
el17ttds 9:3a0194c87afe 163 frame_counter1 = 0;
el17ttds 9:3a0194c87afe 164 } else if (_ready2 == true) {
el17ttds 8:d1c04f0e4890 165 direction();
el17ttds 8:d1c04f0e4890 166 _changex2 = -_changex;
el17ttds 8:d1c04f0e4890 167 _changey2 = -_changey;
el17ttds 8:d1c04f0e4890 168 _m2x = _xStart;
el17ttds 8:d1c04f0e4890 169 _m2y = _yStart;
el17ttds 8:d1c04f0e4890 170 _m2 = true;
el17ttds 9:3a0194c87afe 171 _ready2 = false;
el17ttds 9:3a0194c87afe 172 frame_counter2 = 0;
el17ttds 9:3a0194c87afe 173 } else if (_ready3 == true) {
el17ttds 8:d1c04f0e4890 174 direction();
el17ttds 8:d1c04f0e4890 175 _changex3 = -_changex;
el17ttds 8:d1c04f0e4890 176 _changey3 = -_changey;
el17ttds 8:d1c04f0e4890 177 _m3x = _xStart;
el17ttds 8:d1c04f0e4890 178 _m3y = _yStart;
el17ttds 8:d1c04f0e4890 179 _m3 = true;
el17ttds 9:3a0194c87afe 180 _ready3 = false;
el17ttds 9:3a0194c87afe 181 frame_counter3 = 0;
el17ttds 8:d1c04f0e4890 182 }
el17ttds 8:d1c04f0e4890 183 }
el17ttds 8:d1c04f0e4890 184
el17ttds 8:d1c04f0e4890 185 void Missiles::set_back() {
el17ttds 9:3a0194c87afe 186 if (_ready1 == true) {
el17ttds 8:d1c04f0e4890 187 direction();
el17ttds 8:d1c04f0e4890 188 _changex1 = _changex;
el17ttds 8:d1c04f0e4890 189 _changey1 = _changey;
el17ttds 8:d1c04f0e4890 190 _m1x = _xStart;
el17ttds 8:d1c04f0e4890 191 _m1y = _yStart;
el17ttds 8:d1c04f0e4890 192 _m1 = true;
el17ttds 9:3a0194c87afe 193 _ready1 = false;
el17ttds 9:3a0194c87afe 194 frame_counter1 = 0;
el17ttds 9:3a0194c87afe 195 } else if (_ready2 == true) {
el17ttds 8:d1c04f0e4890 196 direction();
el17ttds 8:d1c04f0e4890 197 _changex2 = _changex;
el17ttds 8:d1c04f0e4890 198 _changey2 = _changey;
el17ttds 8:d1c04f0e4890 199 _m2x = _xStart;
el17ttds 8:d1c04f0e4890 200 _m2y = _yStart;
el17ttds 8:d1c04f0e4890 201 _m2 = true;
el17ttds 9:3a0194c87afe 202 _ready2 = false;
el17ttds 9:3a0194c87afe 203 frame_counter2 = 0;
el17ttds 9:3a0194c87afe 204 } else if (_ready3 == true) {
el17ttds 8:d1c04f0e4890 205 direction();
el17ttds 8:d1c04f0e4890 206 _changex3 = _changex;
el17ttds 8:d1c04f0e4890 207 _changey3 = _changey;
el17ttds 8:d1c04f0e4890 208 _m3x = _xStart;
el17ttds 8:d1c04f0e4890 209 _m3y = _yStart;
el17ttds 8:d1c04f0e4890 210 _m3 = true;
el17ttds 9:3a0194c87afe 211 _ready3 = false;
el17ttds 9:3a0194c87afe 212 frame_counter3 = 0;
el17ttds 8:d1c04f0e4890 213 }
el17ttds 8:d1c04f0e4890 214 }
el17ttds 8:d1c04f0e4890 215
el17ttds 8:d1c04f0e4890 216 void Missiles::direction() { // Original design only shoots back.
el17ttds 8:d1c04f0e4890 217 if (_d == N) {
el17ttds 8:d1c04f0e4890 218 _changex = 0;
el17ttds 8:d1c04f0e4890 219 _changey = _speed;
el17ttds 8:d1c04f0e4890 220 } else if (_d == NE) {
el17ttds 8:d1c04f0e4890 221 _changex = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 222 _changey = _speed / 1.414;
el17ttds 8:d1c04f0e4890 223 } else if (_d == E) {
el17ttds 8:d1c04f0e4890 224 _changex = -_speed;
el17ttds 8:d1c04f0e4890 225 _changey = 0;
el17ttds 8:d1c04f0e4890 226 } else if (_d == SE) {
el17ttds 8:d1c04f0e4890 227 _changex = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 228 _changey = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 229 } else if (_d == S) {
el17ttds 8:d1c04f0e4890 230 _changex = 0;
el17ttds 8:d1c04f0e4890 231 _changey = -_speed;
el17ttds 8:d1c04f0e4890 232 } else if (_d == SW) {
el17ttds 8:d1c04f0e4890 233 _changex = _speed / 1.414;
el17ttds 8:d1c04f0e4890 234 _changey = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 235 } else if (_d == W) {
el17ttds 8:d1c04f0e4890 236 _changex = _speed;
el17ttds 8:d1c04f0e4890 237 _changey = 0;
el17ttds 8:d1c04f0e4890 238 } else if (_d == NW) {
el17ttds 8:d1c04f0e4890 239 _changex = _speed / 1.414;
el17ttds 8:d1c04f0e4890 240 _changey = _speed / 1.414;
el17ttds 8:d1c04f0e4890 241 }
el17ttds 8:d1c04f0e4890 242 }
el17ttds 8:d1c04f0e4890 243
el17ttds 8:d1c04f0e4890 244 void Missiles::check_collision_wall() {
el17ttds 8:d1c04f0e4890 245 if ( (_m1x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 246 (_m1x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 247 (_m1y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 248 (_m1y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 249 _m1 = false;
el17ttds 8:d1c04f0e4890 250 _m1x = -1;
el17ttds 8:d1c04f0e4890 251 _m1y = -1;
el17ttds 8:d1c04f0e4890 252 }
el17ttds 8:d1c04f0e4890 253 if ( (_m2x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 254 (_m2x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 255 (_m2y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 256 (_m2y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 257 _m2 = false;
el17ttds 8:d1c04f0e4890 258 _m2x = -1;
el17ttds 8:d1c04f0e4890 259 _m2y = -1;
el17ttds 8:d1c04f0e4890 260 }
el17ttds 8:d1c04f0e4890 261 if ( (_m3x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 262 (_m3x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 263 (_m3y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 264 (_m3y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 265 _m3 = false;
el17ttds 8:d1c04f0e4890 266 _m3x = -1;
el17ttds 8:d1c04f0e4890 267 _m3y = -1;
el17ttds 8:d1c04f0e4890 268 }
el17ttds 8:d1c04f0e4890 269 }
el17ttds 9:3a0194c87afe 270
el17ttds 9:3a0194c87afe 271 void Missiles::show_ammo(Gamepad &pad) {
el17ttds 9:3a0194c87afe 272 ammo = 0;
el17ttds 9:3a0194c87afe 273 frame_counter++;
el17ttds 9:3a0194c87afe 274 if (_ready1 == true) {
el17ttds 9:3a0194c87afe 275 ammo++;
el17ttds 9:3a0194c87afe 276 }
el17ttds 9:3a0194c87afe 277 if (_ready2 == true) {
el17ttds 9:3a0194c87afe 278 ammo++;
el17ttds 9:3a0194c87afe 279 }
el17ttds 9:3a0194c87afe 280 if (_ready3 == true) {
el17ttds 9:3a0194c87afe 281 ammo++;
el17ttds 9:3a0194c87afe 282 }
el17ttds 9:3a0194c87afe 283 if (ammo == 3) {
el17ttds 9:3a0194c87afe 284 pad.led(4, 1);
el17ttds 9:3a0194c87afe 285 pad.led(5, 1);
el17ttds 9:3a0194c87afe 286 pad.led(6, 1);
el17ttds 9:3a0194c87afe 287 } else if (ammo == 2) {
el17ttds 9:3a0194c87afe 288 pad.led(4, 1);
el17ttds 9:3a0194c87afe 289 pad.led(5, 1);
el17ttds 9:3a0194c87afe 290 pad.led(6, 0);
el17ttds 9:3a0194c87afe 291 } else if (ammo == 1) {
el17ttds 9:3a0194c87afe 292 pad.led(4, 1);
el17ttds 9:3a0194c87afe 293 pad.led(5, 0);
el17ttds 9:3a0194c87afe 294 pad.led(6, 0);
el17ttds 9:3a0194c87afe 295 } else {
el17ttds 9:3a0194c87afe 296 if (frame_counter%5 > 3) {
el17ttds 9:3a0194c87afe 297 pad.led(4, 1);
el17ttds 9:3a0194c87afe 298 } else {
el17ttds 9:3a0194c87afe 299 pad.led(4, 0);
el17ttds 9:3a0194c87afe 300 }
el17ttds 9:3a0194c87afe 301 pad.led(5, 0);
el17ttds 9:3a0194c87afe 302 pad.led(6, 0);
el17ttds 9:3a0194c87afe 303 }
el17ttds 9:3a0194c87afe 304 }