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

main.cpp

Committer:
Siriagus
Date:
2015-05-02
Revision:
8:9ac6a428fa26
Parent:
7:678873947b29
Child:
10:f2488a0ecab7

File content as of revision 8:9ac6a428fa26:

/**
@brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds

@author Andreas Garmannslund
**/

#include "mbed.h"
#include "N5110.h"
#include "PowerControl.h"
#include "PinDetect.h"
#include <string>
#include <sstream>
#include <ctime>

#include "Joystick.h"

#include "StateManager.h"
#include "State.h"
#include "images.h"
#include "InputManager.h"



// Redefine pin names for simple access.
#define JOY_H p17
#define JOY_V p16
#define JOY_BTN p15

#define LED_POT p20

#define BUTTON_A p28
#define BUTTON_B p27
#define BUTTON_C p29

// Input and Output
N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED

InputManager *input;

// Brightness potentiometer
AnalogIn ledPot(LED_POT);

// Debugging
BusOut leds(LED1, LED2, LED3, LED4);

// @brief Clears the screen and fill it with the image in the argument.
void clearAndDrawImage(const int img[BANKS][WIDTH])
{
    for (int i = 0; i < BANKS; ++i)
    {
        for (int j = 0; j < WIDTH; ++j)
        {
            lcd->buffer[j][i] = img[i][j];
        }
    }
    lcd->refresh();
}

// States




void init();
void cleanUp();

StateManager* fsm;

int main()
{
    init();
    
    Timer timer;
    timer.start();
    
    while(true)
    {
        // We need to call Sleep() repeatedly, because periodic interrupts in InputManager will cause it to wake up every 20 ms.
        while (timer.read() < 0.08)
            Sleep();
        
        // update
        lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
        fsm->update(timer.read());
        input->joystick->update();
        
        // render
        lcd->clear();
        fsm->render(); 
        lcd->refresh();
        
        fsm->processRequest(); // Change the state if requested.
        
        timer.reset();
    }
    
    cleanUp();
    
    return 0;
}

void init()
{
    // Init LCD
    lcd = new N5110(p7, p8, p9, p10, p11, p13, p26);
    lcd->init();
    lcd->normalMode();
    lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
    
    // Input
    input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_H, JOY_V, JOY_BTN);
    
    fsm = new StateManager(lcd, input, TITLE_SCREEN);
}

void cleanUp()
{
    delete lcd;
    delete input;
}