Optimizada la carga de las animaciones de los globos. Cacheada
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "animatedsprite.h"
|
||||
|
||||
// Constructor
|
||||
AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer, std::string file, std::stringstream *stream)
|
||||
AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer, std::string file, std::vector<std::string> *buffer)
|
||||
{
|
||||
// Copia los punteros
|
||||
setTexture(texture);
|
||||
@@ -13,9 +13,9 @@ AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer, std::s
|
||||
loadFromFile(file);
|
||||
}
|
||||
|
||||
else if (stream)
|
||||
else if (buffer)
|
||||
{
|
||||
loadFromStream(stream);
|
||||
loadFromVector(buffer);
|
||||
}
|
||||
|
||||
// Inicializa variables
|
||||
@@ -310,31 +310,26 @@ bool AnimatedSprite::loadFromFile(std::string filePath)
|
||||
return success;
|
||||
}
|
||||
|
||||
// Carga la animación desde un stream
|
||||
bool AnimatedSprite::loadFromStream(std::stringstream *stream)
|
||||
// Carga la animación desde un vector
|
||||
bool AnimatedSprite::loadFromVector(std::vector<std::string> *source)
|
||||
{
|
||||
// Inicializa variables
|
||||
int framesPerRow = 0;
|
||||
int frameWidth = 0;
|
||||
int frameHeight = 0;
|
||||
int maxTiles = 0;
|
||||
|
||||
static int number = 0;
|
||||
number++;
|
||||
std::cout << "Reading stream #" << number << std::endl;
|
||||
|
||||
// Indicador de éxito en la carga
|
||||
// Indicador de éxito en el proceso
|
||||
bool success = true;
|
||||
|
||||
std::string line;
|
||||
|
||||
while (std::getline(*stream, line))
|
||||
// Recorre todo el vector
|
||||
int index = 0;
|
||||
while (index < source->size())
|
||||
{
|
||||
std::cout << "***: "<<line << std::endl;
|
||||
}
|
||||
// Lee desde el vector
|
||||
line = source->at(index);
|
||||
|
||||
// Procesa el fichero linea a linea
|
||||
while (std::getline(*stream, line))
|
||||
{
|
||||
// Si la linea contiene el texto [animation] se realiza el proceso de carga de una animación
|
||||
if (line == "[animation]")
|
||||
{
|
||||
@@ -345,7 +340,9 @@ bool AnimatedSprite::loadFromStream(std::stringstream *stream)
|
||||
|
||||
do
|
||||
{
|
||||
std::getline(*stream, line);
|
||||
// Aumenta el indice para leer la siguiente linea
|
||||
index++;
|
||||
line = source->at(index);
|
||||
|
||||
// Encuentra la posición del caracter '='
|
||||
int pos = line.find("=");
|
||||
@@ -440,13 +437,14 @@ bool AnimatedSprite::loadFromStream(std::stringstream *stream)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Una vez procesada la linea, aumenta el indice para pasar a la siguiente
|
||||
index++;
|
||||
}
|
||||
|
||||
// Pone un valor por defecto
|
||||
setPos({0, 0, frameWidth, frameHeight});
|
||||
|
||||
std::cout << "Closing stream #" << number << std::endl;
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ private:
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
AnimatedSprite(LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::stringstream *stream = nullptr);
|
||||
AnimatedSprite(LTexture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::vector<std::string> *buffer = nullptr);
|
||||
|
||||
// Destructor
|
||||
~AnimatedSprite();
|
||||
@@ -70,8 +70,8 @@ public:
|
||||
// Carga la animación desde un fichero
|
||||
bool loadFromFile(std::string filePath);
|
||||
|
||||
// Carga la animación desde un stream
|
||||
bool loadFromStream(std::stringstream *stream);
|
||||
// Carga la animación desde un vector
|
||||
bool loadFromVector(std::vector<std::string> *source);
|
||||
|
||||
// Establece la animacion actual
|
||||
void setCurrentAnimation(std::string name = "default");
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
#include "balloon.h"
|
||||
|
||||
// Constructor
|
||||
Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::stringstream *stream, SDL_Renderer *renderer)
|
||||
Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::vector<std::string> *buffer, SDL_Renderer *renderer)
|
||||
{
|
||||
mSprite = new AnimatedSprite(texture, renderer, "", stream);
|
||||
mSprite = new AnimatedSprite(texture, renderer, "", buffer);
|
||||
disable();
|
||||
|
||||
mEnabled = true;
|
||||
|
||||
@@ -141,7 +141,7 @@ private:
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::stringstream *stream, SDL_Renderer *renderer);
|
||||
Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::vector<std::string> *buffer, SDL_Renderer *renderer);
|
||||
|
||||
// Destructor
|
||||
~Balloon();
|
||||
|
||||
@@ -48,10 +48,10 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
mTextureGameText = new LTexture(mRenderer, mAsset->get("game_text.png"));
|
||||
mTextureItems = new LTexture(mRenderer, mAsset->get("items.png"));
|
||||
|
||||
balloon1Animation = new std::stringstream;
|
||||
balloon2Animation = new std::stringstream;
|
||||
balloon3Animation = new std::stringstream;
|
||||
balloon4Animation = new std::stringstream;
|
||||
balloon1Animation = new std::vector<std::string>;
|
||||
balloon2Animation = new std::vector<std::string>;
|
||||
balloon3Animation = new std::vector<std::string>;
|
||||
balloon4Animation = new std::vector<std::string>;
|
||||
|
||||
loadAnimations(mAsset->get("balloon1.ani"), balloon1Animation);
|
||||
loadAnimations(mAsset->get("balloon2.ani"), balloon2Animation);
|
||||
@@ -1871,7 +1871,6 @@ void Game::popBalloon(Balloon *balloon)
|
||||
|
||||
// En cualquier otro caso, crea dos globos de un tipo inferior
|
||||
default:
|
||||
// Balloon *b1 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0, mRenderer);
|
||||
const int index = createBalloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0);
|
||||
balloons.at(index)->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||
if (balloons.at(index)->getClass() == BALLOON_CLASS)
|
||||
@@ -2035,8 +2034,6 @@ Uint8 Game::countBalloons()
|
||||
// Obtiene la textura correspondiente en funcion del tipo
|
||||
LTexture *Game::balloonTexture(int kind)
|
||||
{
|
||||
std::cout << " ********** kind: " << kind << std::endl;
|
||||
|
||||
if (kind == 1 || kind == 5)
|
||||
{
|
||||
return balloon1Texture;
|
||||
@@ -2061,7 +2058,7 @@ LTexture *Game::balloonTexture(int kind)
|
||||
}
|
||||
|
||||
// Obtiene la animacion correspondiente en funcion del tipo
|
||||
std::stringstream *Game::balloonStreamAnimation(int kind)
|
||||
std::vector<std::string> *Game::balloonStreamAnimation(int kind)
|
||||
{
|
||||
if (kind == 1 || kind == 5)
|
||||
{
|
||||
@@ -2186,9 +2183,9 @@ void Game::checkPlayerItemCollision(Player *player)
|
||||
// Comprueba y procesa la colisión entre las balas y los globos
|
||||
void Game::checkBulletBalloonCollision()
|
||||
{
|
||||
for (auto balloon : balloons)
|
||||
for (auto bullet : bullets)
|
||||
{
|
||||
for (auto bullet : bullets)
|
||||
for (auto balloon : balloons)
|
||||
{
|
||||
if (balloon->isEnabled() && (!balloon->isInvulnerable()) && bullet->isActive())
|
||||
{
|
||||
@@ -2227,6 +2224,7 @@ void Game::checkBulletBalloonCollision()
|
||||
mCoffeeMachineEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3623,20 +3621,18 @@ void Game::checkEventHandler()
|
||||
}
|
||||
|
||||
// Carga las animaciones
|
||||
void Game::loadAnimations(std::string filePath, std::stringstream *buffer)
|
||||
void Game::loadAnimations(std::string filePath, std::vector<std::string> *buffer)
|
||||
{
|
||||
std::ifstream file(filePath);
|
||||
std::string line;
|
||||
|
||||
if (file)
|
||||
{
|
||||
std::cout << "Animation loaded: " << filePath.substr(filePath.find_last_of("\\/") + 1).c_str() << std::endl;
|
||||
*buffer << file.rdbuf();
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
buffer->push_back(line);
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
|
||||
// std::string line;
|
||||
// while (std::getline(*buffer, line))
|
||||
//{
|
||||
// std::cout << line << std::endl;
|
||||
// }
|
||||
}
|
||||
@@ -18,7 +18,7 @@
|
||||
#include "text.h"
|
||||
#include "utils.h"
|
||||
#include "writer.h"
|
||||
#include "iostream"
|
||||
#include <iostream>
|
||||
|
||||
#ifndef GAME_H
|
||||
#define GAME_H
|
||||
@@ -151,10 +151,10 @@ private:
|
||||
LTexture *mTextureGameText; // Textura para los sprites con textos
|
||||
LTexture *mTextureItems; // Textura para los items
|
||||
|
||||
std::stringstream *balloon1Animation; // Información para la animación de los globos
|
||||
std::stringstream *balloon2Animation; // Información para la animación de los globos
|
||||
std::stringstream *balloon3Animation; // Información para la animación de los globos
|
||||
std::stringstream *balloon4Animation; // Información para la animación de los globos
|
||||
std::vector<std::string> *balloon1Animation; // Información para la animación de los globos
|
||||
std::vector<std::string> *balloon2Animation; // Información para la animación de los globos
|
||||
std::vector<std::string> *balloon3Animation; // Información para la animación de los globos
|
||||
std::vector<std::string> *balloon4Animation; // Información para la animación de los globos
|
||||
|
||||
Text *mText; // Fuente para los textos del juego
|
||||
Text *mTextBig; // Fuente de texto grande
|
||||
@@ -363,7 +363,7 @@ private:
|
||||
LTexture *balloonTexture(int kind);
|
||||
|
||||
// Obtiene la animacion correspondiente en funcion del tipo
|
||||
std::stringstream *balloonStreamAnimation(int kind);
|
||||
std::vector<std::string> *balloonStreamAnimation(int kind);
|
||||
|
||||
// Vacia el vector de globos
|
||||
void freeBalloons();
|
||||
@@ -510,7 +510,7 @@ private:
|
||||
bool allPlayersAreDead();
|
||||
|
||||
// Carga las animaciones
|
||||
void loadAnimations(std::string filePath, std::stringstream *buffer);
|
||||
void loadAnimations(std::string filePath, std::vector<std::string> *buffer);
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
|
||||
Reference in New Issue
Block a user