127 lines
2.3 KiB
C++
127 lines
2.3 KiB
C++
/*
|
|
* FarmlandsGame.cpp
|
|
*
|
|
* Created on: Nov 7, 2016
|
|
* Author: tibi
|
|
*/
|
|
|
|
#include "FarmlandsGame.h"
|
|
#include <resources/Resources.h>
|
|
|
|
#include <SDL2/SDL.h>
|
|
#include <SDL2/SDL_image.h>
|
|
#include <SDL2/SDL_ttf.h>
|
|
#include <unistd.h>
|
|
#include <iostream>
|
|
|
|
namespace farmlands {
|
|
namespace controller {
|
|
|
|
FarmlandsGame::FarmlandsGame() :
|
|
m_running(true),
|
|
m_gameState(),
|
|
m_time(0),
|
|
m_guiController(),
|
|
m_playerController()
|
|
{
|
|
}
|
|
|
|
bool FarmlandsGame::initialize()
|
|
{
|
|
// Initialize game state
|
|
m_gameState.viewport.initialized = false;
|
|
m_gameState.camera.scale = 4;
|
|
|
|
// Initialize render system
|
|
if (!m_gameState.sdlRenderer.initialize(&m_gameState))
|
|
return false;
|
|
|
|
m_gameState.gameRenderer.initialize(&m_gameState);
|
|
m_gameState.guiRenderer.initialize(&m_gameState);
|
|
|
|
// Initialize controllers
|
|
m_guiController.initialize(&m_gameState);
|
|
m_playerController.initialize(&m_gameState);
|
|
|
|
// Initialize & load resources
|
|
m_gameState.resManager.initialize(&m_gameState);
|
|
m_gameState.resManager.loadGameAssets();
|
|
m_gameState.resManager.loadLevel(resources::R::Levels::Farm);
|
|
m_gameState.currentLevel = m_gameState.resManager.level(resources::R::Levels::Farm);
|
|
|
|
return true;
|
|
}
|
|
|
|
void FarmlandsGame::onUpdateLogic()
|
|
{
|
|
m_playerController.updateLogic();
|
|
}
|
|
|
|
void FarmlandsGame::onRender()
|
|
{
|
|
m_gameState.sdlRenderer.renderBegin();
|
|
m_gameState.gameRenderer.render();
|
|
m_gameState.guiRenderer.render();
|
|
m_gameState.sdlRenderer.renderEnd();
|
|
}
|
|
|
|
void FarmlandsGame::onEvent(SDL_Event& event)
|
|
{
|
|
// Let controllers handle event
|
|
if (m_guiController.processEvent(event))
|
|
return;
|
|
|
|
if (m_playerController.processEvent(event))
|
|
return;
|
|
|
|
// Nobody? Handle global events
|
|
switch(event.type)
|
|
{
|
|
case SDL_QUIT:
|
|
stop();
|
|
break;
|
|
|
|
case SDL_KEYDOWN:
|
|
if (event.key.keysym.scancode == SDL_Scancode::SDL_SCANCODE_ESCAPE)
|
|
stop();
|
|
break;
|
|
|
|
case SDL_WINDOWEVENT_RESIZED:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void FarmlandsGame::stop()
|
|
{
|
|
m_running = false;
|
|
}
|
|
|
|
int FarmlandsGame::run()
|
|
{
|
|
// Initialize game
|
|
if (!initialize())
|
|
return 1;
|
|
|
|
// Main loop
|
|
while(m_running)
|
|
{
|
|
// Update elapsed time
|
|
Uint32 now = SDL_GetTicks();
|
|
m_gameState.elapsedTime = (now - m_time) * 0.001f;
|
|
m_time = now;
|
|
|
|
SDL_Event event;
|
|
while (SDL_PollEvent(&event))
|
|
onEvent(event);
|
|
|
|
onUpdateLogic();
|
|
onRender();
|
|
}
|
|
|
|
// Cleanup
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
}
|