ELEC2645 (2018/19) / Mbed 2 deprecated el17st

Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Thu May 09 06:22:53 2019 +0000
Revision:
21:f3b0ce18b44f
Parent:
20:01efa2bce75d
Child:
26:716bcd47f3ca
Game_Manager: 20 lines per Function Achevied; Documentation Updated along with Inline Comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rottenegg 4:34bf3587cf42 1 #include "CaMove.h"
rottenegg 8:e3a76a808a4c 2 #include "AniPaths.h"
rottenegg 18:14e5391beccf 3
rottenegg 21:f3b0ce18b44f 4 Serial f(USBTX,USBRX);
rottenegg 21:f3b0ce18b44f 5
rottenegg 5:860087ff295e 6 //Constructor
rottenegg 5:860087ff295e 7 CaMove::CaMove(PinName Button,
rottenegg 5:860087ff295e 8 PinName Pot_h,
rottenegg 5:860087ff295e 9 PinName Pot_v)
rottenegg 5:860087ff295e 10 : //Creating Class Objects
rottenegg 5:860087ff295e 11 _check(new InterruptIn(Button)),
rottenegg 5:860087ff295e 12 _hoz(new AnalogIn(Pot_h)),
rottenegg 5:860087ff295e 13 _ver(new AnalogIn(Pot_v))
rottenegg 5:860087ff295e 14 {
rottenegg 5:860087ff295e 15 _check->mode(PullDown);
rottenegg 5:860087ff295e 16 _check->rise(callback(this,&CaMove::intercheck));
rottenegg 4:34bf3587cf42 17 };
rottenegg 18:14e5391beccf 18
rottenegg 5:860087ff295e 19 //Destructor
rottenegg 4:34bf3587cf42 20 CaMove::~CaMove() {
rottenegg 5:860087ff295e 21 delete _check;
rottenegg 5:860087ff295e 22 delete _hoz;
rottenegg 5:860087ff295e 23 delete _ver;
rottenegg 4:34bf3587cf42 24 };
rottenegg 4:34bf3587cf42 25
rottenegg 21:f3b0ce18b44f 26 //Initilizing Functions
rottenegg 21:f3b0ce18b44f 27 //Player
rottenegg 5:860087ff295e 28 void CaMove::init(int x,int y,Direction D) {
rottenegg 5:860087ff295e 29 _h = x;
rottenegg 5:860087ff295e 30 _v = y;
rottenegg 5:860087ff295e 31 _itr = 0;
rottenegg 5:860087ff295e 32 _fc = D;
rottenegg 5:860087ff295e 33 _trg = false;
rottenegg 5:860087ff295e 34 _treg = -1;
rottenegg 5:860087ff295e 35 };
rottenegg 5:860087ff295e 36
rottenegg 21:f3b0ce18b44f 37 //AI Chasers
rottenegg 21:f3b0ce18b44f 38 void CaMove::AIinit(int chaser) {
rottenegg 21:f3b0ce18b44f 39 enabled = false;
rottenegg 21:f3b0ce18b44f 40 _ch = 0;
rottenegg 21:f3b0ce18b44f 41 _cv = 0;
rottenegg 21:f3b0ce18b44f 42 switch (chaser) {
rottenegg 21:f3b0ce18b44f 43 case 2:
rottenegg 21:f3b0ce18b44f 44 increment = 2;
rottenegg 21:f3b0ce18b44f 45 break;
rottenegg 21:f3b0ce18b44f 46 case 1:
rottenegg 21:f3b0ce18b44f 47 increment = 0;
rottenegg 21:f3b0ce18b44f 48 break;
rottenegg 21:f3b0ce18b44f 49 case 4:
rottenegg 21:f3b0ce18b44f 50 increment = 5;
rottenegg 21:f3b0ce18b44f 51 break;
rottenegg 21:f3b0ce18b44f 52 default:
rottenegg 21:f3b0ce18b44f 53 increment = 3;
rottenegg 21:f3b0ce18b44f 54 break;
rottenegg 21:f3b0ce18b44f 55 }
rottenegg 21:f3b0ce18b44f 56 };
rottenegg 21:f3b0ce18b44f 57
rottenegg 21:f3b0ce18b44f 58 //Player Functions
rottenegg 21:f3b0ce18b44f 59
rottenegg 17:7d4d8905b608 60 void CaMove::move(Bitmap &lcd) {
rottenegg 5:860087ff295e 61 //If statements to check joystick movement and has in bluilt collsion detection
rottenegg 5:860087ff295e 62 //collsion detection check 4 sides for black pixels
rottenegg 21:f3b0ce18b44f 63 bool left = (lcd.getPixel((_h-1),(_v+12)) == 0 && lcd.getPixel((_h-1),(_v+1)) == 0) ;
rottenegg 21:f3b0ce18b44f 64 bool right = (lcd.getPixel((_h+10),(_v+12)) == 0 && lcd.getPixel((_h+10),(_v+1)) == 0);
rottenegg 21:f3b0ce18b44f 65 bool down = (lcd.getPixel((_h+1),(_v-1)) == 0 && lcd.getPixel((_h+8),(_v-1)) == 0);
rottenegg 21:f3b0ce18b44f 66 bool up = (lcd.getPixel((_h+1),(_v+14)) == 0 && lcd.getPixel((_h+8),(_v+14)) == 0);
rottenegg 21:f3b0ce18b44f 67 this->check_collision(left,right,down,up);
rottenegg 18:14e5391beccf 68 if (_itr == 3) {
rottenegg 18:14e5391beccf 69 _itr = -1;
rottenegg 18:14e5391beccf 70 }
rottenegg 18:14e5391beccf 71 _itr++;
rottenegg 18:14e5391beccf 72 this->rend(lcd);
rottenegg 18:14e5391beccf 73 }
rottenegg 21:f3b0ce18b44f 74
rottenegg 21:f3b0ce18b44f 75 bool CaMove::in_screen() {
rottenegg 21:f3b0ce18b44f 76 if (_h + 5 >= 84 || (_h + 5) <= 0 || _v + 7 >= 48 || (_v + 8) <= 0) {
rottenegg 21:f3b0ce18b44f 77 return false;
rottenegg 21:f3b0ce18b44f 78 } else {
rottenegg 21:f3b0ce18b44f 79 return true;
rottenegg 21:f3b0ce18b44f 80 }
rottenegg 21:f3b0ce18b44f 81 };
rottenegg 21:f3b0ce18b44f 82
rottenegg 21:f3b0ce18b44f 83 //Aiding Player Functions
rottenegg 21:f3b0ce18b44f 84
rottenegg 21:f3b0ce18b44f 85 void CaMove::check_collision(bool left,bool right,bool down,bool up) {
rottenegg 21:f3b0ce18b44f 86 //Checks Input on Joystick and Verifies if charater can move in that direction
rottenegg 21:f3b0ce18b44f 87 if (_hoz->read() > 0.6f && left) {
rottenegg 4:34bf3587cf42 88 _h = _h - 2;
rottenegg 5:860087ff295e 89 _fc = Lt;
rottenegg 4:34bf3587cf42 90 }
rottenegg 21:f3b0ce18b44f 91 if (_hoz->read() < 0.4f && right) {
rottenegg 4:34bf3587cf42 92 _h = _h + 2;
rottenegg 5:860087ff295e 93 _fc = Rt;
rottenegg 4:34bf3587cf42 94 }
rottenegg 21:f3b0ce18b44f 95 if (_ver->read() > 0.6f && down) {
rottenegg 4:34bf3587cf42 96 _v = _v - 2;
rottenegg 5:860087ff295e 97 _fc = Fd;
rottenegg 4:34bf3587cf42 98 }
rottenegg 21:f3b0ce18b44f 99 if (_ver->read() < 0.4f && up) {
rottenegg 4:34bf3587cf42 100 _v = _v + 2;
rottenegg 5:860087ff295e 101 _fc = Bd;
rottenegg 18:14e5391beccf 102 }
rottenegg 9:ac396c818874 103 }
rottenegg 9:ac396c818874 104
rottenegg 17:7d4d8905b608 105 void CaMove::rend(Bitmap &lcd) {
rottenegg 5:860087ff295e 106 //Switch case allows charater to move diagonally and retains its facing direction when stationary
rottenegg 5:860087ff295e 107 switch (_fc) {
rottenegg 4:34bf3587cf42 108 case Lt:
rottenegg 21:f3b0ce18b44f 109 lcd.renderBMP(L[_itr],_h,_v); //render Charater on Screen
rottenegg 21:f3b0ce18b44f 110 break;
rottenegg 4:34bf3587cf42 111 case Rt:
rottenegg 17:7d4d8905b608 112 lcd.renderBMP(R[_itr],_h,_v);
rottenegg 4:34bf3587cf42 113 break;
rottenegg 4:34bf3587cf42 114 case Fd:
rottenegg 17:7d4d8905b608 115 lcd.renderBMP(F[_itr],_h,_v);
rottenegg 4:34bf3587cf42 116 break;
rottenegg 4:34bf3587cf42 117 case Bd:
rottenegg 17:7d4d8905b608 118 lcd.renderBMP(B[_itr],_h,_v);
rottenegg 4:34bf3587cf42 119 break;
rottenegg 4:34bf3587cf42 120 }
rottenegg 4:34bf3587cf42 121 };
rottenegg 4:34bf3587cf42 122
rottenegg 21:f3b0ce18b44f 123 //Interactive Region Function pack
rottenegg 21:f3b0ce18b44f 124 //Setting regions
rottenegg 21:f3b0ce18b44f 125 void CaMove::set_region(int xmin, int ymin, int xl, int yl) { //Sets values into vector
rottenegg 5:860087ff295e 126 _vreg.push_back((xmin + xl));
rottenegg 5:860087ff295e 127 _vreg.push_back(xmin);
rottenegg 5:860087ff295e 128 _vreg.push_back((ymin + yl));
rottenegg 5:860087ff295e 129 _vreg.push_back(ymin);
rottenegg 4:34bf3587cf42 130 };
rottenegg 4:34bf3587cf42 131
rottenegg 4:34bf3587cf42 132 void CaMove::delete_regions() {
rottenegg 5:860087ff295e 133 _vreg.clear();
rottenegg 4:34bf3587cf42 134 };
rottenegg 4:34bf3587cf42 135
rottenegg 21:f3b0ce18b44f 136 //Interupting Function
rottenegg 4:34bf3587cf42 137 void CaMove::intercheck() {
rottenegg 21:f3b0ce18b44f 138 _trg = false; //reset everytime called
rottenegg 18:14e5391beccf 139 LowerH = false;
rottenegg 18:14e5391beccf 140 UpperH = false;
rottenegg 18:14e5391beccf 141 MidH = false;
rottenegg 18:14e5391beccf 142 LowerV = false;
rottenegg 18:14e5391beccf 143 UpperV = false;
rottenegg 18:14e5391beccf 144 MidV = false;
rottenegg 21:f3b0ce18b44f 145 if (_vreg.size() > 0) { //checks all regions for vector
rottenegg 5:860087ff295e 146 for(int Vvalue = 0; Vvalue < _vreg.size(); Vvalue = Vvalue +4) {
rottenegg 21:f3b0ce18b44f 147 this->set_statements(Vvalue); //returns checked regions if in an Region
rottenegg 21:f3b0ce18b44f 148 this->check_sides(Vvalue); //focuses on regions in facing direction
rottenegg 4:34bf3587cf42 149 }
rottenegg 4:34bf3587cf42 150 }
rottenegg 5:860087ff295e 151 };
rottenegg 18:14e5391beccf 152
rottenegg 21:f3b0ce18b44f 153
rottenegg 21:f3b0ce18b44f 154 //Internal Functions
rottenegg 21:f3b0ce18b44f 155 void CaMove::set_statements(int Vvalue) {
rottenegg 21:f3b0ce18b44f 156 //If Statements check that sides position with all x- y region ranges to see if charater has hit that region.
rottenegg 21:f3b0ce18b44f 157 LowerH = (_h - 1) <= _vreg[Vvalue] && (_h-1) >= _vreg[Vvalue + 1];
rottenegg 21:f3b0ce18b44f 158 UpperH = (_h + 10) <= _vreg[Vvalue] && (_h + 10) >= _vreg[Vvalue + 1];
rottenegg 21:f3b0ce18b44f 159 MidH = (_h + 5) <= _vreg[Vvalue] && (_h + 5) >= _vreg[Vvalue + 1];
rottenegg 21:f3b0ce18b44f 160 LowerV = (_v - 1) >= _vreg[Vvalue + 3] && (_v - 1) <= _vreg[Vvalue + 2];
rottenegg 21:f3b0ce18b44f 161 UpperV = (_v+14) >= _vreg[Vvalue + 3] && (_v + 14) <= _vreg[Vvalue + 2];
rottenegg 21:f3b0ce18b44f 162 MidV = (_v+7) >= _vreg[Vvalue + 3] && (_v + 7) <= _vreg[Vvalue + 2];
rottenegg 21:f3b0ce18b44f 163 }
rottenegg 21:f3b0ce18b44f 164
rottenegg 18:14e5391beccf 165 void CaMove::check_sides(int Vvalue) {
rottenegg 18:14e5391beccf 166 switch (_fc) { //Function only will check the facing side for interative regions
rottenegg 18:14e5391beccf 167 case Lt: //L
rottenegg 18:14e5391beccf 168 if (LowerH && MidV) {
rottenegg 21:f3b0ce18b44f 169 this->set_treg(Vvalue); //returns region number
rottenegg 18:14e5391beccf 170 };
rottenegg 18:14e5391beccf 171 break;
rottenegg 18:14e5391beccf 172 case Rt: //R
rottenegg 18:14e5391beccf 173 if (UpperH && MidV) {
rottenegg 18:14e5391beccf 174 this->set_treg(Vvalue);
rottenegg 18:14e5391beccf 175 }
rottenegg 18:14e5391beccf 176 break;
rottenegg 18:14e5391beccf 177 case Fd: //F
rottenegg 18:14e5391beccf 178 if (MidH && LowerV) {
rottenegg 18:14e5391beccf 179 this->set_treg(Vvalue);
rottenegg 18:14e5391beccf 180 }
rottenegg 18:14e5391beccf 181 break;
rottenegg 18:14e5391beccf 182 case Bd: //B
rottenegg 18:14e5391beccf 183 if (MidH && UpperV) {
rottenegg 18:14e5391beccf 184 this->set_treg(Vvalue);
rottenegg 18:14e5391beccf 185 }
rottenegg 18:14e5391beccf 186 break;
rottenegg 18:14e5391beccf 187 }
rottenegg 18:14e5391beccf 188 }
rottenegg 18:14e5391beccf 189
rottenegg 21:f3b0ce18b44f 190 //Aiding Functions
rottenegg 21:f3b0ce18b44f 191
rottenegg 18:14e5391beccf 192 void CaMove::set_treg(int Vvalue) {
rottenegg 18:14e5391beccf 193 //The region number is found depending on its position in the vector
rottenegg 18:14e5391beccf 194 //e.g elements 0 to 3 are in region 0 and elements 4 to 7 are in region 1
rottenegg 18:14e5391beccf 195 _trg = true;
rottenegg 18:14e5391beccf 196 _treg = Vvalue / 4;
rottenegg 18:14e5391beccf 197 }
rottenegg 18:14e5391beccf 198
rottenegg 21:f3b0ce18b44f 199 //Accessors
rottenegg 18:14e5391beccf 200
rottenegg 5:860087ff295e 201 //Functions revert to default values evrytime they are called.
rottenegg 21:f3b0ce18b44f 202 bool CaMove::is_trg() {
rottenegg 5:860087ff295e 203 bool temp = _trg;
rottenegg 5:860087ff295e 204 _trg = false;
rottenegg 4:34bf3587cf42 205 return temp;
rottenegg 4:34bf3587cf42 206
rottenegg 4:34bf3587cf42 207 };
rottenegg 5:860087ff295e 208
rottenegg 5:860087ff295e 209 int CaMove::get_treg() {
rottenegg 5:860087ff295e 210 int temp = _treg;
rottenegg 5:860087ff295e 211 _treg = -1;
rottenegg 5:860087ff295e 212 return temp;
rottenegg 5:860087ff295e 213 }
rottenegg 5:860087ff295e 214
rottenegg 21:f3b0ce18b44f 215
rottenegg 18:14e5391beccf 216
rottenegg 21:f3b0ce18b44f 217 //Chaser Functions
rottenegg 21:f3b0ce18b44f 218
rottenegg 21:f3b0ce18b44f 219 void CaMove::spawn(int x, int y) { //Chaser Appears
rottenegg 18:14e5391beccf 220 enabled = true;
rottenegg 18:14e5391beccf 221 _ch = x;
rottenegg 18:14e5391beccf 222 _cv = y;
rottenegg 18:14e5391beccf 223 }
rottenegg 18:14e5391beccf 224
rottenegg 21:f3b0ce18b44f 225
rottenegg 21:f3b0ce18b44f 226 bool CaMove::is_caught() {
rottenegg 21:f3b0ce18b44f 227 if (abs(_ch - _h) < 10 && abs(_cv - _v) < 14 && enabled) {
rottenegg 21:f3b0ce18b44f 228 return true;
rottenegg 21:f3b0ce18b44f 229 } else {
rottenegg 21:f3b0ce18b44f 230 return false;
rottenegg 21:f3b0ce18b44f 231 }
rottenegg 21:f3b0ce18b44f 232 }
rottenegg 21:f3b0ce18b44f 233
rottenegg 20:01efa2bce75d 234 void CaMove::chase(Bitmap &lcd, int girl) {
rottenegg 9:ac396c818874 235 if (enabled) {
rottenegg 9:ac396c818874 236 if (_cv < _v) {
rottenegg 10:4fda7b01484a 237 _cv = _cv + increment;
rottenegg 9:ac396c818874 238 } else if (_cv > _v) {
rottenegg 10:4fda7b01484a 239 _cv = _cv - increment;
rottenegg 13:95323e0f2fcb 240 }
rottenegg 13:95323e0f2fcb 241 if (_ch < _h) {
rottenegg 13:95323e0f2fcb 242 _ch = _ch + increment;
rottenegg 15:3d29fb195958 243 } else if (_ch > _h) {
rottenegg 13:95323e0f2fcb 244 _ch = _ch - increment;
rottenegg 9:ac396c818874 245 }
rottenegg 20:01efa2bce75d 246 this->render_chaser(lcd,girl);
rottenegg 18:14e5391beccf 247 }
rottenegg 18:14e5391beccf 248 }
rottenegg 18:14e5391beccf 249
rottenegg 21:f3b0ce18b44f 250 //Internal Functions
rottenegg 21:f3b0ce18b44f 251
rottenegg 18:14e5391beccf 252 void CaMove::render_chaser(Bitmap &lcd,int chaser) {
rottenegg 18:14e5391beccf 253 switch (chaser) {
rottenegg 18:14e5391beccf 254 case 2:
rottenegg 18:14e5391beccf 255 lcd.renderBMP(AIC[_itr],_ch,_cv);
rottenegg 18:14e5391beccf 256 break;
rottenegg 18:14e5391beccf 257 case 4:
rottenegg 18:14e5391beccf 258 lcd.renderBMP(AIC[_itr],_ch,_cv); // change later
rottenegg 18:14e5391beccf 259 break;
rottenegg 18:14e5391beccf 260 default:
rottenegg 18:14e5391beccf 261 lcd.renderBMP(AIM[_itr],_ch,_cv);
rottenegg 18:14e5391beccf 262 break;
rottenegg 9:ac396c818874 263 }
rottenegg 21:f3b0ce18b44f 264 }