Dependencies: mbed FATFileSystem
SceneCreator/SceneCreator.cpp
- Committer:
- rottenegg
- Date:
- 2019-05-08
- Revision:
- 17:7d4d8905b608
- Parent:
- 15:3d29fb195958
- Child:
- 18:14e5391beccf
File content as of revision 17:7d4d8905b608:
#include "SceneCreator.h" #include "ScenePaths.h" //Timer for dynamic wait times to reduce notice-able lagging between scenes Timer dynatime; DigitalOut led(LED_BLUE); Serial pc(USBTX,USBRX); //Constructor SceneCreator::SceneCreator(PinName Button) { this->set_buttonPin(Button); dead = false; } //Destructor SceneCreator::~SceneCreator() { this->deletebutton(); } //Primary Function void SceneCreator::Scenesp(Bitmap &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd, int rng,WDplayer &wav) { //Setting up WDplayer, CaMove and Scene interative regions wav.ISRset(); CM.init(spx,spy,spd); CM.AIinit(); lcd.normalMode(); this->set_sreg(CM,spl); //Array to allow Pos Events to disable or enable Pre Events bool p[6] = {true,true,true,true,true,true}; //Main Loop exit if charater dead or leaves screen while(!dead && CM.in_screen()) { //start timer dynatime.start(); lcd.clear(); //reload WDplayer data then Load map data wav.ISRpreload(); lcd.renderBMP(SCN[spl],0,0); //CORE_1 (Pre Events Engine) this->Core_1(lcd, CM,spl,rng,p); //Charater and Chaser Model Update CM.move(lcd); CM.chase(lcd,spl); wav.ISRpreload(); //CORE_2 (Pos Event Engine) this->Core_2(lcd, CM,spl,rng,p,wav); if (CM.is_caught()) { dead = true; } lcd.refresh(); //Dynamic Wait dynatime.stop(); float waittime = 0.15f - dynatime.read(); if (waittime > 0.00000f) { wait(waittime); } dynatime.reset(); //Will aim for 7 frames per second if too heavy of performance impacting frame rate will drop }; //reset WDplayer and Delete interative regions wav.ISRreset(); CM.delete_regions(); }; //CORE_1 (Pre EVENTS) void SceneCreator::Core_1(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool p[6]) { if (p[0]) { this->pre_func0(spl,lcd,CM,rng); } if (p[1]) { this->pre_func1(spl,lcd,CM,rng); } if (p[2]) { this->pre_func2(spl,lcd,CM,rng); } if (p[3]) { this->pre_func3(spl,lcd,CM,rng); } if (p[4]) { this->pre_func4(spl,lcd,CM,rng); } if (p[5]) { this->pre_func5(spl,lcd,CM,rng); } } //CORE_2 (Pos EVENTs) void SceneCreator::Core_2(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool (&p)[6],WDplayer &wav) { //Checks which region triggered switch(CM.get_treg()) { case 0: //pause Music wav.ISRpause(); //Signal to player he is progressing by flashing screen (only occurs once) if(p[0]) { p[0] *= false; this->flash(lcd); } //Do this this->pos_func0(spl,lcd,CM,rng); //Resume Music wav.ISRresume(); break; //Same For All Cases case 1: wav.ISRpause(); if(p[1]) { p[1] *= false; this->flash(lcd); } this->pos_func1(spl,lcd,CM,rng); wav.ISRresume(); break; case 2: wav.ISRpause(); if(p[2]) { p[2] *= false; this->flash(lcd); } this->pos_func2(spl,lcd,CM,rng); wav.ISRresume(); break; case 3: wav.ISRpause(); if(p[3]) { p[3] *= false; this->flash(lcd); } this->pos_func3(spl,lcd,CM,rng); wav.ISRresume(); break; case 4: wav.ISRpause(); if(p[4]) { p[4] *= false; this->flash(lcd); } this->pos_func4(spl,lcd,CM,rng); wav.ISRresume(); break; case 5: wav.ISRpause(); if(p[5]) { p[5] *= false; this->flash(lcd); } this->pos_func5(spl,lcd,CM,rng); wav.ISRresume(); break; }; } //settings //All below Functions Check which scene is operating and then fetches the required Function from SceneFunctions //They all are they same... void SceneCreator::set_sreg(CaMove &CM,int sce) { switch(sce) { case 0: this->set_scene0(CM); break; case 1: this->set_scene1(CM); break; case 2: this->set_scene2(CM); break; case 3: this->set_scene3(CM); break; case 4: this->set_scene4(CM); break; } } //pre-func void SceneCreator::pre_func0(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: this->obj0_scene0(lcd); break; case 1: this->obj0_scene1(lcd); break; case 2: this->obj0_scene2(lcd); break; case 3: this->obj0_scene3(lcd); break; case 4: break; } } void SceneCreator::pre_func1(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: this->obj1_scene1(lcd); break; case 2: this->obj1_scene2(lcd,rng); break; case 3: this->obj1_scene3(lcd); break; case 4: this->obj1_scene4(lcd); break; } } void SceneCreator::pre_func2(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: this->obj2_scene4(lcd); break; } } void SceneCreator::pre_func3(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: this->obj3_scene3(lcd); break; case 4: this->obj3_scene4(lcd); break; } } void SceneCreator::pre_func4(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: this->obj4_scene3(lcd); break; case 4: break; } } void SceneCreator::pre_func5(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; } } //pos func void SceneCreator::pos_func0(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: this->event0_scene0(lcd); break; case 1: this->event0_scene1(lcd); break; case 2: this->event0_scene2(lcd,CM); break; case 3: this->event0_scene3(lcd); break; case 4: this->event0_scene4(lcd,CM); break; } } void SceneCreator::pos_func1(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: this->event1_scene0(lcd); break; case 1: this->event1_scene1(lcd,CM); break; case 2: break; case 3: this->event1_scene3(lcd); break; case 4: break; } } void SceneCreator::pos_func2(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: this->event2_scene3(lcd); break; case 4: break; } } void SceneCreator::pos_func3(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: this->event3_scene3(lcd,CM); break; case 4: break; } } void SceneCreator::pos_func4(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; } } void SceneCreator::pos_func5(int sce,Bitmap &lcd,CaMove &CM,int rng) { switch(sce) { case 0: break; case 1: break; case 2: break; case 3: break; case 4: break; } } bool SceneCreator::get_dead() { return dead; } void SceneCreator::set_dead(bool opt) { dead = opt; }