Files
volcano_2022/source/game.cpp

144 lines
3.3 KiB
C++

#include "game.h"
// Constructor
Game::Game(SDL_Renderer *renderer, Asset *asset, Screen *screen, Input *input)
{
this->renderer = renderer;
this->asset = asset;
this->screen = screen;
this->input = input;
eventHandler = new SDL_Event();
map = new Map(asset->get("01.map"), renderer, asset);
player = new Player(renderer, asset, input, map);
debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer);
}
// Destructor
Game::~Game()
{
delete eventHandler;
delete map;
delete player;
delete debugText;
}
// Bucle para el juego
section_t Game::run()
{
init();
while (section.name == SECTION_PROG_GAME)
{
// Sección juego jugando
if (section.subsection == SUBSECTION_GAME_PLAY)
{
update();
render();
}
}
return section;
}
// Inicializa las variables necesarias para la sección 'Game'
void Game::init()
{
ticks = 0;
ticksSpeed = 15;
section.name = SECTION_PROG_GAME;
section.subsection = SUBSECTION_GAME_PLAY;
debug = true;
}
// Actualiza el juego, las variables, comprueba la entrada, etc.
void Game::update()
{
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
if (SDL_GetTicks() - ticks > ticksSpeed)
{
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// Comprueba los eventos que hay en la cola
while (SDL_PollEvent(eventHandler) != 0)
{
// Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT)
{
section.name = SECTION_PROG_QUIT;
break;
}
}
player->update();
checkInput();
}
}
// Pinta los objetos en pantalla
void Game::render()
{
// Prepara para dibujar el frame
screen->start();
screen->clean();
// Dibuja los objetos
map->render();
player->render();
renderDebugInfo();
// Actualiza la pantalla
screen->blit();
}
// Comprueba la entrada
void Game::checkInput()
{
if (input->checkInput(INPUT_BUTTON_2, REPEAT_FALSE))
{
debug = !debug;
}
if (input->checkInput(INPUT_BUTTON_3, REPEAT_FALSE))
{
delete player;
player = new Player(renderer, asset, input, map);
}
}
// Muestra información de depuración
void Game::renderDebugInfo()
{
if (!debug)
{
return;
}
int line = 0;
std::string text = "";
text = std::to_string((int)player->sprite->getPosX()) + "," + std::to_string((int)player->sprite->getPosY());
debugText->write(0, line, text, -1);
text = "VY " + std::to_string(player->vy) + " " + std::to_string(player->jumpStrenght);
debugText->write(0, line += 6, text, -1);
text = "VX " + std::to_string(player->vx);
debugText->write(0, line += 6, text, -1);
text = "jump_pressed " + std::to_string(player->jumpPressed);
debugText->write(0, line += 6, text, -1);
text = "isOnFloor " + std::to_string(player->isOnFloor());
debugText->write(0, line += 6, text, -1);
text = "getTile " + std::to_string(player->map->getTile(player->collider[0]));
debugText->write(0, line += 6, text, -1);
text = "state " + std::to_string(player->state);
debugText->write(0, line += 6, text, -1);
}