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()
{
sprite->update();
//sprite->animate();
// sprite->animate();
checkPath();
collider = getRect();
}
@@ -78,3 +78,9 @@ SDL_Rect &Enemy::getCollider()
{
return collider;
}
// Recarga la textura
void Enemy::reLoadTexture()
{
texture->reLoad();
}

View File

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

View File

@@ -18,7 +18,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
// Crea los objetos
scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock);
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);
eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -65,6 +65,62 @@ Game::~Game()
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
section_t Game::run()
{
@@ -94,58 +150,15 @@ void Game::update()
// Actualiza el contador de ticks
ticks = SDL_GetTicks();
// 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();
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;
}
}
}
// Comprueba los eventos de la cola
checkEventHandler();
// Actualiza los objetos
room->update();
{
player->update();
checkPlayerAndWalls();
} // Debe ir detras del player update, por si se ha metido en algun muro
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
}
checkPlayerOnBorder();
checkPlayerOnFloor();
checkPlayerAndItems();
@@ -394,3 +407,12 @@ void Game::killPlayer()
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);
}
// 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
void render();
// Comprueba los eventos de la cola
void checkEventHandler();
// Pone la información de debug en pantalla
void renderDebugInfo();
@@ -77,6 +80,9 @@ private:
// Mata al jugador
void killPlayer();
// Recarga todas las texturas
void reLoadTextures();
public:
// Constructor
Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input);

View File

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

View File

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

View File

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

View File

@@ -143,7 +143,7 @@ private:
public:
// Constructor
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file="");
Menu(SDL_Renderer *renderer, Asset *asset, Input *input, std::string file = "");
// Destructor
~Menu();
@@ -208,6 +208,9 @@ public:
// Establece el estado de enlace de un item
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
};

View File

@@ -289,5 +289,5 @@ player_t Player::getSpawnParams()
// Recarga la textura
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
SDL_Rect &getCollider();
// Recarga la textura
void reLoadTexture();
// Deshace el ultimo movimiento
void undoLastMove();
// Obtiene algunos parametros del jugador
player_t getSpawnParams();
// Recarga la textura
void reLoadTexture();
};
#endif

View File

@@ -14,7 +14,7 @@ Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTrac
// Crea los objetos
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());
// Crea la textura para el mapa de tiles de la habitación
@@ -536,13 +536,13 @@ bool Room::enemyCollision(SDL_Rect &rect)
bool Room::itemCollision(SDL_Rect &rect)
{
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()))
{
itemTracker->addItem(name, items[i]->getPos());
delete items[i];
items.erase(items.begin()+i);
items.erase(items.begin() + i);
JA_PlaySound(itemSound);
*itemsPicked = *itemsPicked + 1;
collision = true;
@@ -551,3 +551,19 @@ bool Room::itemCollision(SDL_Rect &rect)
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_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
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
bool load(std::string file_path);
@@ -106,6 +106,9 @@ public:
// Indica si hay colision con un objeto a partir de un rectangulo
bool itemCollision(SDL_Rect &rect);
// Recarga la textura
void reLoadTexture();
};
#endif

View File

@@ -13,7 +13,7 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *it
this->clock = clock;
// 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->setCurrentAnimation("walk_menu");
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -132,3 +132,10 @@ ScoreBoard::clock_t ScoreBoard::getTime()
time.separator = (timeElapsed % 1000 <= 500);
return time;
}
// Recarga la textura
void ScoreBoard::reLoadTexture()
{
texture->reLoad();
text->reLoadTexture();
}

View File

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

View File

@@ -49,10 +49,6 @@ void Text::init()
offset[i].x = ((i - 32) % 15) * boxWidth;
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
@@ -180,3 +176,9 @@ int Text::getCharacterWidth()
{
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
int boxWidth; // Anchura 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
int boxWidth; // Anchura 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
LTexture *texture; // Textura con los bitmaps del texto
// Inicializador
@@ -63,6 +63,9 @@ public:
// Devuelve el valor de la variable
int getCharacterWidth();
// Recarga la textura
void reLoadTexture();
};
#endif