Hugo Hu / Mbed 2 deprecated BRAVEHEART

Dependencies:   mbed N5110 ShiftReg PinDetect

State.h

Committer:
Siriagus
Date:
2015-05-08
Revision:
10:f2488a0ecab7
Parent:
8:9ac6a428fa26
Child:
12:8178fad5e660

File content as of revision 10:f2488a0ecab7:

#ifndef STATE_H
#define STATE_H

#include "N5110.h"
#include "PinDetect.h"
#include "InputManager.h"

/** @file State.h
* @author Andreas Garmannslund
* @date April 2015
*/

class StateManager;

/// States used in the finite state machine.
enum MainState {MAIN_MENU, GAME, SUBMIT_HIGHSCORE, GAME_OVER, NO_STATE, TITLE_SCREEN};

/// Abstract class for states in the program's main finite state machine. All state implementations is derived from this abstract class.
class State
{   
    public:
        
        /* Creates a new state object. Should be called from child's constructor.
        * @param fsm Pointer to finished state machine.
        * @param lcd Pointer to the N5110 lcd object.
        * @param input Pointer to the InputManager object, used for controlling user input.
        */
        State(StateManager* fsm, N5110 *lcd, InputManager* input)
                :lcd(lcd), input(input), fsm(fsm){}
                
        /// Handle user input and update logic.
        virtual void update(float dt) = 0;
        
        /// Draw to screen.
        virtual void render() = 0;
        
    protected:
        /* Requests the finite state machine to switch to a new state when possible.
        * @param newState The state the fsm should switch to.
        **/
        void requestStateChange(MainState newState);
        
        /** Draws an image to the lcd
        * @param img Array with the same size as the display, where 1 is opaque, 0 is blank.
        */
        void drawImage(const int img[BANKS][WIDTH]); // Draws an image from array
        
    protected:
        N5110 *lcd;
        InputManager *input;
        
    private:
        StateManager *fsm;
        
};

#endif