ELEC2645 (2018/19) / Mbed 2 deprecated el17ttds

Dependencies:   mbed N5110_tf

Committer:
el17ttds
Date:
Sat May 11 08:23:54 2019 +0000
Revision:
8:d1c04f0e4890
Child:
9:3a0194c87afe
Full game.; Unfinished menu, tone glitch, score doesn't print, ammo and health to be displayed

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 8:d1c04f0e4890 10 frame_counter1 = 0;
el17ttds 8:d1c04f0e4890 11 frame_counter2 = 0;
el17ttds 8:d1c04f0e4890 12 frame_counter3 = 0;
el17ttds 8:d1c04f0e4890 13 reload_rate = 30;
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 8:d1c04f0e4890 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, N5110 &lcd) { // lcd for leds
el17ttds 8:d1c04f0e4890 37 _Apressed = Apressed;
el17ttds 8:d1c04f0e4890 38 _Bpressed = Bpressed;
el17ttds 8:d1c04f0e4890 39 _d = d;
el17ttds 8:d1c04f0e4890 40 _pix_x = pix_x;
el17ttds 8:d1c04f0e4890 41 _pix_y = pix_y;
el17ttds 8:d1c04f0e4890 42 _map_x = map_x;
el17ttds 8:d1c04f0e4890 43 _map_y = map_y;
el17ttds 8:d1c04f0e4890 44 _m1_hit = m1_hit;
el17ttds 8:d1c04f0e4890 45 _m2_hit = m2_hit;
el17ttds 8:d1c04f0e4890 46 _m3_hit = m3_hit;
el17ttds 8:d1c04f0e4890 47 check_hit();
el17ttds 8:d1c04f0e4890 48 move_missile();
el17ttds 8:d1c04f0e4890 49 if (_Apressed == true) {
el17ttds 8:d1c04f0e4890 50 pad.tone(1000, 0.2);
el17ttds 8:d1c04f0e4890 51 set_forward();
el17ttds 8:d1c04f0e4890 52 } else if (_Bpressed == true) {
el17ttds 8:d1c04f0e4890 53 pad.tone(1000, 0.2);
el17ttds 8:d1c04f0e4890 54 set_back();
el17ttds 8:d1c04f0e4890 55 }
el17ttds 8:d1c04f0e4890 56 check_collision_wall();
el17ttds 8:d1c04f0e4890 57 }
el17ttds 8:d1c04f0e4890 58
el17ttds 8:d1c04f0e4890 59 void Missiles::draw(N5110 &lcd) {
el17ttds 8:d1c04f0e4890 60 if ( (_m1x >= 0 ) && (_m1y >= 0) ) {
el17ttds 8:d1c04f0e4890 61 lcd.drawRect(_m1x, _m1y, 3, 3, FILL_TRANSPARENT); // FILL_BLACK is a test
el17ttds 8:d1c04f0e4890 62 }
el17ttds 8:d1c04f0e4890 63 if ( (_m2x >= 0 ) && (_m2y >= 0) ) {
el17ttds 8:d1c04f0e4890 64 lcd.drawRect(_m2x, _m2y, 3, 3, FILL_TRANSPARENT);
el17ttds 8:d1c04f0e4890 65 }
el17ttds 8:d1c04f0e4890 66 if ( (_m3x >= 0 ) && (_m3y >= 0) ) {
el17ttds 8:d1c04f0e4890 67 lcd.drawRect(_m3x, _m3y, 3, 3, FILL_TRANSPARENT);
el17ttds 8:d1c04f0e4890 68 }
el17ttds 8:d1c04f0e4890 69 }
el17ttds 8:d1c04f0e4890 70
el17ttds 8:d1c04f0e4890 71 Vector2D Missiles::get_m1_pos() {
el17ttds 8:d1c04f0e4890 72 if (_m1 == true) {
el17ttds 8:d1c04f0e4890 73 Vector2D m1_pos = {_m1x, _m1y};
el17ttds 8:d1c04f0e4890 74 return m1_pos;
el17ttds 8:d1c04f0e4890 75 } else {return {_map_x, _map_y}; }
el17ttds 8:d1c04f0e4890 76 }
el17ttds 8:d1c04f0e4890 77
el17ttds 8:d1c04f0e4890 78 Vector2D Missiles::get_m2_pos() {
el17ttds 8:d1c04f0e4890 79 if (_m2 == true) {
el17ttds 8:d1c04f0e4890 80 Vector2D m2_pos = {_m2x, _m2y};
el17ttds 8:d1c04f0e4890 81 return m2_pos;
el17ttds 8:d1c04f0e4890 82 } else {return {_map_x, _map_y}; }
el17ttds 8:d1c04f0e4890 83 }
el17ttds 8:d1c04f0e4890 84
el17ttds 8:d1c04f0e4890 85 Vector2D Missiles::get_m3_pos() {
el17ttds 8:d1c04f0e4890 86 if (_m3 == true) {
el17ttds 8:d1c04f0e4890 87 Vector2D m3_pos = {_m3x, _m3y};
el17ttds 8:d1c04f0e4890 88 return m3_pos;
el17ttds 8:d1c04f0e4890 89 } else {return {_map_x, _map_y}; } // If missile doesnt exist, return a location that collides with no enemy.
el17ttds 8:d1c04f0e4890 90 }
el17ttds 8:d1c04f0e4890 91 ////////////////////////////////// PRIVATE FUNCTIONS ///////////////////////////////
el17ttds 8:d1c04f0e4890 92
el17ttds 8:d1c04f0e4890 93 void Missiles::check_hit() {
el17ttds 8:d1c04f0e4890 94 if (_m1_hit == true) {
el17ttds 8:d1c04f0e4890 95 _m1 = false;
el17ttds 8:d1c04f0e4890 96 }
el17ttds 8:d1c04f0e4890 97 if (_m2_hit == true) {
el17ttds 8:d1c04f0e4890 98 _m2 = false;
el17ttds 8:d1c04f0e4890 99 }
el17ttds 8:d1c04f0e4890 100 if (_m3_hit == true) {
el17ttds 8:d1c04f0e4890 101 _m3 = false;
el17ttds 8:d1c04f0e4890 102 }
el17ttds 8:d1c04f0e4890 103 }
el17ttds 8:d1c04f0e4890 104
el17ttds 8:d1c04f0e4890 105 void Missiles::move_missile() {
el17ttds 8:d1c04f0e4890 106 if (_m1 == true) {
el17ttds 8:d1c04f0e4890 107 _m1x += _changex1 - _pix_x;
el17ttds 8:d1c04f0e4890 108 _m1y += _changey1 + _pix_y;
el17ttds 8:d1c04f0e4890 109 } else {
el17ttds 8:d1c04f0e4890 110 _m1x = -1;
el17ttds 8:d1c04f0e4890 111 _m1y = -1;
el17ttds 8:d1c04f0e4890 112 }
el17ttds 8:d1c04f0e4890 113 if (_m2 == true) {
el17ttds 8:d1c04f0e4890 114 _m2x += _changex2 - _pix_x;
el17ttds 8:d1c04f0e4890 115 _m2y += _changey2 + _pix_y;
el17ttds 8:d1c04f0e4890 116 } else {
el17ttds 8:d1c04f0e4890 117 _m2x = -1;
el17ttds 8:d1c04f0e4890 118 _m2y = -1;
el17ttds 8:d1c04f0e4890 119 }
el17ttds 8:d1c04f0e4890 120 if (_m3 == true) {
el17ttds 8:d1c04f0e4890 121 _m3x += _changex3 - _pix_x;
el17ttds 8:d1c04f0e4890 122 _m3y += _changey3 + _pix_y;
el17ttds 8:d1c04f0e4890 123 } else {
el17ttds 8:d1c04f0e4890 124 _m3x = -1;
el17ttds 8:d1c04f0e4890 125 _m3y = -1;
el17ttds 8:d1c04f0e4890 126 }
el17ttds 8:d1c04f0e4890 127 }
el17ttds 8:d1c04f0e4890 128
el17ttds 8:d1c04f0e4890 129 void Missiles::set_forward() { // reverses direction to forward again
el17ttds 8:d1c04f0e4890 130 if (_m1 == false) {
el17ttds 8:d1c04f0e4890 131 direction();
el17ttds 8:d1c04f0e4890 132 _changex1 = -_changex;
el17ttds 8:d1c04f0e4890 133 _changey1 = -_changey;
el17ttds 8:d1c04f0e4890 134 _m1x = _xStart;
el17ttds 8:d1c04f0e4890 135 _m1y = _yStart;
el17ttds 8:d1c04f0e4890 136 _m1 = true;
el17ttds 8:d1c04f0e4890 137 } else if (_m2 == false) {
el17ttds 8:d1c04f0e4890 138 direction();
el17ttds 8:d1c04f0e4890 139 _changex2 = -_changex;
el17ttds 8:d1c04f0e4890 140 _changey2 = -_changey;
el17ttds 8:d1c04f0e4890 141 _m2x = _xStart;
el17ttds 8:d1c04f0e4890 142 _m2y = _yStart;
el17ttds 8:d1c04f0e4890 143 _m2 = true;
el17ttds 8:d1c04f0e4890 144 } else if (_m3 == false) {
el17ttds 8:d1c04f0e4890 145 direction();
el17ttds 8:d1c04f0e4890 146 _changex3 = -_changex;
el17ttds 8:d1c04f0e4890 147 _changey3 = -_changey;
el17ttds 8:d1c04f0e4890 148 _m3x = _xStart;
el17ttds 8:d1c04f0e4890 149 _m3y = _yStart;
el17ttds 8:d1c04f0e4890 150 _m3 = true;
el17ttds 8:d1c04f0e4890 151 }
el17ttds 8:d1c04f0e4890 152 }
el17ttds 8:d1c04f0e4890 153
el17ttds 8:d1c04f0e4890 154 void Missiles::set_back() {
el17ttds 8:d1c04f0e4890 155 if (_m1 == false) {
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 8:d1c04f0e4890 162 } else if (_m2 == false) {
el17ttds 8:d1c04f0e4890 163 direction();
el17ttds 8:d1c04f0e4890 164 _changex2 = _changex;
el17ttds 8:d1c04f0e4890 165 _changey2 = _changey;
el17ttds 8:d1c04f0e4890 166 _m2x = _xStart;
el17ttds 8:d1c04f0e4890 167 _m2y = _yStart;
el17ttds 8:d1c04f0e4890 168 _m2 = true;
el17ttds 8:d1c04f0e4890 169 } else if (_m3 == false) {
el17ttds 8:d1c04f0e4890 170 direction();
el17ttds 8:d1c04f0e4890 171 _changex3 = _changex;
el17ttds 8:d1c04f0e4890 172 _changey3 = _changey;
el17ttds 8:d1c04f0e4890 173 _m3x = _xStart;
el17ttds 8:d1c04f0e4890 174 _m3y = _yStart;
el17ttds 8:d1c04f0e4890 175 _m3 = true;
el17ttds 8:d1c04f0e4890 176 }
el17ttds 8:d1c04f0e4890 177 }
el17ttds 8:d1c04f0e4890 178
el17ttds 8:d1c04f0e4890 179 void Missiles::direction() { // Original design only shoots back.
el17ttds 8:d1c04f0e4890 180 if (_d == N) {
el17ttds 8:d1c04f0e4890 181 _changex = 0;
el17ttds 8:d1c04f0e4890 182 _changey = _speed;
el17ttds 8:d1c04f0e4890 183 } else if (_d == NE) {
el17ttds 8:d1c04f0e4890 184 _changex = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 185 _changey = _speed / 1.414;
el17ttds 8:d1c04f0e4890 186 } else if (_d == E) {
el17ttds 8:d1c04f0e4890 187 _changex = -_speed;
el17ttds 8:d1c04f0e4890 188 _changey = 0;
el17ttds 8:d1c04f0e4890 189 } else if (_d == SE) {
el17ttds 8:d1c04f0e4890 190 _changex = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 191 _changey = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 192 } else if (_d == S) {
el17ttds 8:d1c04f0e4890 193 _changex = 0;
el17ttds 8:d1c04f0e4890 194 _changey = -_speed;
el17ttds 8:d1c04f0e4890 195 } else if (_d == SW) {
el17ttds 8:d1c04f0e4890 196 _changex = _speed / 1.414;
el17ttds 8:d1c04f0e4890 197 _changey = -(_speed / 1.414);
el17ttds 8:d1c04f0e4890 198 } else if (_d == W) {
el17ttds 8:d1c04f0e4890 199 _changex = _speed;
el17ttds 8:d1c04f0e4890 200 _changey = 0;
el17ttds 8:d1c04f0e4890 201 } else if (_d == NW) {
el17ttds 8:d1c04f0e4890 202 _changex = _speed / 1.414;
el17ttds 8:d1c04f0e4890 203 _changey = _speed / 1.414;
el17ttds 8:d1c04f0e4890 204 }
el17ttds 8:d1c04f0e4890 205 }
el17ttds 8:d1c04f0e4890 206
el17ttds 8:d1c04f0e4890 207 void Missiles::check_collision_wall() {
el17ttds 8:d1c04f0e4890 208 if ( (_m1x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 209 (_m1x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 210 (_m1y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 211 (_m1y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 212 _m1 = false;
el17ttds 8:d1c04f0e4890 213 _m1x = -1;
el17ttds 8:d1c04f0e4890 214 _m1y = -1;
el17ttds 8:d1c04f0e4890 215 }
el17ttds 8:d1c04f0e4890 216 if ( (_m2x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 217 (_m2x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 218 (_m2y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 219 (_m2y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 220 _m2 = false;
el17ttds 8:d1c04f0e4890 221 _m2x = -1;
el17ttds 8:d1c04f0e4890 222 _m2y = -1;
el17ttds 8:d1c04f0e4890 223 }
el17ttds 8:d1c04f0e4890 224 if ( (_m3x <= _map_x + 42) ||
el17ttds 8:d1c04f0e4890 225 (_m3x >= _map_x + 42 + 100) ||
el17ttds 8:d1c04f0e4890 226 (_m3y <= _map_y + 24) ||
el17ttds 8:d1c04f0e4890 227 (_m3y >= _map_y + 24 + 100) ) {
el17ttds 8:d1c04f0e4890 228 _m3 = false;
el17ttds 8:d1c04f0e4890 229 _m3x = -1;
el17ttds 8:d1c04f0e4890 230 _m3y = -1;
el17ttds 8:d1c04f0e4890 231 }
el17ttds 8:d1c04f0e4890 232 }