Posant make_uniques, s'ha quedat tot enmerdat per culpa d'un struct

This commit is contained in:
2024-10-08 13:53:24 +02:00
parent 9d41d14d68
commit 06a4f439c1
11 changed files with 157 additions and 304 deletions

View File

@@ -22,20 +22,16 @@
struct JA_Music_t;
// Constructor
Instructions::Instructions(JA_Music_t *music)
Instructions::Instructions(JA_Music_t *music) : music(music)
{
// Copia los punteros
this->music = music;
input = Input::get();
screen = Screen::get();
asset = Asset::get();
renderer = screen->getRenderer();
renderer = Screen::get()->getRenderer();
// Crea objetos
eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.gif"), asset->get("smb2.txt"), renderer);
tiledbg = new Tiledbg(asset->get("title_bg_tile.png"), {0, 0, param.game.width, param.game.height}, TILED_MODE_STATIC);
fade = new Fade(renderer);
eventHandler = std::make_unique<SDL_Event>();
text = std::make_unique<Text>(Asset::get()->get("smb2.gif"), Asset::get()->get("smb2.txt"), renderer);
tiledbg = std::make_unique<Tiledbg>(Asset::get()->get("title_bg_tile.png"), (SDL_Rect){0, 0, param.game.width, param.game.height}, TILED_MODE_STATIC);
fade = std::make_unique<Fade>(renderer);
// Crea un backbuffer para el renderizador
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.width, param.game.height);
@@ -72,24 +68,9 @@ Instructions::Instructions(JA_Music_t *music)
// Destructor
Instructions::~Instructions()
{
for (auto texture : itemTextures)
{
texture->unload();
delete texture;
}
itemTextures.clear();
for (auto sprite : sprites)
{
delete sprite;
}
sprites.clear();
delete eventHandler;
delete text;
delete tiledbg;
delete fade;
SDL_DestroyTexture(backbuffer);
SDL_DestroyTexture(texture);
}
@@ -98,27 +79,27 @@ Instructions::~Instructions()
void Instructions::iniSprites()
{
// Inicializa las texturas
Texture *item1 = new Texture(renderer, asset->get("item_points1_disk.png"));
itemTextures.push_back(item1);
auto item1 = std::make_unique<Texture>(renderer, Asset::get()->get("item_points1_disk.png"));
itemTextures.push_back(std::move(item1));
Texture *item2 = new Texture(renderer, asset->get("item_points2_gavina.png"));
itemTextures.push_back(item2);
auto item2 = std::make_unique<Texture>(renderer, Asset::get()->get("item_points2_gavina.png"));
itemTextures.push_back(std::move(item2));
Texture *item3 = new Texture(renderer, asset->get("item_points3_pacmar.png"));
itemTextures.push_back(item3);
auto item3 = std::make_unique<Texture>(renderer, Asset::get()->get("item_points3_pacmar.png"));
itemTextures.push_back(std::move(item3));
Texture *item4 = new Texture(renderer, asset->get("item_clock.png"));
itemTextures.push_back(item4);
auto item4 = std::make_unique<Texture>(renderer, Asset::get()->get("item_clock.png"));
itemTextures.push_back(std::move(item4));
Texture *item5 = new Texture(renderer, asset->get("item_coffee.png"));
itemTextures.push_back(item5);
auto item5 = std::make_unique<Texture>(renderer, Asset::get()->get("item_coffee.png"));
itemTextures.push_back(std::move(item5));
// Inicializa los sprites
for (int i = 0; i < (int)itemTextures.size(); ++i)
{
Sprite *sprite = new Sprite(0, 0, param.game.itemSize, param.game.itemSize, itemTextures[i]);
auto sprite = std::make_unique<Sprite>(0, 0, param.game.itemSize, param.game.itemSize, itemTextures[i].get());
sprite->setPos((SDL_Point){spritePos.x, spritePos.y + ((param.game.itemSize + itemSpace) * i)});
sprites.push_back(sprite);
sprites.push_back(std::move(sprite));
}
}
@@ -229,7 +210,7 @@ void Instructions::fillBackbuffer()
SDL_RenderCopy(renderer, texture, nullptr, nullptr);
// Dibuja los sprites
for (auto sprite : sprites)
for (auto &sprite : sprites)
{
sprite->render();
}
@@ -252,7 +233,7 @@ void Instructions::update()
JA_PlayMusic(music);
// Actualiza el objeto screen
screen->update();
Screen::get()->update();
// Incrementa el contador
counter++;
@@ -282,10 +263,10 @@ void Instructions::render()
fillBackbuffer();
// Prepara para empezar a dibujar en la textura de juego
screen->start();
Screen::get()->start();
// Limpia la pantalla
screen->clean(bgColor);
Screen::get()->clean(bgColor);
// Dibuja el mosacico de fondo
tiledbg->render();
@@ -299,13 +280,13 @@ void Instructions::render()
fade->render();
// Vuelca el contenido del renderizador en pantalla
screen->blit();
Screen::get()->blit();
}
// Recarga todas las texturas
void Instructions::reloadTextures()
{
for (auto tex : itemTextures)
for (auto &tex : itemTextures)
{
tex->reLoad();
}
@@ -317,7 +298,7 @@ void Instructions::reloadTextures()
void Instructions::checkEvents()
{
// Comprueba los eventos que hay en la cola
while (SDL_PollEvent(eventHandler) != 0)
while (SDL_PollEvent(eventHandler.get()) != 0)
{
// Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT)
@@ -341,7 +322,7 @@ void Instructions::checkEvents()
void Instructions::checkInput()
{
// Comprueba si se ha pulsado cualquier botón (de los usados para jugar)
if (input->checkAnyButtonPressed())
if (Input::get()->checkAnyButtonPressed())
{
JA_StopMusic();
section::name = section::NAME_TITLE;
@@ -350,7 +331,7 @@ void Instructions::checkInput()
}
// Comprueba el input para el resto de objetos
screen->checkInput();
Screen::get()->checkInput();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego
globalInputs::check();