145 lines
2.4 KiB
C++
145 lines
2.4 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
|
|
{
|
|
|
|
FarmlandsGame::FarmlandsGame() :
|
|
m_running(true),
|
|
m_sdlWindow(nullptr),
|
|
m_sdlRenderer(nullptr)
|
|
{
|
|
}
|
|
|
|
bool FarmlandsGame::initialize()
|
|
{
|
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
|
std::cerr << "Failed to initialize SDL!\n";
|
|
return false;
|
|
}
|
|
|
|
int imgFlags = IMG_INIT_PNG;
|
|
if (IMG_Init(IMG_INIT_PNG) != imgFlags) {
|
|
std::cerr << "Failed to initialize SDL_image!\n";
|
|
return false;
|
|
}
|
|
|
|
if (TTF_Init() != 0) {
|
|
std::cerr << "Failed to initialize SDL_ttf!\n";
|
|
return false;
|
|
}
|
|
|
|
m_sdlWindow = SDL_CreateWindow("Farmlands", 0, 0, 1024, 768, SDL_WINDOW_SHOWN);
|
|
if (!m_sdlWindow) {
|
|
std::cerr << "Failed to create main window!\n";
|
|
return false;
|
|
}
|
|
|
|
m_sdlRenderer = SDL_CreateRenderer(m_sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
|
if (!m_sdlRenderer) {
|
|
std::cerr << "Failed to create renderer!\n";
|
|
return false;
|
|
}
|
|
|
|
// Load resources
|
|
m_resourceManager.initialize(m_sdlRenderer);
|
|
m_resourceManager.loadLevel(resources::R::Levels::Farm);
|
|
|
|
return true;
|
|
}
|
|
|
|
void FarmlandsGame::onLogicUpdate()
|
|
{
|
|
|
|
}
|
|
|
|
void FarmlandsGame::onRender()
|
|
{
|
|
SDL_RenderClear(m_sdlRenderer);
|
|
|
|
SDL_Rect dest = { 0, 0, 0, 0};
|
|
SDL_QueryTexture(m_resourceManager.texture(resources::R::Tilesets::Ground), NULL, NULL, &dest.w, &dest.h);
|
|
dest.w *= 4;
|
|
dest.h *= 4;
|
|
|
|
SDL_RenderCopy(m_sdlRenderer, m_resourceManager.texture(resources::R::Tilesets::Ground), nullptr, &dest);
|
|
// Render loading screen
|
|
|
|
SDL_Delay(10);
|
|
|
|
SDL_RenderPresent(m_sdlRenderer);
|
|
}
|
|
|
|
void FarmlandsGame::onEvent(SDL_Event& event)
|
|
{
|
|
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;
|
|
}
|
|
|
|
void FarmlandsGame::dispose()
|
|
{
|
|
if (m_sdlRenderer)
|
|
SDL_DestroyRenderer(m_sdlRenderer);
|
|
|
|
if (m_sdlWindow)
|
|
SDL_DestroyWindow(m_sdlWindow);
|
|
|
|
SDL_Quit();
|
|
}
|
|
|
|
int FarmlandsGame::run()
|
|
{
|
|
// Initialize game
|
|
if (!initialize())
|
|
{
|
|
dispose();
|
|
return 1;
|
|
}
|
|
|
|
// Main loop
|
|
while(m_running)
|
|
{
|
|
SDL_Event event;
|
|
while (SDL_PollEvent(&event))
|
|
onEvent(event);
|
|
|
|
onLogicUpdate();
|
|
onRender();
|
|
}
|
|
|
|
// Cleanup
|
|
dispose();
|
|
return 0;
|
|
}
|
|
|
|
}
|