Ya recuerda los items recogidos

This commit is contained in:
2022-08-27 16:39:44 +02:00
parent ce33b4e10c
commit 17b10a8fef
6 changed files with 47 additions and 22 deletions

View File

@@ -11,7 +11,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
// Reserva memoria para los objetos
eventHandler = new SDL_Event();
map = new Map(asset->get("01.map"), renderer, asset);
itemTracker = new Item_tracker();
map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
player = new Player(renderer, asset, input, map);
debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer);
music = JA_LoadMusic(asset->get("music_surface.ogg").c_str());
@@ -32,6 +33,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
Game::~Game()
{
delete eventHandler;
delete itemTracker;
delete map;
delete player;
delete debugText;
@@ -124,7 +126,7 @@ void Game::checkInput()
if (input->checkInput(INPUT_BUTTON_3, REPEAT_FALSE))
{
delete map;
map = new Map(asset->get("01.map"), renderer, asset);
map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
delete player;
player = new Player(renderer, asset, input, map);
}
@@ -216,7 +218,7 @@ bool Game::changeMap(std::string file)
delete map;
// Crea un objeto habitación nuevo a partir del fichero
map = new Map(asset->get(file), renderer, asset);
map = new Map(asset->get(file), renderer, asset, itemTracker);
success = true;
}

View File

@@ -7,6 +7,7 @@
#include "input.h"
#include "map.h"
#include "player.h"
#include "item_tracker.h"
#include "text.h"
#ifndef GAME_H
@@ -24,6 +25,7 @@ private:
Text *debugText; // Objeto para escribir texto con información de debug
Map *map; // Objeto encargado de gestionar el mapeado del juego
Player *player; // Objeto para gestionar el jugador
Item_tracker *itemTracker; // Objeto para gestionar los items recogidos
section_t section; // Seccion actual dentro del programa
int ticks; // Contador de ticks para ajustar la velocidad del programa
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa

View File

@@ -1,5 +1,6 @@
#pragma once
#include "ifdefs.h"
#include <SDL2/SDL.h>
#include "utils.h"
#include <string>
#include <vector>

View File

@@ -1,17 +1,19 @@
#include "map.h"
// Constructor
Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset)
Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset, Item_tracker *itemTracker)
{
// Inicializa variables
tile_size = 8;
map_width = 40;
map_height = 26;
tileset_width = 32;
name = file.substr(file.find_last_of("\\/") + 1);
// Copia los punteros a objetos
this->asset = asset;
this->renderer = renderer;
this->itemTracker = itemTracker;
// Crea los objetos
texture_tile = new LTexture();
@@ -165,9 +167,13 @@ bool Map::load(std::string file_path)
} while (line != "[/diamond]");
// Comprueba si el actor no ha sido recogido previamente
if (!itemTracker->hasBeenPicked(name, {(int)actor.x, (int)actor.y}))
{
printf("** actor diamond loaded\n\n");
actors.push_back(new ActorDiamond(actor));
}
}
} while (line != "[/actors]");
}
@@ -579,3 +585,10 @@ bool Map::deleteActor(int index)
actors.erase(actors.begin() + index);
return success;
}
// Coge un item
void Map::getItem(int index)
{
const SDL_Rect r = getActorCollider(index);
itemTracker->addItem(name, {r.x, r.y});
}

View File

@@ -4,6 +4,7 @@
#include "utils.h"
#include "asset.h"
#include "const.h"
#include "item_tracker.h"
#include "actor_moving_platform.h"
#include "actor_diamond.h"
#include <string>
@@ -36,6 +37,7 @@ class Map
private:
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
SDL_Renderer *renderer; // El renderizador de la ventana
std::string name; // Identificador de la habitación
std::string room_up; // Identificador de la habitación que se encuentra arriba
std::string room_down; // Identificador de la habitación que se encuentra abajp
std::string room_left; // Identificador de la habitación que se encuentra a la izquierda
@@ -47,6 +49,7 @@ private:
std::vector<Actor *> actors; // Listado con los actores de la habitación
color_t bgColor1; // Color superior del degradado de fondo
color_t bgColor2; // Color inferior del degradado de fondo
Item_tracker *itemTracker; // Objeto que gestiona los items que ya se han recogido
int tile_size; // Ancho del tile en pixels
int map_width; // Ancho del mapa en tiles
@@ -67,7 +70,7 @@ private:
public:
// Constructor
Map(std::string file, SDL_Renderer *renderer, Asset *asset);
Map(std::string file, SDL_Renderer *renderer, Asset *asset, Item_tracker *itemTracker);
// Destructor
~Map();
@@ -110,6 +113,9 @@ public:
// Elimina un actor
bool deleteActor(int index);
// Coge un item
void getItem(int index);
};
#endif

View File

@@ -448,6 +448,7 @@ int Player::checkActors()
{
diamonds++;
JA_PlaySound(sound_coin);
map->getItem(index);
map->deleteActor(index);
}