#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; }