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
StateManger.cpp@21:e19709a07756, 2021-03-25 (annotated)
- Committer:
- hugohu
- Date:
- Thu Mar 25 03:56:22 2021 +0000
- Branch:
- BRAVEHEART
- Revision:
- 21:e19709a07756
- Parent:
- 19:89c3eeb3761b
Combined some files, removed codes for my personal needs, created new maps, new ways to play.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Siriagus | 5:100d960fc6d5 | 1 | #include "StateManager.h" |
Siriagus | 5:100d960fc6d5 | 2 | |
Siriagus | 17:d6a3b29cab31 | 3 | /// @file StateManager.cpp |
Siriagus | 17:d6a3b29cab31 | 4 | |
Siriagus | 5:100d960fc6d5 | 5 | void StateManager::changeState(MainState newState) |
Siriagus | 5:100d960fc6d5 | 6 | { |
Siriagus | 5:100d960fc6d5 | 7 | if (currentState != 0) // if a state exist |
Siriagus | 5:100d960fc6d5 | 8 | delete currentState; // delete the old state |
Siriagus | 7:678873947b29 | 9 | |
Siriagus | 5:100d960fc6d5 | 10 | // Create new state |
Siriagus | 5:100d960fc6d5 | 11 | switch (newState) |
Siriagus | 5:100d960fc6d5 | 12 | { |
Siriagus | 5:100d960fc6d5 | 13 | case MAIN_MENU: |
hugohu | 19:89c3eeb3761b | 14 | currentState = new MainMenu(this, lcd, input, sound, shiftreg); |
Siriagus | 5:100d960fc6d5 | 15 | break; |
Siriagus | 5:100d960fc6d5 | 16 | |
Siriagus | 5:100d960fc6d5 | 17 | case GAME: |
hugohu | 19:89c3eeb3761b | 18 | currentState = new Game(this, lcd, input, sound, shiftreg); |
Siriagus | 7:678873947b29 | 19 | break; |
Siriagus | 5:100d960fc6d5 | 20 | |
Siriagus | 8:9ac6a428fa26 | 21 | case TITLE_SCREEN: |
hugohu | 19:89c3eeb3761b | 22 | currentState = new CoverPage(this, lcd, input, sound, shiftreg); |
Siriagus | 17:d6a3b29cab31 | 23 | break; |
Siriagus | 17:d6a3b29cab31 | 24 | |
Siriagus | 17:d6a3b29cab31 | 25 | case SUBMIT_HIGHSCORE: |
hugohu | 19:89c3eeb3761b | 26 | currentState = new Achievement(this, lcd, input, sound, shiftreg); |
Siriagus | 8:9ac6a428fa26 | 27 | break; |
Siriagus | 8:9ac6a428fa26 | 28 | |
Siriagus | 5:100d960fc6d5 | 29 | case GAME_OVER: |
hugohu | 19:89c3eeb3761b | 30 | currentState = new GameOver(this, lcd, input, sound, shiftreg); |
Siriagus | 17:d6a3b29cab31 | 31 | break; |
Siriagus | 5:100d960fc6d5 | 32 | |
Siriagus | 5:100d960fc6d5 | 33 | default: |
Siriagus | 17:d6a3b29cab31 | 34 | ; // error: this shouldn't happen |
Siriagus | 5:100d960fc6d5 | 35 | } |
Siriagus | 5:100d960fc6d5 | 36 | } |
Siriagus | 5:100d960fc6d5 | 37 | |
Siriagus | 7:678873947b29 | 38 | void StateManager::requestStateChange(MainState requestedState) |
Siriagus | 5:100d960fc6d5 | 39 | { |
Siriagus | 7:678873947b29 | 40 | if (nextState != NO_STATE) |
Siriagus | 7:678873947b29 | 41 | error("Invalid - can't request new state before the first request has been processed!"); |
Siriagus | 7:678873947b29 | 42 | |
Siriagus | 7:678873947b29 | 43 | nextState = requestedState; |
Siriagus | 7:678873947b29 | 44 | } |
Siriagus | 7:678873947b29 | 45 | |
Siriagus | 7:678873947b29 | 46 | void StateManager::update(float dt) |
Siriagus | 7:678873947b29 | 47 | { |
Siriagus | 5:100d960fc6d5 | 48 | currentState->update(dt); |
Siriagus | 5:100d960fc6d5 | 49 | } |
Siriagus | 5:100d960fc6d5 | 50 | |
Siriagus | 5:100d960fc6d5 | 51 | void StateManager::render() |
Siriagus | 5:100d960fc6d5 | 52 | { |
Siriagus | 5:100d960fc6d5 | 53 | currentState->render(); |
Siriagus | 7:678873947b29 | 54 | } |
Siriagus | 7:678873947b29 | 55 | |
Siriagus | 7:678873947b29 | 56 | void StateManager::processRequest() |
Siriagus | 7:678873947b29 | 57 | { |
Siriagus | 7:678873947b29 | 58 | // Check if there has been a request to change the state |
Siriagus | 7:678873947b29 | 59 | if (nextState != NO_STATE) |
Siriagus | 7:678873947b29 | 60 | { |
Siriagus | 7:678873947b29 | 61 | changeState(nextState); |
Siriagus | 7:678873947b29 | 62 | nextState = NO_STATE; // reset, state has been changed |
Siriagus | 7:678873947b29 | 63 | } |
Siriagus | 5:100d960fc6d5 | 64 | } |