Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Sun May 05 19:32:58 2019 +0000
Revision:
12:ff8d26124c38
Parent:
11:7f3e9bc7366d
Child:
13:95323e0f2fcb
WDplayer: New ISR Pause and Resume Functions and allocated ISR memory reduced to 4KB.; SceneCreator: Engine Split into two CORES, Integrated Background Music, Dynamic Fram eRate to reduce Lag feel due to a constant wait time

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 12:ff8d26124c38 4 Timer dynatime;
rottenegg 12:ff8d26124c38 5
rottenegg 8:e3a76a808a4c 6 DigitalOut led(LED_BLUE);
rottenegg 8:e3a76a808a4c 7 Serial pc(USBTX,USBRX);
rottenegg 12:ff8d26124c38 8
rottenegg 9:ac396c818874 9 SceneCreator::SceneCreator(PinName Button) {
rottenegg 9:ac396c818874 10 this->set_buttonPin(Button);
rottenegg 9:ac396c818874 11 dead = false;
rottenegg 8:e3a76a808a4c 12
rottenegg 8:e3a76a808a4c 13 }
rottenegg 8:e3a76a808a4c 14
rottenegg 8:e3a76a808a4c 15 SceneCreator::~SceneCreator() {
rottenegg 9:ac396c818874 16 this->deletebutton();
rottenegg 8:e3a76a808a4c 17 }
rottenegg 8:e3a76a808a4c 18
rottenegg 12:ff8d26124c38 19 void SceneCreator::Scenesp(N5110 &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd, int rng,WDplayer &wav) {
rottenegg 12:ff8d26124c38 20 wav.ISRset();
rottenegg 8:e3a76a808a4c 21 CM.init(spx,spy,spd);
rottenegg 10:4fda7b01484a 22 CM.AIinit();
rottenegg 10:4fda7b01484a 23 lcd.normalMode();
rottenegg 8:e3a76a808a4c 24 this->set_sreg(CM,spl);
rottenegg 8:e3a76a808a4c 25 bool p[6] = {true,true,true,true,true,true};
rottenegg 9:ac396c818874 26 while(!dead && CM.in_screen()) {
rottenegg 12:ff8d26124c38 27 dynatime.start();
rottenegg 8:e3a76a808a4c 28 lcd.clear();
rottenegg 12:ff8d26124c38 29 wav.ISRpreload();
rottenegg 8:e3a76a808a4c 30 Bitmap::renderBMP(SCN[spl],lcd,0,0);
rottenegg 12:ff8d26124c38 31 //CORE_1
rottenegg 12:ff8d26124c38 32 this->Core_1(lcd, CM,spl,rng,p);
rottenegg 12:ff8d26124c38 33 CM.move(lcd);
rottenegg 12:ff8d26124c38 34 CM.chase(lcd,spl);
rottenegg 12:ff8d26124c38 35 wav.ISRpreload();
rottenegg 12:ff8d26124c38 36 //CORE_2
rottenegg 12:ff8d26124c38 37 this->Core_2(lcd, CM,spl,rng,p,wav);
rottenegg 12:ff8d26124c38 38 if (CM.is_caught()) {
rottenegg 12:ff8d26124c38 39 dead = true;
rottenegg 12:ff8d26124c38 40 }
rottenegg 12:ff8d26124c38 41 lcd.refresh();
rottenegg 12:ff8d26124c38 42 dynatime.stop();
rottenegg 12:ff8d26124c38 43 float waittime = 0.15f - dynatime.read();
rottenegg 12:ff8d26124c38 44 pc.printf("%f\n",waittime);
rottenegg 12:ff8d26124c38 45 if (waittime > 0.00000f) {
rottenegg 12:ff8d26124c38 46 wait(waittime);
rottenegg 12:ff8d26124c38 47 }
rottenegg 12:ff8d26124c38 48 dynatime.reset();
rottenegg 12:ff8d26124c38 49 };
rottenegg 12:ff8d26124c38 50 wav.ISRreset();
rottenegg 12:ff8d26124c38 51 CM.delete_regions();
rottenegg 12:ff8d26124c38 52 };
rottenegg 12:ff8d26124c38 53
rottenegg 12:ff8d26124c38 54 void SceneCreator::Core_1(N5110 &lcd, CaMove &CM,short int spl,int rng,bool p[6]) {
rottenegg 12:ff8d26124c38 55 if (p[0]) {
rottenegg 10:4fda7b01484a 56 this->pre_func0(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 57 }
rottenegg 8:e3a76a808a4c 58 if (p[1]) {
rottenegg 10:4fda7b01484a 59 this->pre_func1(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 60 }
rottenegg 8:e3a76a808a4c 61 if (p[2]) {
rottenegg 10:4fda7b01484a 62 this->pre_func2(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 63 }
rottenegg 8:e3a76a808a4c 64 if (p[3]) {
rottenegg 10:4fda7b01484a 65 this->pre_func3(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 66 }
rottenegg 8:e3a76a808a4c 67 if (p[4]) {
rottenegg 10:4fda7b01484a 68 this->pre_func4(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 69 }
rottenegg 8:e3a76a808a4c 70 if (p[5]) {
rottenegg 10:4fda7b01484a 71 this->pre_func5(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 72 }
rottenegg 12:ff8d26124c38 73 }
rottenegg 12:ff8d26124c38 74
rottenegg 12:ff8d26124c38 75 void SceneCreator::Core_2(N5110 &lcd, CaMove &CM,short int spl,int rng,bool (&p)[6],WDplayer &wav) {
rottenegg 12:ff8d26124c38 76 switch(CM.get_treg()) {
rottenegg 8:e3a76a808a4c 77 case 0:
rottenegg 12:ff8d26124c38 78 wav.ISRpause();
rottenegg 8:e3a76a808a4c 79 if(p[0]) {
rottenegg 12:ff8d26124c38 80 p[0] *= false;
rottenegg 9:ac396c818874 81 this->flash(lcd);
rottenegg 8:e3a76a808a4c 82 }
rottenegg 10:4fda7b01484a 83 this->pos_func0(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 84 wav.ISRresume();
rottenegg 8:e3a76a808a4c 85 break;
rottenegg 8:e3a76a808a4c 86 case 1:
rottenegg 12:ff8d26124c38 87 wav.ISRpause();
rottenegg 8:e3a76a808a4c 88 if(p[1]) {
rottenegg 12:ff8d26124c38 89 p[1] *= false;
rottenegg 9:ac396c818874 90 this->flash(lcd);
rottenegg 8:e3a76a808a4c 91 }
rottenegg 10:4fda7b01484a 92 this->pos_func1(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 93 wav.ISRresume();
rottenegg 8:e3a76a808a4c 94 break;
rottenegg 8:e3a76a808a4c 95 case 2:
rottenegg 12:ff8d26124c38 96 wav.ISRpause();
rottenegg 8:e3a76a808a4c 97 if(p[2]) {
rottenegg 12:ff8d26124c38 98 p[2] *= false;
rottenegg 9:ac396c818874 99 this->flash(lcd);
rottenegg 8:e3a76a808a4c 100 }
rottenegg 10:4fda7b01484a 101 this->pos_func2(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 102 wav.ISRresume();
rottenegg 8:e3a76a808a4c 103 break;
rottenegg 8:e3a76a808a4c 104 case 3:
rottenegg 12:ff8d26124c38 105 wav.ISRpause();
rottenegg 8:e3a76a808a4c 106 if(p[3]) {
rottenegg 12:ff8d26124c38 107 p[3] *= false;
rottenegg 9:ac396c818874 108 this->flash(lcd);
rottenegg 8:e3a76a808a4c 109 }
rottenegg 10:4fda7b01484a 110 this->pos_func3(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 111 wav.ISRresume();
rottenegg 8:e3a76a808a4c 112 break;
rottenegg 8:e3a76a808a4c 113 case 4:
rottenegg 12:ff8d26124c38 114 wav.ISRpause();
rottenegg 8:e3a76a808a4c 115 if(p[4]) {
rottenegg 12:ff8d26124c38 116 p[4] *= false;
rottenegg 9:ac396c818874 117 this->flash(lcd);
rottenegg 8:e3a76a808a4c 118 }
rottenegg 10:4fda7b01484a 119 this->pos_func4(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 120 wav.ISRresume();
rottenegg 8:e3a76a808a4c 121 break;
rottenegg 8:e3a76a808a4c 122 case 5:
rottenegg 12:ff8d26124c38 123 wav.ISRpause();
rottenegg 8:e3a76a808a4c 124 if(p[5]) {
rottenegg 12:ff8d26124c38 125 p[5] *= false;
rottenegg 9:ac396c818874 126 this->flash(lcd);
rottenegg 8:e3a76a808a4c 127 }
rottenegg 10:4fda7b01484a 128 this->pos_func5(spl,lcd,CM,rng);
rottenegg 12:ff8d26124c38 129 wav.ISRresume();
rottenegg 8:e3a76a808a4c 130 break;
rottenegg 8:e3a76a808a4c 131 };
rottenegg 12:ff8d26124c38 132 }
rottenegg 8:e3a76a808a4c 133
rottenegg 9:ac396c818874 134 //settings
rottenegg 8:e3a76a808a4c 135 void SceneCreator::set_sreg(CaMove &CM,int sce) {
rottenegg 8:e3a76a808a4c 136 switch(sce) {
rottenegg 8:e3a76a808a4c 137 case 0:
rottenegg 9:ac396c818874 138 this->set_scene0(CM);
rottenegg 8:e3a76a808a4c 139 break;
rottenegg 8:e3a76a808a4c 140 case 1:
rottenegg 9:ac396c818874 141 this->set_scene1(CM);
rottenegg 8:e3a76a808a4c 142 break;
rottenegg 8:e3a76a808a4c 143 case 2:
rottenegg 10:4fda7b01484a 144 this->set_scene2(CM);
rottenegg 8:e3a76a808a4c 145 break;
rottenegg 8:e3a76a808a4c 146 case 3:
rottenegg 10:4fda7b01484a 147 this->set_scene3(CM);
rottenegg 8:e3a76a808a4c 148 break;
rottenegg 8:e3a76a808a4c 149 case 4:
rottenegg 8:e3a76a808a4c 150 break;
rottenegg 8:e3a76a808a4c 151 }
rottenegg 8:e3a76a808a4c 152 }
rottenegg 8:e3a76a808a4c 153
rottenegg 8:e3a76a808a4c 154 //Function Pointers Failing mbed in-capable
rottenegg 8:e3a76a808a4c 155 //pre-func
rottenegg 10:4fda7b01484a 156 void SceneCreator::pre_func0(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 157 switch(sce) {
rottenegg 8:e3a76a808a4c 158 case 0:
rottenegg 9:ac396c818874 159 this->obj0_scene0(lcd);
rottenegg 8:e3a76a808a4c 160 break;
rottenegg 8:e3a76a808a4c 161 case 1:
rottenegg 9:ac396c818874 162 this->obj0_scene1(lcd);
rottenegg 8:e3a76a808a4c 163 break;
rottenegg 8:e3a76a808a4c 164 case 2:
rottenegg 10:4fda7b01484a 165 this->obj0_scene2(lcd);
rottenegg 8:e3a76a808a4c 166 break;
rottenegg 8:e3a76a808a4c 167 case 3:
rottenegg 10:4fda7b01484a 168 this->obj0_scene3(lcd);
rottenegg 8:e3a76a808a4c 169 break;
rottenegg 8:e3a76a808a4c 170 case 4:
rottenegg 8:e3a76a808a4c 171 break;
rottenegg 8:e3a76a808a4c 172 }
rottenegg 8:e3a76a808a4c 173 }
rottenegg 8:e3a76a808a4c 174
rottenegg 10:4fda7b01484a 175 void SceneCreator::pre_func1(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 176 switch(sce) {
rottenegg 8:e3a76a808a4c 177 case 0:
rottenegg 8:e3a76a808a4c 178 break;
rottenegg 8:e3a76a808a4c 179 case 1:
rottenegg 9:ac396c818874 180 this->obj1_scene1(lcd);
rottenegg 8:e3a76a808a4c 181 break;
rottenegg 8:e3a76a808a4c 182 case 2:
rottenegg 10:4fda7b01484a 183 this->obj1_scene2(lcd,rng);
rottenegg 8:e3a76a808a4c 184 break;
rottenegg 8:e3a76a808a4c 185 case 3:
rottenegg 10:4fda7b01484a 186 this->obj1_scene3(lcd);
rottenegg 8:e3a76a808a4c 187 break;
rottenegg 8:e3a76a808a4c 188 case 4:
rottenegg 8:e3a76a808a4c 189 break;
rottenegg 8:e3a76a808a4c 190 }
rottenegg 8:e3a76a808a4c 191 }
rottenegg 8:e3a76a808a4c 192
rottenegg 10:4fda7b01484a 193 void SceneCreator::pre_func2(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 194 switch(sce) {
rottenegg 8:e3a76a808a4c 195 case 0:
rottenegg 8:e3a76a808a4c 196 break;
rottenegg 8:e3a76a808a4c 197 case 1:
rottenegg 8:e3a76a808a4c 198 break;
rottenegg 8:e3a76a808a4c 199 case 2:
rottenegg 8:e3a76a808a4c 200 break;
rottenegg 8:e3a76a808a4c 201 case 3:
rottenegg 8:e3a76a808a4c 202 break;
rottenegg 8:e3a76a808a4c 203 case 4:
rottenegg 8:e3a76a808a4c 204 break;
rottenegg 8:e3a76a808a4c 205 }
rottenegg 8:e3a76a808a4c 206 }
rottenegg 8:e3a76a808a4c 207
rottenegg 10:4fda7b01484a 208 void SceneCreator::pre_func3(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 209 switch(sce) {
rottenegg 8:e3a76a808a4c 210 case 0:
rottenegg 8:e3a76a808a4c 211 break;
rottenegg 8:e3a76a808a4c 212 case 1:
rottenegg 8:e3a76a808a4c 213 break;
rottenegg 8:e3a76a808a4c 214 case 2:
rottenegg 8:e3a76a808a4c 215 break;
rottenegg 8:e3a76a808a4c 216 case 3:
rottenegg 10:4fda7b01484a 217 this->obj3_scene3(lcd);
rottenegg 8:e3a76a808a4c 218 break;
rottenegg 8:e3a76a808a4c 219 case 4:
rottenegg 8:e3a76a808a4c 220 break;
rottenegg 8:e3a76a808a4c 221 }
rottenegg 8:e3a76a808a4c 222 }
rottenegg 8:e3a76a808a4c 223
rottenegg 10:4fda7b01484a 224 void SceneCreator::pre_func4(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 225 switch(sce) {
rottenegg 8:e3a76a808a4c 226 case 0:
rottenegg 8:e3a76a808a4c 227 break;
rottenegg 8:e3a76a808a4c 228 case 1:
rottenegg 8:e3a76a808a4c 229 break;
rottenegg 8:e3a76a808a4c 230 case 2:
rottenegg 8:e3a76a808a4c 231 break;
rottenegg 8:e3a76a808a4c 232 case 3:
rottenegg 10:4fda7b01484a 233 this->obj4_scene3(lcd);
rottenegg 8:e3a76a808a4c 234 break;
rottenegg 8:e3a76a808a4c 235 case 4:
rottenegg 8:e3a76a808a4c 236 break;
rottenegg 8:e3a76a808a4c 237 }
rottenegg 8:e3a76a808a4c 238 }
rottenegg 8:e3a76a808a4c 239
rottenegg 10:4fda7b01484a 240 void SceneCreator::pre_func5(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 241 switch(sce) {
rottenegg 8:e3a76a808a4c 242 case 0:
rottenegg 8:e3a76a808a4c 243 break;
rottenegg 8:e3a76a808a4c 244 case 1:
rottenegg 8:e3a76a808a4c 245 break;
rottenegg 8:e3a76a808a4c 246 case 2:
rottenegg 8:e3a76a808a4c 247 break;
rottenegg 8:e3a76a808a4c 248 case 3:
rottenegg 8:e3a76a808a4c 249 break;
rottenegg 8:e3a76a808a4c 250 case 4:
rottenegg 8:e3a76a808a4c 251 break;
rottenegg 8:e3a76a808a4c 252 }
rottenegg 8:e3a76a808a4c 253 }
rottenegg 8:e3a76a808a4c 254 //pos func
rottenegg 8:e3a76a808a4c 255
rottenegg 10:4fda7b01484a 256 void SceneCreator::pos_func0(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 257 switch(sce) {
rottenegg 8:e3a76a808a4c 258 case 0:
rottenegg 9:ac396c818874 259 this->event0_scene0(lcd);
rottenegg 8:e3a76a808a4c 260 break;
rottenegg 8:e3a76a808a4c 261 case 1:
rottenegg 9:ac396c818874 262 this->event0_scene1(lcd);
rottenegg 8:e3a76a808a4c 263 break;
rottenegg 8:e3a76a808a4c 264 case 2:
rottenegg 10:4fda7b01484a 265 this->event0_scene2(lcd,CM);
rottenegg 8:e3a76a808a4c 266 break;
rottenegg 8:e3a76a808a4c 267 case 3:
rottenegg 10:4fda7b01484a 268 this->event0_scene3(lcd);
rottenegg 8:e3a76a808a4c 269 break;
rottenegg 8:e3a76a808a4c 270 case 4:
rottenegg 8:e3a76a808a4c 271 break;
rottenegg 8:e3a76a808a4c 272 }
rottenegg 8:e3a76a808a4c 273 }
rottenegg 8:e3a76a808a4c 274
rottenegg 10:4fda7b01484a 275 void SceneCreator::pos_func1(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 276 switch(sce) {
rottenegg 8:e3a76a808a4c 277 case 0:
rottenegg 9:ac396c818874 278 this->event1_scene0(lcd);
rottenegg 8:e3a76a808a4c 279 break;
rottenegg 8:e3a76a808a4c 280 case 1:
rottenegg 9:ac396c818874 281 this->event1_scene1(lcd);
rottenegg 8:e3a76a808a4c 282 break;
rottenegg 8:e3a76a808a4c 283 case 2:
rottenegg 8:e3a76a808a4c 284 break;
rottenegg 8:e3a76a808a4c 285 case 3:
rottenegg 10:4fda7b01484a 286 this->event1_scene3(lcd);
rottenegg 8:e3a76a808a4c 287 break;
rottenegg 8:e3a76a808a4c 288 case 4:
rottenegg 8:e3a76a808a4c 289 break;
rottenegg 8:e3a76a808a4c 290 }
rottenegg 8:e3a76a808a4c 291 }
rottenegg 8:e3a76a808a4c 292
rottenegg 10:4fda7b01484a 293 void SceneCreator::pos_func2(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 10:4fda7b01484a 294 switch(sce) {
rottenegg 10:4fda7b01484a 295 case 0:
rottenegg 10:4fda7b01484a 296 break;
rottenegg 10:4fda7b01484a 297 case 1:
rottenegg 10:4fda7b01484a 298 break;
rottenegg 10:4fda7b01484a 299 case 2:
rottenegg 10:4fda7b01484a 300 break;
rottenegg 10:4fda7b01484a 301 case 3:
rottenegg 10:4fda7b01484a 302 this->event2_scene3(lcd);
rottenegg 10:4fda7b01484a 303 break;
rottenegg 10:4fda7b01484a 304 case 4:
rottenegg 10:4fda7b01484a 305 break;
rottenegg 10:4fda7b01484a 306 }
rottenegg 10:4fda7b01484a 307 }
rottenegg 10:4fda7b01484a 308
rottenegg 10:4fda7b01484a 309
rottenegg 10:4fda7b01484a 310 void SceneCreator::pos_func3(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 10:4fda7b01484a 311 switch(sce) {
rottenegg 10:4fda7b01484a 312 case 0:
rottenegg 10:4fda7b01484a 313 break;
rottenegg 10:4fda7b01484a 314 case 1:
rottenegg 10:4fda7b01484a 315 break;
rottenegg 10:4fda7b01484a 316 case 2:
rottenegg 10:4fda7b01484a 317 break;
rottenegg 10:4fda7b01484a 318 case 3:
rottenegg 10:4fda7b01484a 319 this->event3_scene3(lcd,CM);
rottenegg 10:4fda7b01484a 320 break;
rottenegg 10:4fda7b01484a 321 case 4:
rottenegg 10:4fda7b01484a 322 break;
rottenegg 10:4fda7b01484a 323 }
rottenegg 10:4fda7b01484a 324 }
rottenegg 10:4fda7b01484a 325
rottenegg 10:4fda7b01484a 326 void SceneCreator::pos_func4(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 327 switch(sce) {
rottenegg 8:e3a76a808a4c 328 case 0:
rottenegg 8:e3a76a808a4c 329 break;
rottenegg 8:e3a76a808a4c 330 case 1:
rottenegg 8:e3a76a808a4c 331 break;
rottenegg 8:e3a76a808a4c 332 case 2:
rottenegg 8:e3a76a808a4c 333 break;
rottenegg 8:e3a76a808a4c 334 case 3:
rottenegg 8:e3a76a808a4c 335 break;
rottenegg 8:e3a76a808a4c 336 case 4:
rottenegg 8:e3a76a808a4c 337 break;
rottenegg 8:e3a76a808a4c 338 }
rottenegg 8:e3a76a808a4c 339 }
rottenegg 8:e3a76a808a4c 340
rottenegg 10:4fda7b01484a 341 void SceneCreator::pos_func5(int sce,N5110 &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 342 switch(sce) {
rottenegg 8:e3a76a808a4c 343 case 0:
rottenegg 8:e3a76a808a4c 344 break;
rottenegg 8:e3a76a808a4c 345 case 1:
rottenegg 8:e3a76a808a4c 346 break;
rottenegg 8:e3a76a808a4c 347 case 2:
rottenegg 8:e3a76a808a4c 348 break;
rottenegg 8:e3a76a808a4c 349 case 3:
rottenegg 8:e3a76a808a4c 350 break;
rottenegg 8:e3a76a808a4c 351 case 4:
rottenegg 8:e3a76a808a4c 352 break;
rottenegg 8:e3a76a808a4c 353 }
rottenegg 8:e3a76a808a4c 354 }
rottenegg 8:e3a76a808a4c 355