Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FATFileSystem
SceneCreator/SceneCreator.cpp
- Committer:
- rottenegg
- Date:
- 2019-05-07
- Revision:
- 15:3d29fb195958
- Parent:
- 14:165fff6d1854
- Child:
- 17:7d4d8905b608
File content as of revision 15:3d29fb195958:
#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(N5110 &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();
Bitmap::renderBMP(SCN[spl],lcd,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(N5110 &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(N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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,N5110 &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;
}