ELEC2645 (2018/19) / Mbed 2 deprecated el17st

Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Tue Apr 23 21:46:55 2019 +0000
Revision:
8:e3a76a808a4c
Child:
9:ac396c818874
CaMove: Update to move(N5110 &lcd) function's collision detection due to issue where player could glitch out of terrain.; SceneCreator was made, it manages all scene allowing easy function changes and also contains all function to control events ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rottenegg 8:e3a76a808a4c 1 #include "SceneCreator.h"
rottenegg 8:e3a76a808a4c 2 #include "ScenePaths.h"
rottenegg 8:e3a76a808a4c 3
rottenegg 8:e3a76a808a4c 4 DigitalOut led(LED_BLUE);
rottenegg 8:e3a76a808a4c 5 Serial pc(USBTX,USBRX);
rottenegg 8:e3a76a808a4c 6
rottenegg 8:e3a76a808a4c 7 SceneCreator::SceneCreator() {
rottenegg 8:e3a76a808a4c 8
rottenegg 8:e3a76a808a4c 9 }
rottenegg 8:e3a76a808a4c 10
rottenegg 8:e3a76a808a4c 11 SceneCreator::~SceneCreator() {
rottenegg 8:e3a76a808a4c 12 /*
rottenegg 8:e3a76a808a4c 13 delete pre_func;
rottenegg 8:e3a76a808a4c 14 delete pos_func;
rottenegg 8:e3a76a808a4c 15 */
rottenegg 8:e3a76a808a4c 16 }
rottenegg 8:e3a76a808a4c 17
rottenegg 8:e3a76a808a4c 18 void SceneCreator::Scenesp(N5110 &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd) {
rottenegg 8:e3a76a808a4c 19 CM.init(spx,spy,spd);
rottenegg 8:e3a76a808a4c 20 this->set_sreg(CM,spl);
rottenegg 8:e3a76a808a4c 21 bool dead = false;
rottenegg 8:e3a76a808a4c 22 short int progress = 0;
rottenegg 8:e3a76a808a4c 23 bool p[6] = {true,true,true,true,true,true};
rottenegg 8:e3a76a808a4c 24 while(!dead) {
rottenegg 8:e3a76a808a4c 25 lcd.clear();
rottenegg 8:e3a76a808a4c 26 Bitmap::renderBMP(SCN[spl],lcd,0,0);
rottenegg 8:e3a76a808a4c 27 //-------------------------will use ifs - will do at start
rottenegg 8:e3a76a808a4c 28 if (p[0]) {
rottenegg 8:e3a76a808a4c 29 this->pre_func0(spl,lcd);
rottenegg 8:e3a76a808a4c 30 }
rottenegg 8:e3a76a808a4c 31 if (p[1]) {
rottenegg 8:e3a76a808a4c 32 this->pre_func1(spl,lcd);
rottenegg 8:e3a76a808a4c 33 }
rottenegg 8:e3a76a808a4c 34 if (p[2]) {
rottenegg 8:e3a76a808a4c 35 this->pre_func2(spl,lcd);
rottenegg 8:e3a76a808a4c 36 }
rottenegg 8:e3a76a808a4c 37 if (p[3]) {
rottenegg 8:e3a76a808a4c 38 this->pre_func3(spl,lcd);
rottenegg 8:e3a76a808a4c 39 }
rottenegg 8:e3a76a808a4c 40 if (p[4]) {
rottenegg 8:e3a76a808a4c 41 this->pre_func4(spl,lcd);
rottenegg 8:e3a76a808a4c 42 }
rottenegg 8:e3a76a808a4c 43 if (p[5]) {
rottenegg 8:e3a76a808a4c 44 this->pre_func5(spl,lcd);
rottenegg 8:e3a76a808a4c 45 }
rottenegg 8:e3a76a808a4c 46
rottenegg 8:e3a76a808a4c 47 //---------------------------------------------------
rottenegg 8:e3a76a808a4c 48 //actions from evevnts
rottenegg 8:e3a76a808a4c 49 //use no break switch case
rottenegg 8:e3a76a808a4c 50 //or if statements deciding
rottenegg 8:e3a76a808a4c 51 /*
rottenegg 8:e3a76a808a4c 52 switch(progress) {
rottenegg 8:e3a76a808a4c 53 case 5:
rottenegg 8:e3a76a808a4c 54 case 4:
rottenegg 8:e3a76a808a4c 55 case 3:
rottenegg 8:e3a76a808a4c 56 case 2:
rottenegg 8:e3a76a808a4c 57 case 1:
rottenegg 8:e3a76a808a4c 58 case 0:
rottenegg 8:e3a76a808a4c 59 }
rottenegg 8:e3a76a808a4c 60 */
rottenegg 8:e3a76a808a4c 61 //need function pointers total of maybe 12 pointers 6-immediate action and 6- post action
rottenegg 8:e3a76a808a4c 62 //for 8 scenes -- can be problem
rottenegg 8:e3a76a808a4c 63 //----------------------------------------------------
rottenegg 8:e3a76a808a4c 64
rottenegg 8:e3a76a808a4c 65 CM.move(lcd);
rottenegg 8:e3a76a808a4c 66
rottenegg 8:e3a76a808a4c 67 switch(CM.get_treg()) {
rottenegg 8:e3a76a808a4c 68 case 0:
rottenegg 8:e3a76a808a4c 69 if(p[0]) {
rottenegg 8:e3a76a808a4c 70 p[0] = false;
rottenegg 8:e3a76a808a4c 71 progress++;
rottenegg 8:e3a76a808a4c 72 }
rottenegg 8:e3a76a808a4c 73 //case 0 function
rottenegg 8:e3a76a808a4c 74 this->pos_func0(spl,lcd);
rottenegg 8:e3a76a808a4c 75 break;
rottenegg 8:e3a76a808a4c 76 case 1:
rottenegg 8:e3a76a808a4c 77 if(p[1]) {
rottenegg 8:e3a76a808a4c 78 p[1] = false;
rottenegg 8:e3a76a808a4c 79 progress++;
rottenegg 8:e3a76a808a4c 80 }
rottenegg 8:e3a76a808a4c 81 //case 1 function
rottenegg 8:e3a76a808a4c 82 this->pos_func1(spl,lcd);
rottenegg 8:e3a76a808a4c 83 break;
rottenegg 8:e3a76a808a4c 84 case 2:
rottenegg 8:e3a76a808a4c 85 if(p[2]) {
rottenegg 8:e3a76a808a4c 86 p[2] = false;
rottenegg 8:e3a76a808a4c 87 progress++;
rottenegg 8:e3a76a808a4c 88 }
rottenegg 8:e3a76a808a4c 89 //case 2 function
rottenegg 8:e3a76a808a4c 90 this->pos_func2(spl,lcd);
rottenegg 8:e3a76a808a4c 91 break;
rottenegg 8:e3a76a808a4c 92 case 3:
rottenegg 8:e3a76a808a4c 93 if(p[3]) {
rottenegg 8:e3a76a808a4c 94 p[3] = false;
rottenegg 8:e3a76a808a4c 95 progress++;
rottenegg 8:e3a76a808a4c 96 }
rottenegg 8:e3a76a808a4c 97 //case 3 function
rottenegg 8:e3a76a808a4c 98 this->pos_func3(spl,lcd);
rottenegg 8:e3a76a808a4c 99 break;
rottenegg 8:e3a76a808a4c 100 case 4:
rottenegg 8:e3a76a808a4c 101 if(p[4]) {
rottenegg 8:e3a76a808a4c 102 p[4] = false;
rottenegg 8:e3a76a808a4c 103 progress++;
rottenegg 8:e3a76a808a4c 104 }
rottenegg 8:e3a76a808a4c 105 //case 4 function
rottenegg 8:e3a76a808a4c 106 this->pos_func4(spl,lcd);
rottenegg 8:e3a76a808a4c 107 break;
rottenegg 8:e3a76a808a4c 108 case 5:
rottenegg 8:e3a76a808a4c 109 if(p[5]) {
rottenegg 8:e3a76a808a4c 110 p[5] = false;
rottenegg 8:e3a76a808a4c 111 progress++;
rottenegg 8:e3a76a808a4c 112 }
rottenegg 8:e3a76a808a4c 113 //case 5 function
rottenegg 8:e3a76a808a4c 114 this->pos_func5(spl,lcd);
rottenegg 8:e3a76a808a4c 115 break;
rottenegg 8:e3a76a808a4c 116 };
rottenegg 8:e3a76a808a4c 117 lcd.refresh();
rottenegg 8:e3a76a808a4c 118 wait(0.1);
rottenegg 8:e3a76a808a4c 119 };
rottenegg 8:e3a76a808a4c 120 CM.delete_regions();
rottenegg 8:e3a76a808a4c 121 };
rottenegg 8:e3a76a808a4c 122
rottenegg 8:e3a76a808a4c 123 void SceneCreator::set_sreg(CaMove &CM,int sce) {
rottenegg 8:e3a76a808a4c 124 switch(sce) {
rottenegg 8:e3a76a808a4c 125 case 0:
rottenegg 8:e3a76a808a4c 126 CM.set_region(71, 31, 10, 14); // case 0 - cause event 0
rottenegg 8:e3a76a808a4c 127 CM.set_region(4, 21, 5, 24); // case 1
rottenegg 8:e3a76a808a4c 128 break;
rottenegg 8:e3a76a808a4c 129 case 1:
rottenegg 8:e3a76a808a4c 130 break;
rottenegg 8:e3a76a808a4c 131 case 2:
rottenegg 8:e3a76a808a4c 132 break;
rottenegg 8:e3a76a808a4c 133 case 3:
rottenegg 8:e3a76a808a4c 134 break;
rottenegg 8:e3a76a808a4c 135 case 4:
rottenegg 8:e3a76a808a4c 136 break;
rottenegg 8:e3a76a808a4c 137 }
rottenegg 8:e3a76a808a4c 138 }
rottenegg 8:e3a76a808a4c 139
rottenegg 8:e3a76a808a4c 140 //Function Pointers Failing mbed in-capable
rottenegg 8:e3a76a808a4c 141 //pre-func
rottenegg 8:e3a76a808a4c 142 void SceneCreator::pre_func0(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 143 switch(sce) {
rottenegg 8:e3a76a808a4c 144 case 0:
rottenegg 8:e3a76a808a4c 145 lcd.drawRect(5,2,18,2,FILL_BLACK);
rottenegg 8:e3a76a808a4c 146 break;
rottenegg 8:e3a76a808a4c 147 case 1:
rottenegg 8:e3a76a808a4c 148 break;
rottenegg 8:e3a76a808a4c 149 case 2:
rottenegg 8:e3a76a808a4c 150 break;
rottenegg 8:e3a76a808a4c 151 case 3:
rottenegg 8:e3a76a808a4c 152 break;
rottenegg 8:e3a76a808a4c 153 case 4:
rottenegg 8:e3a76a808a4c 154 break;
rottenegg 8:e3a76a808a4c 155 }
rottenegg 8:e3a76a808a4c 156 }
rottenegg 8:e3a76a808a4c 157
rottenegg 8:e3a76a808a4c 158 void SceneCreator::pre_func1(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 159 switch(sce) {
rottenegg 8:e3a76a808a4c 160 case 0:
rottenegg 8:e3a76a808a4c 161 break;
rottenegg 8:e3a76a808a4c 162 case 1:
rottenegg 8:e3a76a808a4c 163 break;
rottenegg 8:e3a76a808a4c 164 case 2:
rottenegg 8:e3a76a808a4c 165 break;
rottenegg 8:e3a76a808a4c 166 case 3:
rottenegg 8:e3a76a808a4c 167 break;
rottenegg 8:e3a76a808a4c 168 case 4:
rottenegg 8:e3a76a808a4c 169 break;
rottenegg 8:e3a76a808a4c 170 }
rottenegg 8:e3a76a808a4c 171 }
rottenegg 8:e3a76a808a4c 172
rottenegg 8:e3a76a808a4c 173 void SceneCreator::pre_func2(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 174 switch(sce) {
rottenegg 8:e3a76a808a4c 175 case 0:
rottenegg 8:e3a76a808a4c 176 break;
rottenegg 8:e3a76a808a4c 177 case 1:
rottenegg 8:e3a76a808a4c 178 break;
rottenegg 8:e3a76a808a4c 179 case 2:
rottenegg 8:e3a76a808a4c 180 break;
rottenegg 8:e3a76a808a4c 181 case 3:
rottenegg 8:e3a76a808a4c 182 break;
rottenegg 8:e3a76a808a4c 183 case 4:
rottenegg 8:e3a76a808a4c 184 break;
rottenegg 8:e3a76a808a4c 185 }
rottenegg 8:e3a76a808a4c 186 }
rottenegg 8:e3a76a808a4c 187
rottenegg 8:e3a76a808a4c 188 void SceneCreator::pre_func3(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 189 switch(sce) {
rottenegg 8:e3a76a808a4c 190 case 0:
rottenegg 8:e3a76a808a4c 191 break;
rottenegg 8:e3a76a808a4c 192 case 1:
rottenegg 8:e3a76a808a4c 193 break;
rottenegg 8:e3a76a808a4c 194 case 2:
rottenegg 8:e3a76a808a4c 195 break;
rottenegg 8:e3a76a808a4c 196 case 3:
rottenegg 8:e3a76a808a4c 197 break;
rottenegg 8:e3a76a808a4c 198 case 4:
rottenegg 8:e3a76a808a4c 199 break;
rottenegg 8:e3a76a808a4c 200 }
rottenegg 8:e3a76a808a4c 201 }
rottenegg 8:e3a76a808a4c 202
rottenegg 8:e3a76a808a4c 203 void SceneCreator::pre_func4(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 204 switch(sce) {
rottenegg 8:e3a76a808a4c 205 case 0:
rottenegg 8:e3a76a808a4c 206 break;
rottenegg 8:e3a76a808a4c 207 case 1:
rottenegg 8:e3a76a808a4c 208 break;
rottenegg 8:e3a76a808a4c 209 case 2:
rottenegg 8:e3a76a808a4c 210 break;
rottenegg 8:e3a76a808a4c 211 case 3:
rottenegg 8:e3a76a808a4c 212 break;
rottenegg 8:e3a76a808a4c 213 case 4:
rottenegg 8:e3a76a808a4c 214 break;
rottenegg 8:e3a76a808a4c 215 }
rottenegg 8:e3a76a808a4c 216 }
rottenegg 8:e3a76a808a4c 217
rottenegg 8:e3a76a808a4c 218 void SceneCreator::pre_func5(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 219 switch(sce) {
rottenegg 8:e3a76a808a4c 220 case 0:
rottenegg 8:e3a76a808a4c 221 break;
rottenegg 8:e3a76a808a4c 222 case 1:
rottenegg 8:e3a76a808a4c 223 break;
rottenegg 8:e3a76a808a4c 224 case 2:
rottenegg 8:e3a76a808a4c 225 break;
rottenegg 8:e3a76a808a4c 226 case 3:
rottenegg 8:e3a76a808a4c 227 break;
rottenegg 8:e3a76a808a4c 228 case 4:
rottenegg 8:e3a76a808a4c 229 break;
rottenegg 8:e3a76a808a4c 230 }
rottenegg 8:e3a76a808a4c 231 }
rottenegg 8:e3a76a808a4c 232 //pos func
rottenegg 8:e3a76a808a4c 233
rottenegg 8:e3a76a808a4c 234 void SceneCreator::pos_func0(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 235 switch(sce) {
rottenegg 8:e3a76a808a4c 236 case 0:
rottenegg 8:e3a76a808a4c 237 this->speak(lcd);
rottenegg 8:e3a76a808a4c 238 break;
rottenegg 8:e3a76a808a4c 239 case 1:
rottenegg 8:e3a76a808a4c 240 break;
rottenegg 8:e3a76a808a4c 241 case 2:
rottenegg 8:e3a76a808a4c 242 break;
rottenegg 8:e3a76a808a4c 243 case 3:
rottenegg 8:e3a76a808a4c 244 break;
rottenegg 8:e3a76a808a4c 245 case 4:
rottenegg 8:e3a76a808a4c 246 break;
rottenegg 8:e3a76a808a4c 247 }
rottenegg 8:e3a76a808a4c 248 }
rottenegg 8:e3a76a808a4c 249
rottenegg 8:e3a76a808a4c 250 void SceneCreator::pos_func1(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 251 switch(sce) {
rottenegg 8:e3a76a808a4c 252 case 0:
rottenegg 8:e3a76a808a4c 253 this->speak2(lcd);
rottenegg 8:e3a76a808a4c 254 break;
rottenegg 8:e3a76a808a4c 255 case 1:
rottenegg 8:e3a76a808a4c 256 break;
rottenegg 8:e3a76a808a4c 257 case 2:
rottenegg 8:e3a76a808a4c 258 break;
rottenegg 8:e3a76a808a4c 259 case 3:
rottenegg 8:e3a76a808a4c 260 break;
rottenegg 8:e3a76a808a4c 261 case 4:
rottenegg 8:e3a76a808a4c 262 break;
rottenegg 8:e3a76a808a4c 263 }
rottenegg 8:e3a76a808a4c 264 }
rottenegg 8:e3a76a808a4c 265
rottenegg 8:e3a76a808a4c 266 void SceneCreator::pos_func2(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 267 switch(sce) {
rottenegg 8:e3a76a808a4c 268 case 0:
rottenegg 8:e3a76a808a4c 269 break;
rottenegg 8:e3a76a808a4c 270 case 1:
rottenegg 8:e3a76a808a4c 271 break;
rottenegg 8:e3a76a808a4c 272 case 2:
rottenegg 8:e3a76a808a4c 273 break;
rottenegg 8:e3a76a808a4c 274 case 3:
rottenegg 8:e3a76a808a4c 275 break;
rottenegg 8:e3a76a808a4c 276 case 4:
rottenegg 8:e3a76a808a4c 277 break;
rottenegg 8:e3a76a808a4c 278 }
rottenegg 8:e3a76a808a4c 279 }
rottenegg 8:e3a76a808a4c 280
rottenegg 8:e3a76a808a4c 281
rottenegg 8:e3a76a808a4c 282 void SceneCreator::pos_func3(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 283 switch(sce) {
rottenegg 8:e3a76a808a4c 284 case 0:
rottenegg 8:e3a76a808a4c 285 break;
rottenegg 8:e3a76a808a4c 286 case 1:
rottenegg 8:e3a76a808a4c 287 break;
rottenegg 8:e3a76a808a4c 288 case 2:
rottenegg 8:e3a76a808a4c 289 break;
rottenegg 8:e3a76a808a4c 290 case 3:
rottenegg 8:e3a76a808a4c 291 break;
rottenegg 8:e3a76a808a4c 292 case 4:
rottenegg 8:e3a76a808a4c 293 break;
rottenegg 8:e3a76a808a4c 294 }
rottenegg 8:e3a76a808a4c 295 }
rottenegg 8:e3a76a808a4c 296
rottenegg 8:e3a76a808a4c 297 void SceneCreator::pos_func4(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 298 switch(sce) {
rottenegg 8:e3a76a808a4c 299 case 0:
rottenegg 8:e3a76a808a4c 300 break;
rottenegg 8:e3a76a808a4c 301 case 1:
rottenegg 8:e3a76a808a4c 302 break;
rottenegg 8:e3a76a808a4c 303 case 2:
rottenegg 8:e3a76a808a4c 304 break;
rottenegg 8:e3a76a808a4c 305 case 3:
rottenegg 8:e3a76a808a4c 306 break;
rottenegg 8:e3a76a808a4c 307 case 4:
rottenegg 8:e3a76a808a4c 308 break;
rottenegg 8:e3a76a808a4c 309 }
rottenegg 8:e3a76a808a4c 310 }
rottenegg 8:e3a76a808a4c 311
rottenegg 8:e3a76a808a4c 312 void SceneCreator::pos_func5(int sce,N5110 &lcd) {
rottenegg 8:e3a76a808a4c 313 switch(sce) {
rottenegg 8:e3a76a808a4c 314 case 0:
rottenegg 8:e3a76a808a4c 315 break;
rottenegg 8:e3a76a808a4c 316 case 1:
rottenegg 8:e3a76a808a4c 317 break;
rottenegg 8:e3a76a808a4c 318 case 2:
rottenegg 8:e3a76a808a4c 319 break;
rottenegg 8:e3a76a808a4c 320 case 3:
rottenegg 8:e3a76a808a4c 321 break;
rottenegg 8:e3a76a808a4c 322 case 4:
rottenegg 8:e3a76a808a4c 323 break;
rottenegg 8:e3a76a808a4c 324 }
rottenegg 8:e3a76a808a4c 325 }
rottenegg 8:e3a76a808a4c 326
rottenegg 8:e3a76a808a4c 327 //global
rottenegg 8:e3a76a808a4c 328
rottenegg 8:e3a76a808a4c 329 void SceneCreator::trans(N5110 &lcd) {
rottenegg 8:e3a76a808a4c 330 for (int i = 0;i < 84;i++) {
rottenegg 8:e3a76a808a4c 331 lcd.drawRect(0,0,i,48,FILL_BLACK);
rottenegg 8:e3a76a808a4c 332 lcd.refresh();
rottenegg 8:e3a76a808a4c 333 }
rottenegg 8:e3a76a808a4c 334 for (int i = 0;i < 84;i++) {
rottenegg 8:e3a76a808a4c 335 lcd.drawRect(0,0,i,48,FILL_WHITE);
rottenegg 8:e3a76a808a4c 336 lcd.refresh();
rottenegg 8:e3a76a808a4c 337 }
rottenegg 8:e3a76a808a4c 338 }
rottenegg 8:e3a76a808a4c 339
rottenegg 8:e3a76a808a4c 340
rottenegg 8:e3a76a808a4c 341 //unique to scene functions
rottenegg 8:e3a76a808a4c 342 //scne 0 - event 0
rottenegg 8:e3a76a808a4c 343 void SceneCreator::speak(N5110 &lcd) {
rottenegg 8:e3a76a808a4c 344 this->trans(lcd);
rottenegg 8:e3a76a808a4c 345 lcd.clear();
rottenegg 8:e3a76a808a4c 346 lcd.printString("Hello my name",0,0);
rottenegg 8:e3a76a808a4c 347 lcd.printString("Veigar i shall",0,1);
rottenegg 8:e3a76a808a4c 348 lcd.printString("Help you ...",0,2);
rottenegg 8:e3a76a808a4c 349 lcd.printString("find what you",0,3);
rottenegg 8:e3a76a808a4c 350 lcd.printString("seek. now go..",0,4);
rottenegg 8:e3a76a808a4c 351 lcd.refresh();
rottenegg 8:e3a76a808a4c 352 wait(1);
rottenegg 8:e3a76a808a4c 353 this->trans(lcd);
rottenegg 8:e3a76a808a4c 354 }
rottenegg 8:e3a76a808a4c 355 //event 1
rottenegg 8:e3a76a808a4c 356 void SceneCreator::speak2(N5110 &lcd) {
rottenegg 8:e3a76a808a4c 357 this->trans(lcd);
rottenegg 8:e3a76a808a4c 358 lcd.clear();
rottenegg 8:e3a76a808a4c 359 lcd.printString("its a lamp",0,0);
rottenegg 8:e3a76a808a4c 360 lcd.printString("quite eerie",0,1);
rottenegg 8:e3a76a808a4c 361 lcd.refresh();
rottenegg 8:e3a76a808a4c 362 wait(1);
rottenegg 8:e3a76a808a4c 363 this->trans(lcd);
rottenegg 8:e3a76a808a4c 364 }
rottenegg 8:e3a76a808a4c 365
rottenegg 8:e3a76a808a4c 366