forked from jaildesigner-jailgames/jaildoctors_dilemma
121 lines
2.6 KiB
C++
121 lines
2.6 KiB
C++
#include "game.h"
|
|
|
|
// Constructor
|
|
Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input)
|
|
{
|
|
// Copia los punteros
|
|
mRenderer = renderer;
|
|
mAsset = asset;
|
|
mLang = lang;
|
|
mInput = input;
|
|
|
|
mScreen = new Screen(window, renderer);
|
|
mRoom = new Room(mAsset->get("01.room"), mRenderer, mAsset);
|
|
mEventHandler = new SDL_Event();
|
|
mTextureText = new LTexture();
|
|
mText = new Text(mAsset->get("nokia2.txt"), mTextureText, renderer);
|
|
mFade = new Fade(renderer);
|
|
}
|
|
|
|
Game::~Game()
|
|
{
|
|
mRenderer = nullptr;
|
|
mAsset = nullptr;
|
|
mLang = nullptr;
|
|
mInput = nullptr;
|
|
|
|
delete mEventHandler;
|
|
mEventHandler = nullptr;
|
|
|
|
mTextureText->unload();
|
|
delete mTextureText;
|
|
mTextureText = nullptr;
|
|
|
|
delete mScreen;
|
|
mScreen = nullptr;
|
|
|
|
delete mRoom;
|
|
mRoom = nullptr;
|
|
|
|
delete mText;
|
|
mText = nullptr;
|
|
|
|
delete mFade;
|
|
mFade = nullptr;
|
|
}
|
|
|
|
// Inicializa las variables necesarias para la sección 'Game'
|
|
void Game::init()
|
|
{
|
|
// Carga los recursos
|
|
loadMedia();
|
|
|
|
mTicks = 0;
|
|
mTicksSpeed = 15;
|
|
|
|
mSection.name = SECTION_PROG_GAME;
|
|
mSection.subsection = SECTION_GAME_PLAY;
|
|
}
|
|
|
|
// Carga los recursos necesarios para la sección 'Game'
|
|
bool Game::loadMedia()
|
|
{
|
|
bool success = true;
|
|
|
|
// Texturas
|
|
success &= loadTextureFromFile(mTextureText, mAsset->get("nokia2.png"), mRenderer);
|
|
|
|
return success;
|
|
}
|
|
|
|
// Bucle para el juego
|
|
section_t Game::run()
|
|
{
|
|
init();
|
|
|
|
while (mSection.name == SECTION_PROG_GAME)
|
|
{
|
|
// Sección juego jugando
|
|
if (mSection.subsection == SECTION_GAME_PLAY)
|
|
{
|
|
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
|
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
|
{
|
|
// Actualiza el contador de ticks
|
|
mTicks = SDL_GetTicks();
|
|
|
|
// Comprueba los eventos que hay en la cola
|
|
while (SDL_PollEvent(mEventHandler) != 0)
|
|
{
|
|
// Evento de salida de la aplicación
|
|
if (mEventHandler->type == SDL_QUIT)
|
|
{
|
|
mSection.name = SECTION_PROG_QUIT;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Prepara para dibujar el frame
|
|
const color_t color = {0xAA, 0x55, 0x55};
|
|
mScreen->start();
|
|
mScreen->clean(color);
|
|
mScreen->clean(mRoom->getBGColor());
|
|
|
|
mRoom->draw();
|
|
|
|
// Escribe las medidas de ancho y alto de la pantalla
|
|
mText->writeCentered(GAMECANVAS_CENTER_X, 0, std::to_string(GAMECANVAS_WIDTH), -1);
|
|
mText->write(0, GAMECANVAS_CENTER_Y - (mText->getCharacterWidth() / 2), std::to_string(GAMECANVAS_HEIGHT), -1);
|
|
|
|
// Texto en el centro de la pantalla
|
|
mText->writeCentered(GAMECANVAS_CENTER_X, GAMECANVAS_CENTER_Y - (mText->getCharacterWidth() / 2), mRoom->getName(), -1);
|
|
|
|
// Actualiza la pantalla
|
|
mScreen->blit();
|
|
}
|
|
}
|
|
|
|
return mSection;
|
|
}
|