Añadido el procedimiento reLoadTexture a todos los objetos que lo necesitaban

This commit is contained in:
2022-09-01 20:25:25 +02:00
parent 4e219c47f6
commit 31dea2aeea
16 changed files with 165 additions and 76 deletions

View File

@@ -48,7 +48,7 @@ void Enemy::render()
void Enemy::update() void Enemy::update()
{ {
sprite->update(); sprite->update();
//sprite->animate(); // sprite->animate();
checkPath(); checkPath();
collider = getRect(); collider = getRect();
} }
@@ -77,4 +77,10 @@ SDL_Rect Enemy::getRect()
SDL_Rect &Enemy::getCollider() SDL_Rect &Enemy::getCollider()
{ {
return collider; return collider;
}
// Recarga la textura
void Enemy::reLoadTexture()
{
texture->reLoad();
} }

View File

@@ -80,6 +80,9 @@ public:
// Obtiene el rectangulo de colision del enemigo // Obtiene el rectangulo de colision del enemigo
SDL_Rect &getCollider(); SDL_Rect &getCollider();
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif

View File

@@ -18,7 +18,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
// Crea los objetos // Crea los objetos
scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock); scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock);
itemTracker = new ItemTracker(); itemTracker = new ItemTracker();
room = new Room(asset->get(currentRoom), renderer, asset, itemTracker,&itemsPicked); room = new Room(asset->get(currentRoom), renderer, asset, itemTracker, &itemsPicked);
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room);
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -65,6 +65,62 @@ Game::~Game()
debugText = nullptr; debugText = nullptr;
} }
// 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_D:
debug = !debug;
break;
case SDL_SCANCODE_M:
(JA_GetMusicState() == JA_MUSIC_PLAYING) ? JA_PauseMusic() : JA_ResumeMusic();
break;
case SDL_SCANCODE_F:
screen->switchVideoMode();
reLoadTextures();
break;
case SDL_SCANCODE_F1:
screen->setWindowSize(1);
reLoadTextures();
break;
case SDL_SCANCODE_F2:
screen->setWindowSize(2);
reLoadTextures();
break;
case SDL_SCANCODE_F3:
screen->setWindowSize(3);
reLoadTextures();
break;
case SDL_SCANCODE_F4:
screen->setWindowSize(4);
reLoadTextures();
break;
default:
break;
}
}
}
}
// Bucle para el juego // Bucle para el juego
section_t Game::run() section_t Game::run()
{ {
@@ -94,58 +150,15 @@ void Game::update()
// Actualiza el contador de ticks // Actualiza el contador de ticks
ticks = SDL_GetTicks(); ticks = SDL_GetTicks();
// Comprueba los eventos que hay en la cola // Comprueba los eventos de la cola
while (SDL_PollEvent(eventHandler) != 0) checkEventHandler();
{
// 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_D:
debug = !debug;
break;
case SDL_SCANCODE_M:
(JA_GetMusicState() == JA_MUSIC_PLAYING) ? JA_PauseMusic() : JA_ResumeMusic();
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
room->update(); room->update();
{ {
player->update(); player->update();
checkPlayerAndWalls(); checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
} // Debe ir detras del player update, por si se ha metido en algun muro }
checkPlayerOnBorder(); checkPlayerOnBorder();
checkPlayerOnFloor(); checkPlayerOnFloor();
checkPlayerAndItems(); checkPlayerAndItems();
@@ -393,4 +406,13 @@ void Game::killPlayer()
// Crea la nueva habitación y el nuevo jugador // Crea la nueva habitación y el nuevo jugador
room = new Room(asset->get(currentRoom), renderer, asset, itemTracker, &itemsPicked); room = new Room(asset->get(currentRoom), renderer, asset, itemTracker, &itemsPicked);
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room);
}
// Recarga todas las texturas
void Game::reLoadTextures()
{
player->reLoadTexture();
room->reLoadTexture();
scoreboard->reLoadTexture();
text->reLoadTexture();
} }

View File

@@ -50,6 +50,9 @@ private:
// Pinta los objetos en pantalla // Pinta los objetos en pantalla
void render(); void render();
// Comprueba los eventos de la cola
void checkEventHandler();
// Pone la información de debug en pantalla // Pone la información de debug en pantalla
void renderDebugInfo(); void renderDebugInfo();
@@ -77,6 +80,9 @@ private:
// Mata al jugador // Mata al jugador
void killPlayer(); void killPlayer();
// Recarga todas las texturas
void reLoadTextures();
public: public:
// Constructor // Constructor
Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input); Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input);

View File

@@ -78,4 +78,10 @@ SDL_Point Item::getPos()
{ {
const SDL_Point p = {sprite->getPosX(), sprite->getPosY()}; const SDL_Point p = {sprite->getPosX(), sprite->getPosY()};
return p; return p;
}
// Recarga la textura
void Item::reLoadTexture()
{
texture->reLoad();
} }

View File

@@ -59,6 +59,9 @@ public:
// Obtiene su ubicación // Obtiene su ubicación
SDL_Point getPos(); SDL_Point getPos();
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif

View File

@@ -887,4 +887,10 @@ int Menu::getSelectorHeight(int value)
{ {
return item[value].rect.h; return item[value].rect.h;
} }
}
// Recarga la textura
void Menu::reLoadTexture()
{
text->reLoadTexture();
} }

View File

@@ -143,7 +143,7 @@ private:
public: public:
// Constructor // Constructor
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file=""); Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file = "");
// Destructor // Destructor
~Menu(); ~Menu();
@@ -208,6 +208,9 @@ public:
// Establece el estado de enlace de un item // Establece el estado de enlace de un item
void setLinkedDown(int index, bool value); void setLinkedDown(int index, bool value);
// Recarga la textura
void reLoadTexture();
// hacer procedimientos para establecer el titulo, la x, la y, la tipografia y el tipo de fondo // hacer procedimientos para establecer el titulo, la x, la y, la tipografia y el tipo de fondo
}; };

View File

@@ -289,5 +289,5 @@ player_t Player::getSpawnParams()
// Recarga la textura // Recarga la textura
void Player::reLoadTexture() void Player::reLoadTexture()
{ {
//texture->loadFromFile(asset->get(tileset), renderer); texture->reLoad();
} }

View File

@@ -115,14 +115,14 @@ public:
// Obtiene el rectangulo de colision del jugador // Obtiene el rectangulo de colision del jugador
SDL_Rect &getCollider(); SDL_Rect &getCollider();
// Recarga la textura
void reLoadTexture();
// Deshace el ultimo movimiento // Deshace el ultimo movimiento
void undoLastMove(); void undoLastMove();
// Obtiene algunos parametros del jugador // Obtiene algunos parametros del jugador
player_t getSpawnParams(); player_t getSpawnParams();
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif

View File

@@ -14,7 +14,7 @@ Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTrac
// Crea los objetos // Crea los objetos
load(file_path); load(file_path);
texture = new LTexture(renderer,asset->get(tileset)); texture = new LTexture(renderer, asset->get(tileset));
itemSound = JA_LoadSound(asset->get("item.wav").c_str()); itemSound = JA_LoadSound(asset->get("item.wav").c_str());
// Crea la textura para el mapa de tiles de la habitación // Crea la textura para el mapa de tiles de la habitación
@@ -207,37 +207,37 @@ bool Room::setVars(std::string var, std::string value)
{ {
name = value; name = value;
} }
else if (var == "bgColor") else if (var == "bgColor")
{ {
bgColor = stringToColor(value); bgColor = stringToColor(value);
} }
else if (var == "tileset") else if (var == "tileset")
{ {
tileset = value; tileset = value;
} }
else if (var == "roomUp") else if (var == "roomUp")
{ {
roomUp = value; roomUp = value;
} }
else if (var == "roomDown") else if (var == "roomDown")
{ {
roomDown = value; roomDown = value;
} }
else if (var == "roomLeft") else if (var == "roomLeft")
{ {
roomLeft = value; roomLeft = value;
} }
else if (var == "roomRight") else if (var == "roomRight")
{ {
roomRight = value; roomRight = value;
} }
else if (var == "tilemap") else if (var == "tilemap")
{ {
// Se introducen los valores separados por comas en un vector // Se introducen los valores separados por comas en un vector
@@ -248,11 +248,11 @@ bool Room::setVars(std::string var, std::string value)
tilemap.push_back(std::stoi(tmp)); tilemap.push_back(std::stoi(tmp));
} }
} }
else if (var == "") else if (var == "")
{ {
} }
else else
{ {
success = false; success = false;
@@ -536,13 +536,13 @@ bool Room::enemyCollision(SDL_Rect &rect)
bool Room::itemCollision(SDL_Rect &rect) bool Room::itemCollision(SDL_Rect &rect)
{ {
bool collision = false; bool collision = false;
for (int i =0;i<items.size();i++) for (int i = 0; i < items.size(); i++)
{ {
if (checkCollision(rect, items[i]->getCollider())) if (checkCollision(rect, items[i]->getCollider()))
{ {
itemTracker->addItem(name, items[i]->getPos()); itemTracker->addItem(name, items[i]->getPos());
delete items[i]; delete items[i];
items.erase(items.begin()+i); items.erase(items.begin() + i);
JA_PlaySound(itemSound); JA_PlaySound(itemSound);
*itemsPicked = *itemsPicked + 1; *itemsPicked = *itemsPicked + 1;
collision = true; collision = true;
@@ -550,4 +550,20 @@ bool Room::itemCollision(SDL_Rect &rect)
} }
return collision; return collision;
}
// Recarga la textura
void Room::reLoadTexture()
{
texture->reLoad();
fillMapTexture();
for (auto enemy : enemies)
{
enemy->reLoadTexture();
}
for (auto item : items)
{
item->reLoadTexture();
}
} }

View File

@@ -53,7 +53,7 @@ private:
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
JA_Sound itemSound; // Sonido producido al coger un objeto JA_Sound itemSound; // Sonido producido al coger un objeto
int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego
// Carga las variables desde un fichero // Carga las variables desde un fichero
bool load(std::string file_path); bool load(std::string file_path);
@@ -106,6 +106,9 @@ public:
// Indica si hay colision con un objeto a partir de un rectangulo // Indica si hay colision con un objeto a partir de un rectangulo
bool itemCollision(SDL_Rect &rect); bool itemCollision(SDL_Rect &rect);
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif

View File

@@ -13,7 +13,7 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *it
this->clock = clock; this->clock = clock;
// Reserva memoria para los objetos // Reserva memoria para los objetos
texture = new LTexture(renderer,asset->get("player01.png")); texture = new LTexture(renderer, asset->get("player01.png"));
sprite = new AnimatedSprite(texture, renderer, asset->get("player01.ani")); sprite = new AnimatedSprite(texture, renderer, asset->get("player01.ani"));
sprite->setCurrentAnimation("walk_menu"); sprite->setCurrentAnimation("walk_menu");
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -131,4 +131,11 @@ ScoreBoard::clock_t ScoreBoard::getTime()
time.seconds = timeElapsed / 1000; time.seconds = timeElapsed / 1000;
time.separator = (timeElapsed % 1000 <= 500); time.separator = (timeElapsed % 1000 <= 500);
return time; return time;
}
// Recarga la textura
void ScoreBoard::reLoadTexture()
{
texture->reLoad();
text->reLoadTexture();
} }

View File

@@ -50,6 +50,9 @@ public:
// Actualiza las variables del objeto // Actualiza las variables del objeto
void update(); void update();
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif

View File

@@ -49,10 +49,6 @@ void Text::init()
offset[i].x = ((i - 32) % 15) * boxWidth; offset[i].x = ((i - 32) % 15) * boxWidth;
offset[i].y = ((i - 32) / 15) * boxHeight; offset[i].y = ((i - 32) / 15) * boxHeight;
} }
// printf("Cargando %s\n", file.c_str());
// const std::string texto = "w = "+ std::to_string(boxWidth) + ", h = " + std::to_string(boxHeight);
// printf("%s\n",texto.c_str());
} }
// Escribe texto en pantalla // Escribe texto en pantalla
@@ -179,4 +175,10 @@ void Text::initOffsetFromFile()
int Text::getCharacterWidth() int Text::getCharacterWidth()
{ {
return boxWidth; return boxWidth;
}
// Recarga la textura
void Text::reLoadTexture()
{
texture->reLoad();
} }

View File

@@ -25,9 +25,9 @@ private:
}; };
Offset offset[128]; // Vector con las posiciones y ancho de cada letra Offset offset[128]; // Vector con las posiciones y ancho de cada letra
int boxWidth; // Anchura de la caja de cada caracter en el png int boxWidth; // Anchura de la caja de cada caracter en el png
int boxHeight; // Altura de la caja de cada caracter en el png int boxHeight; // Altura de la caja de cada caracter en el png
std::string file; // Fichero con los descriptores de la fuente std::string file; // Fichero con los descriptores de la fuente
LTexture *texture; // Textura con los bitmaps del texto LTexture *texture; // Textura con los bitmaps del texto
// Inicializador // Inicializador
@@ -63,6 +63,9 @@ public:
// Devuelve el valor de la variable // Devuelve el valor de la variable
int getCharacterWidth(); int getCharacterWidth();
// Recarga la textura
void reLoadTexture();
}; };
#endif #endif