A complex 2D-dungeon game on LPC1768 in SWJTU-Leeds Joint School XJEL2645 project. Referenced from the framework contributed by https://os.mbed.com/users/Siriagus/code/SimplePlatformGame/

Dependencies:   mbed N5110 ShiftReg PinDetect

Committer:
Siriagus
Date:
Fri May 01 18:10:59 2015 +0000
Revision:
7:678873947b29
Parent:
5:100d960fc6d5
Child:
8:9ac6a428fa26
Fixed bug in State.h: Not setting fsm variable. State classes can now request the state to be changed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Siriagus 5:100d960fc6d5 1 #include "StateManager.h"
Siriagus 5:100d960fc6d5 2
Siriagus 5:100d960fc6d5 3 // Delete the old state and create a new one
Siriagus 5:100d960fc6d5 4 void StateManager::changeState(MainState newState)
Siriagus 5:100d960fc6d5 5 {
Siriagus 5:100d960fc6d5 6 if (currentState != 0) // if a state exist
Siriagus 5:100d960fc6d5 7 delete currentState; // delete the old state
Siriagus 7:678873947b29 8
Siriagus 5:100d960fc6d5 9 // Create new state
Siriagus 5:100d960fc6d5 10 switch (newState)
Siriagus 5:100d960fc6d5 11 {
Siriagus 5:100d960fc6d5 12 case MAIN_MENU:
Siriagus 5:100d960fc6d5 13 currentState = new MainMenu(this, lcd, input);
Siriagus 5:100d960fc6d5 14 break;
Siriagus 5:100d960fc6d5 15
Siriagus 5:100d960fc6d5 16 case GAME:
Siriagus 7:678873947b29 17 currentState = new Game(this, lcd, input);
Siriagus 7:678873947b29 18 break;
Siriagus 5:100d960fc6d5 19
Siriagus 7:678873947b29 20 // TODO: Make classes for the other states.
Siriagus 5:100d960fc6d5 21 case SUBMIT_HIGHSCORE:
Siriagus 5:100d960fc6d5 22 //break;
Siriagus 5:100d960fc6d5 23
Siriagus 5:100d960fc6d5 24 case GAME_OVER:
Siriagus 5:100d960fc6d5 25 //break;
Siriagus 5:100d960fc6d5 26
Siriagus 5:100d960fc6d5 27 default:
Siriagus 5:100d960fc6d5 28 error("Invalid state!");
Siriagus 5:100d960fc6d5 29 }
Siriagus 5:100d960fc6d5 30 }
Siriagus 5:100d960fc6d5 31
Siriagus 7:678873947b29 32 void StateManager::requestStateChange(MainState requestedState)
Siriagus 5:100d960fc6d5 33 {
Siriagus 7:678873947b29 34 if (nextState != NO_STATE)
Siriagus 7:678873947b29 35 error("Invalid - can't request new state before the first request has been processed!");
Siriagus 7:678873947b29 36
Siriagus 7:678873947b29 37 nextState = requestedState;
Siriagus 7:678873947b29 38 }
Siriagus 7:678873947b29 39
Siriagus 7:678873947b29 40 void StateManager::update(float dt)
Siriagus 7:678873947b29 41 {
Siriagus 5:100d960fc6d5 42 currentState->update(dt);
Siriagus 5:100d960fc6d5 43 }
Siriagus 5:100d960fc6d5 44
Siriagus 5:100d960fc6d5 45 void StateManager::render()
Siriagus 5:100d960fc6d5 46 {
Siriagus 5:100d960fc6d5 47 currentState->render();
Siriagus 7:678873947b29 48 }
Siriagus 7:678873947b29 49
Siriagus 7:678873947b29 50 void StateManager::processRequest()
Siriagus 7:678873947b29 51 {
Siriagus 7:678873947b29 52 // Check if there has been a request to change the state
Siriagus 7:678873947b29 53 if (nextState != NO_STATE)
Siriagus 7:678873947b29 54 {
Siriagus 7:678873947b29 55 changeState(nextState);
Siriagus 7:678873947b29 56 nextState = NO_STATE; // reset, state has been changed
Siriagus 7:678873947b29 57 }
Siriagus 5:100d960fc6d5 58 }