Game for Leeds University Gamepad for the FRDM-K64F: Game is a RPG Horror Title.

Dependencies:   mbed FATFileSystem

SceneCreator/SceneCreator.cpp

Committer:
rottenegg
Date:
2019-05-09
Revision:
21:f3b0ce18b44f
Parent:
20:01efa2bce75d
Child:
26:716bcd47f3ca

File content as of revision 21:f3b0ce18b44f:

#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) {
    this->setup(lcd,CM,spl,spx,spy,spd,wav);
    while(!dead && CM.in_screen()) {  //Main Loop exit if charater dead or leaves screen
        dynatime.start();
        lcd.clear();
        wav.ISRpreload();
        lcd.renderBMP(SCN[spl],0,0);                 //Map Made
        this->Core_1(lcd, CM,spl,rng,p);             //Pre - Events
        this->update_charaters(lcd,CM,spl,wav);
        this->Core_2(lcd, CM,spl,rng,p,wav);         //Pos - Events
        if (CM.is_caught()) {
            dead = true;
        }
        lcd.refresh();
        this->dynamic_wait();
    };
    wav.ISRreset();               //Clear Scene data
    CM.delete_regions();
};


//Internal Functions for Scenesp

void SceneCreator::setup(Bitmap &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd, WDplayer &wav) {
    //Setting up WDplayer, CaMove and Scene interative regions
    wav.ISRset();
    CM.init(spx,spy,spd);
    CM.AIinit(spl);
    lcd.normalMode();
    this->set_sreg(CM,spl);
    this->reset_variables();
    //Array to allow Pos Events to disable or enable Pre Events (Resetting)
    p[0] = true;
    p[1] = true;
    p[2] = true;
    p[3] = true;
    p[4] = true;
}


//CORE_1 (Pre EVENTS) 
void SceneCreator::Core_1(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool p[5]) {
    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);
        }
}

//CORE_2 (Pos EVENTs)
void SceneCreator::Core_2(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool (&p)[5],WDplayer &wav) {
    switch(CM.get_treg()) {     //Checks which region triggered
            case 0:
                this->task_completed(p[0] ,lcd ,wav);
                this->pos_func0(spl,lcd,CM,rng,wav);
                break;
            case 1:
                this->task_completed(p[1] ,lcd ,wav);
                this->pos_func1(spl,lcd,CM,rng);
            break;
            case 2:
                this->task_completed(p[2] ,lcd ,wav);
                this->pos_func2(spl,lcd,CM,rng);
            break;
            case 3:
                this->task_completed(p[3] ,lcd ,wav);
                this->pos_func3(spl,lcd,CM,rng);
            break;
            case 4:
                this->task_completed(p[4] ,lcd ,wav);
                this->pos_func4(spl,lcd,CM,rng);
            break;     
        };
        wav.ISRresume();
}

void SceneCreator::update_charaters(Bitmap &lcd, CaMove &CM,short int spl, WDplayer &wav) {
    //Charater and Chaser Model Update
    CM.move(lcd);
    CM.chase(lcd,spl);
    wav.ISRpreload();
}

void SceneCreator::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 
}

//Aiding Functions - used in Core 2 

void SceneCreator::task_completed(bool &uno, Bitmap &lcd, WDplayer &wav) {
    wav.ISRpause();
    if(uno) {
        uno *= false;
        this->flash(lcd);
    }
}


//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;
    }
}

//pos func

void SceneCreator::pos_func0(int sce,Bitmap &lcd,CaMove &CM,int rng,WDplayer &wav) {
    switch(sce) {
        case 0:
        this->event0_scene0(lcd);
        break;
        case 1:
        this->event0_scene1(lcd);
        break;
        case 2:
        this->event0_scene2(lcd,CM,wav);
        break;
        case 3:
        this->event0_scene3(lcd);
        break;
        case 4:
        this->event0_scene4(lcd,CM,wav);
        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;
    }
}

//Accessors and Mutators and other Small Functions

bool SceneCreator::get_dead() {
    return dead;
}

void SceneCreator::set_dead(bool opt) {
    dead = opt;
}


void SceneCreator::flashy(Bitmap &lcd) {
    this->flash(lcd);
}