Añadida la clase debug

This commit is contained in:
2022-09-21 19:24:27 +02:00
parent 241c63340c
commit d31ab28a12
9 changed files with 345 additions and 172 deletions

View File

@@ -1,13 +1,15 @@
#include "game.h"
// Constructor
Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Debug *debug)
{
// Copia punteros
this->renderer = renderer;
this->asset = asset;
this->screen = screen;
this->input = input;
this->debug = debug;
this->debug->setEnabled(true);
// Reserva memoria para los objetos
eventHandler = new SDL_Event();
@@ -15,7 +17,6 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
player = new Player(renderer, asset, input, map);
enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile()));
debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer);
music = JA_LoadMusic(asset->get("music_surface.ogg").c_str());
// Inicializa variables
@@ -25,8 +26,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
section.name = SECTION_PROG_GAME;
section.subsection = SUBSECTION_GAME_PLAY;
debug = true;
musicEnabled = !debug;
musicEnabled = !debug->getEnabled();
;
}
// Destructor
@@ -37,7 +38,6 @@ Game::~Game()
delete map;
delete player;
delete enemyEngine;
delete debugText;
JA_DeleteMusic(music);
}
@@ -73,73 +73,18 @@ void Game::update()
{
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// Comprueba los eventos de la cola
checkEventHandler();
// 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;
}
else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0))
{
switch (eventHandler->key.keysym.scancode)
{
case SDL_SCANCODE_ESCAPE:
section.name = SECTION_PROG_QUIT;
break;
case SDL_SCANCODE_D:
debug = !debug;
musicEnabled = !debug;
musicEnabled ? JA_ResumeMusic() : JA_PauseMusic();
break;
case SDL_SCANCODE_M:
musicEnabled = !musicEnabled;
musicEnabled ? JA_ResumeMusic() : JA_PauseMusic();
break;
case SDL_SCANCODE_R:
delete map;
map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
delete player;
player = new Player(renderer, asset, input, map);
break;
case SDL_SCANCODE_F:
screen->switchVideoMode();
break;
case SDL_SCANCODE_F1:
screen->setWindowSize(1);
break;
case SDL_SCANCODE_F2:
screen->setWindowSize(2);
break;
case SDL_SCANCODE_F3:
screen->setWindowSize(3);
break;
case SDL_SCANCODE_F4:
screen->setWindowSize(4);
break;
default:
break;
}
}
}
// Actualiza los objetos
debug->clear();
map->update();
enemyEngine->update();
player->update();
checkScreenBorders();
checkInput();
updateDebugInfo();
}
}
@@ -160,20 +105,97 @@ void Game::render()
screen->blit();
}
// Comprueba la entrada
void Game::checkInput()
// Comprueba los eventos de la cola
void Game::checkEventHandler()
{
// 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;
}
else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0))
{
switch (eventHandler->key.keysym.scancode)
{
case SDL_SCANCODE_ESCAPE:
section.name = SECTION_PROG_QUIT;
break;
case SDL_SCANCODE_D:
debug->switchEnabled();
musicEnabled = !debug->getEnabled();
musicEnabled ? JA_ResumeMusic() : JA_PauseMusic();
break;
case SDL_SCANCODE_M:
musicEnabled = !musicEnabled;
musicEnabled ? JA_ResumeMusic() : JA_PauseMusic();
break;
case SDL_SCANCODE_R:
delete map;
map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
delete player;
player = new Player(renderer, asset, input, map);
break;
case SDL_SCANCODE_F:
screen->switchVideoMode();
break;
case SDL_SCANCODE_F1:
screen->setWindowSize(1);
break;
case SDL_SCANCODE_F2:
screen->setWindowSize(2);
break;
case SDL_SCANCODE_F3:
screen->setWindowSize(3);
break;
case SDL_SCANCODE_F4:
screen->setWindowSize(4);
break;
default:
break;
}
}
}
}
// Muestra información de depuración
// Pasa la información de debug
void Game::updateDebugInfo()
{
debug->add("R - Reload player and map");
debug->add("D - Toggle debug mode");
debug->add(std::to_string((int)player->sprite->getPosX()) + "," + std::to_string((int)player->sprite->getPosY()) + "," + std::to_string((int)player->sprite->getWidth()) + "," + std::to_string((int)player->sprite->getHeight()));
debug->add("VY " + std::to_string(player->vy) + " " + std::to_string(player->jumpStrenght));
debug->add("VX " + std::to_string(player->vx));
debug->add("jump_pressed " + std::to_string(player->jumpPressed));
debug->add("isOnFloor " + std::to_string(player->isOnFloor()));
debug->add("getTile(" + std::to_string(player->underFeet[0].x) + "," + std::to_string(player->underFeet[0].y) + ") = " + std::to_string(player->map->getTile(player->underFeet[0])));
debug->add("state " + std::to_string(player->state));
debug->add(map->getName() + " (" + map->getRoomFileName(b_top) + ", " + map->getRoomFileName(b_right) + ", " + map->getRoomFileName(b_bottom) + ", " + map->getRoomFileName(b_left) + ")");
debug->add("hookedOn = " + std::to_string(player->hookedOnMovingPlatform));
debug->add("DIAMONDS = " + std::to_string(player->diamonds));
}
// Pone la información de debug en pantalla
void Game::renderDebugInfo()
{
if (!debug)
if (!debug->getEnabled())
{
return;
}
// Pinta la rejilla
// Pinta la rejilla
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 16);
for (int i = 0; i < 240; i += 8)
{
@@ -184,54 +206,14 @@ void Game::renderDebugInfo()
SDL_RenderDrawLine(renderer, i, 0, i, 240);
}
// Pinta el texto
const int inc = debugText->getCharacterWidth() + 1;
int line = 0;
std::string text = "";
text = "R - Reload player and map";
debugText->write(1, 210, text);
text = "D - Toggle debug mode";
debugText->write(1, 216, text);
text = std::to_string((int)player->sprite->getPosX()) + "," + std::to_string((int)player->sprite->getPosY()) + "," + std::to_string((int)player->sprite->getWidth()) + "," + std::to_string((int)player->sprite->getHeight());
debugText->write(0, line, text);
text = "VY " + std::to_string(player->vy) + " " + std::to_string(player->jumpStrenght);
debugText->write(0, line += inc, text);
text = "VX " + std::to_string(player->vx);
debugText->write(0, line += inc, text);
text = "jump_pressed " + std::to_string(player->jumpPressed);
debugText->write(0, line += inc, text);
text = "isOnFloor " + std::to_string(player->isOnFloor());
debugText->write(0, line += inc, text);
const std::string foot_x = std::to_string(player->underFeet[0].x);
const std::string foot_y = std::to_string(player->underFeet[0].y);
const std::string gettile = std::to_string(player->map->getTile(player->underFeet[0]));
text = "getTile(" + foot_x + "," + foot_y + ") = " + gettile;
debugText->write(0, line += inc, text);
text = "state " + std::to_string(player->state);
debugText->write(0, line += inc, text);
text = map->getName() + " (" + map->getRoomFileName(b_top) + ", " + map->getRoomFileName(b_right) + ", " + map->getRoomFileName(b_bottom) + ", " + map->getRoomFileName(b_left) + ")";
debugText->write(0, line += inc, text);
text = "hookedOn = " + std::to_string(player->hookedOnMovingPlatform);
debugText->write(0, line += inc, text);
text = "DIAMONDS = " + std::to_string(player->diamonds);
debugText->write(0, line += inc, text);
// Pinta mascaras
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 128);
SDL_Rect rect = player->sprite->getRect();
SDL_RenderFillRect(renderer, &rect);
// Pinta el texto
debug->setPos({1, 1});
debug->render();
}
// Cambia el mapa