Añadida la clase debug
This commit is contained in:
214
source/game.cpp
214
source/game.cpp
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user