Hugo Hu / Mbed 2 deprecated BRAVEHEART

Dependencies:   mbed N5110 ShiftReg PinDetect

Committer:
Siriagus
Date:
Fri May 08 14:39:36 2015 +0000
Revision:
10:f2488a0ecab7
Parent:
8:9ac6a428fa26
Child:
12:8178fad5e660
Encapsluated PinDetect buttons in InputManager (made private)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Siriagus 1:0cfe2255092a 1 #ifndef STATE_H
Siriagus 1:0cfe2255092a 2 #define STATE_H
Siriagus 1:0cfe2255092a 3
Siriagus 4:d6661b976359 4 #include "N5110.h"
Siriagus 4:d6661b976359 5 #include "PinDetect.h"
Siriagus 4:d6661b976359 6 #include "InputManager.h"
Siriagus 4:d6661b976359 7
Siriagus 10:f2488a0ecab7 8 /** @file State.h
Siriagus 10:f2488a0ecab7 9 * @author Andreas Garmannslund
Siriagus 10:f2488a0ecab7 10 * @date April 2015
Siriagus 10:f2488a0ecab7 11 */
Siriagus 10:f2488a0ecab7 12
Siriagus 4:d6661b976359 13 class StateManager;
Siriagus 4:d6661b976359 14
Siriagus 10:f2488a0ecab7 15 /// States used in the finite state machine.
Siriagus 8:9ac6a428fa26 16 enum MainState {MAIN_MENU, GAME, SUBMIT_HIGHSCORE, GAME_OVER, NO_STATE, TITLE_SCREEN};
Siriagus 4:d6661b976359 17
Siriagus 10:f2488a0ecab7 18 /// Abstract class for states in the program's main finite state machine. All state implementations is derived from this abstract class.
Siriagus 1:0cfe2255092a 19 class State
Siriagus 5:100d960fc6d5 20 {
Siriagus 1:0cfe2255092a 21 public:
Siriagus 10:f2488a0ecab7 22
Siriagus 10:f2488a0ecab7 23 /* Creates a new state object. Should be called from child's constructor.
Siriagus 10:f2488a0ecab7 24 * @param fsm Pointer to finished state machine.
Siriagus 10:f2488a0ecab7 25 * @param lcd Pointer to the N5110 lcd object.
Siriagus 10:f2488a0ecab7 26 * @param input Pointer to the InputManager object, used for controlling user input.
Siriagus 10:f2488a0ecab7 27 */
Siriagus 4:d6661b976359 28 State(StateManager* fsm, N5110 *lcd, InputManager* input)
Siriagus 7:678873947b29 29 :lcd(lcd), input(input), fsm(fsm){}
Siriagus 4:d6661b976359 30
Siriagus 10:f2488a0ecab7 31 /// Handle user input and update logic.
Siriagus 7:678873947b29 32 virtual void update(float dt) = 0;
Siriagus 10:f2488a0ecab7 33
Siriagus 10:f2488a0ecab7 34 /// Draw to screen.
Siriagus 4:d6661b976359 35 virtual void render() = 0;
Siriagus 4:d6661b976359 36
Siriagus 7:678873947b29 37 protected:
Siriagus 10:f2488a0ecab7 38 /* Requests the finite state machine to switch to a new state when possible.
Siriagus 10:f2488a0ecab7 39 * @param newState The state the fsm should switch to.
Siriagus 10:f2488a0ecab7 40 **/
Siriagus 7:678873947b29 41 void requestStateChange(MainState newState);
Siriagus 10:f2488a0ecab7 42
Siriagus 10:f2488a0ecab7 43 /** Draws an image to the lcd
Siriagus 10:f2488a0ecab7 44 * @param img Array with the same size as the display, where 1 is opaque, 0 is blank.
Siriagus 10:f2488a0ecab7 45 */
Siriagus 8:9ac6a428fa26 46 void drawImage(const int img[BANKS][WIDTH]); // Draws an image from array
Siriagus 4:d6661b976359 47
Siriagus 4:d6661b976359 48 protected:
Siriagus 4:d6661b976359 49 N5110 *lcd;
Siriagus 4:d6661b976359 50 InputManager *input;
Siriagus 4:d6661b976359 51
Siriagus 4:d6661b976359 52 private:
Siriagus 4:d6661b976359 53 StateManager *fsm;
Siriagus 4:d6661b976359 54
Siriagus 1:0cfe2255092a 55 };
Siriagus 1:0cfe2255092a 56
Siriagus 1:0cfe2255092a 57 #endif