ELEC2645 (2018/19) / Mbed 2 deprecated el17st

Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Wed May 08 02:45:11 2019 +0000
Revision:
19:065207c07c3c
Parent:
18:14e5391beccf
Child:
20:01efa2bce75d
SceneCreator 20 lines per Function Criteria met

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