eliminat el punter al renderer de 50.000 llocs

This commit is contained in:
2024-07-28 10:45:14 +02:00
parent 7501b4936f
commit 2948684ad3
58 changed files with 492 additions and 401 deletions

View File

@@ -1,37 +1,16 @@
frameWidth=8
frameHeight=8
frameWidth=10
frameHeight=10
[animation]
name=orange
name=normal
speed=10
loop=0
frames=0,1,2,3,4,5,6,7,8,9
[/animation]
[animation]
name=blue
name=stopped
speed=20
loop=0
frames=12,13,14,15,16,17,18,19,20,21
[/animation]
[animation]
name=green
speed=10
loop=0
frames=24,25,26,27,28,29,30,31,32,33
[/animation]
[animation]
name=red
speed=20
loop=0
frames=36,37,38,39,40,41,42,43,44,45
[/animation]
[animation]
name=pop
speed=5
loop=-1
frames=48,49,50,51,52,53,54,55,56,57,58,59
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

BIN
data/gfx/balloon1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,9 @@
frameWidth=10
frameHeight=10
[animation]
name=default
speed=5
loop=-1
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

View File

@@ -1,37 +1,16 @@
frameWidth=13
frameHeight=13
frameWidth=16
frameHeight=16
[animation]
name=orange
name=normal
speed=10
loop=0
frames=0,1,2,3,4,5,6,7,8,9
[/animation]
[animation]
name=blue
name=stopped
speed=20
loop=0
frames=12,13,14,15,16,17,18,19,20,21
[/animation]
[animation]
name=green
speed=10
loop=0
frames=24,25,26,27,28,29,30,31,32,33
[/animation]
[animation]
name=red
speed=20
loop=0
frames=36,37,38,39,40,41,42,43,44,45
[/animation]
[animation]
name=pop
speed=5
loop=-1
frames=48,49,50,51,52,53,54,55,56,57,58,59
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

BIN
data/gfx/balloon2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,9 @@
frameWidth=16
frameHeight=16
[animation]
name=default
speed=5
loop=-1
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,37 +1,16 @@
frameWidth=21
frameHeight=21
frameWidth=26
frameHeight=26
[animation]
name=orange
name=normal
speed=10
loop=0
frames=0,1,2,3,4,5,6,7,8,9
[/animation]
[animation]
name=blue
name=stopped
speed=20
loop=0
frames=12,13,14,15,16,17,18,19,20,21
[/animation]
[animation]
name=green
speed=10
loop=0
frames=24,25,26,27,28,29,30,31,32,33
[/animation]
[animation]
name=red
speed=20
loop=0
frames=36,37,38,39,40,41,42,43,44,45
[/animation]
[animation]
name=pop
speed=5
loop=-1
frames=48,49,50,51,52,53,54,55,56,57,58,59
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

BIN
data/gfx/balloon3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -0,0 +1,9 @@
frameWidth=26
frameHeight=26
[animation]
name=default
speed=5
loop=-1
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,44 +1,16 @@
frameWidth=37
frameHeight=37
frameWidth=46
frameHeight=46
[animation]
name=orange
name=normal
speed=10
loop=0
frames=0,1,2,3,4,5,6,7,8,9
[/animation]
[animation]
name=blue
name=stopped
speed=20
loop=0
frames=12,13,14,15,16,17,18,19,20,21
[/animation]
[animation]
name=green
speed=10
loop=0
frames=24,25,26,27,28,29,30,31,32,33
[/animation]
[animation]
name=red
speed=20
loop=0
frames=36,37,38,39,40,41,42,43,44,45
[/animation]
[animation]
name=powerball
speed=10
loop=0
frames=10
[/animation]
[animation]
name=pop
speed=5
loop=-1
frames=48,49,50,51,52,53,54,55,56,57,58,59
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

BIN
data/gfx/balloon4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,9 @@
frameWidth=46
frameHeight=46
[animation]
name=default
speed=5
loop=-1
frames=0,1,2,3,4,5,6,7,8,9
[/animation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

BIN
data/gfx/powerball.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

View File

@@ -39,15 +39,15 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par
const int clouds2y = base - 101;
const float clouds1speed = 0.1f;
const float clouds2speed = 0.05f;
clouds1A = new MovingSprite(0, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer);
clouds1B = new MovingSprite(rect.w, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture, renderer);
clouds1A = new MovingSprite(0, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture);
clouds1B = new MovingSprite(rect.w, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture);
clouds2A = new MovingSprite(0, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer);
clouds2B = new MovingSprite(rect.w, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture, renderer);
clouds2A = new MovingSprite(0, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture);
clouds2B = new MovingSprite(rect.w, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture);
buildingsSprite = new Sprite(0, 0, buildingsTexture->getWidth(), buildingsTexture->getHeight(), buildingsTexture, renderer);
gradientSprite = new Sprite(0, 0, rect.w, rect.h, gradientsTexture, renderer);
grassSprite = new Sprite(0, 0, grassTexture->getWidth(), grassTexture->getHeight() / 2, grassTexture, renderer);
buildingsSprite = new Sprite(0, 0, buildingsTexture->getWidth(), buildingsTexture->getHeight(), buildingsTexture);
gradientSprite = new Sprite(0, 0, rect.w, rect.h, gradientsTexture);
grassSprite = new Sprite(0, 0, grassTexture->getWidth(), grassTexture->getHeight() / 2, grassTexture);
// Inicializa objetos
clouds1A->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight());

View File

@@ -4,7 +4,7 @@
// Constructor
Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, Texture *texture, std::vector<std::string> *animation, SDL_Renderer *renderer)
{
sprite = new AnimatedSprite(texture, renderer, "", animation);
sprite = new AnimatedSprite(texture, "", animation);
disable();
enabled = true;
@@ -210,14 +210,7 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c
// Añade rotación al sprite
sprite->setRotate(false);
sprite->setRotateSpeed(0);
if (velX > 0.0f)
{
sprite->setRotateAmount(2.0);
}
else
{
sprite->setRotateAmount(-2.0);
}
velX > 0.0f ? sprite->setRotateAmount(2.0) : sprite->setRotateAmount(-2.0);
break;
@@ -289,9 +282,13 @@ void Balloon::allignTo(int x)
posX = float(x - (width / 2));
if (posX < PLAY_AREA_LEFT)
{
posX = PLAY_AREA_LEFT + 1;
}
else if ((posX + width) > PLAY_AREA_RIGHT)
{
posX = float(PLAY_AREA_RIGHT - width - 1);
}
// Posición X,Y del sprite
sprite->setPosX(getPosX());
@@ -304,7 +301,7 @@ void Balloon::allignTo(int x)
// Pinta el globo en la pantalla
void Balloon::render()
{
if ((visible) && (enabled))
if (visible && enabled)
{
if (bouncing.enabled)
{
@@ -325,7 +322,7 @@ void Balloon::render()
sprite->render();
if (kind == POWER_BALL)
{
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer());
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture());
sp->setSpriteClip(407, 0, 37, 37);
sp->render();
delete sp;
@@ -338,7 +335,7 @@ void Balloon::render()
if (kind == POWER_BALL and !popping)
{
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer());
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture());
sp->setSpriteClip(407, 0, 37, 37);
sp->render();
delete sp;
@@ -579,16 +576,16 @@ void Balloon::updateState()
{
stoppedCounter--;
}
// Quitarles el estado "detenido" si no estan explosionando
// Si el contador ha llegado a cero
else if (!isPopping())
{
{ // Quitarles el estado "detenido" si no estan explosionando
setStop(false);
// Si es una powerball vuelve a rodar
if (kind == POWER_BALL)
{
sprite->setRotate(true);
}
setStop(false);
}
}
}
@@ -864,4 +861,16 @@ void Balloon::updateBounce()
bounceStop();
}
}
}
// Indica si el globo se puede explotar
bool Balloon::canBePopped()
{
return isEnabled() && !isPopping() && !isBeingCreated();
}
// Indica si el globo se puede destruir
bool Balloon::canBeDestroyed()
{
return isEnabled() && !isPopping();
}

View File

@@ -56,10 +56,10 @@
#define BALLOON_SPEED_5 1.00f
// Tamaño de los globos
#define BALLOON_WIDTH_1 8
#define BALLOON_WIDTH_2 13
#define BALLOON_WIDTH_3 21
#define BALLOON_WIDTH_4 37
#define BALLOON_WIDTH_1 10
#define BALLOON_WIDTH_2 16
#define BALLOON_WIDTH_3 26
#define BALLOON_WIDTH_4 46
// PowerBall
#define POWERBALL_SCREENPOWER_MINIMUM 10
@@ -246,4 +246,10 @@ public:
// Obtiene le valor de la variable
Uint8 getPower();
// Indica si el globo se puede explotar
bool canBePopped();
// Indica si el globo se puede destruir
bool canBeDestroyed();
};

View File

@@ -2,9 +2,9 @@
#include "bullet.h"
// Constructor
Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture, SDL_Renderer *renderer)
Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture)
{
sprite = new Sprite({x, y, 10, 10}, texture, renderer);
sprite = new Sprite({x, y, 10, 10}, texture);
// Posición inicial del objeto
posX = x;

View File

@@ -36,7 +36,7 @@ private:
public:
// Constructor
Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture, SDL_Renderer *renderer);
Bullet(int x, int y, int kind, bool poweredUp, int owner, Texture *texture);
// Destructor
~Bullet();

View File

@@ -146,11 +146,10 @@ animatedSprite_t loadAnimationFromFile(Texture *texture, std::string filePath, b
}
// Constructor
AnimatedSprite::AnimatedSprite(Texture *texture, SDL_Renderer *renderer, std::string file, std::vector<std::string> *buffer)
AnimatedSprite::AnimatedSprite(Texture *texture, std::string file, std::vector<std::string> *buffer)
{
// Copia los punteros
setTexture(texture);
setRenderer(renderer);
// Carga las animaciones
if (file != "")
@@ -174,11 +173,10 @@ AnimatedSprite::AnimatedSprite(Texture *texture, SDL_Renderer *renderer, std::st
}
// Constructor
AnimatedSprite::AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation)
AnimatedSprite::AnimatedSprite(animatedSprite_t *animation)
{
// Copia los punteros
setTexture(animation->texture);
setRenderer(renderer);
// Inicializa variables
currentAnimation = 0;

View File

@@ -37,8 +37,8 @@ private:
public:
// Constructor
AnimatedSprite(Texture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::vector<std::string> *buffer = nullptr);
AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation);
AnimatedSprite(Texture *texture = nullptr, std::string file = "", std::vector<std::string> *buffer = nullptr);
AnimatedSprite(animatedSprite_t *animation);
// Destructor
~AnimatedSprite();

View File

@@ -1,11 +1,10 @@
#include "movingsprite.h"
// Constructor
MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, Texture *texture, SDL_Renderer *renderer)
MovingSprite::MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, Texture *texture)
{
// Copia los punteros
this->texture = texture;
this->renderer = renderer;
// Establece el alto y el ancho del sprite
this->w = w;
@@ -96,7 +95,7 @@ void MovingSprite::render()
{
if (enabled)
{
texture->render(renderer, (int)x, (int)y, &spriteClip, zoomW, zoomH, angle, center, currentFlip);
texture->render((int)x, (int)y, &spriteClip, zoomW, zoomH, angle, center, currentFlip);
}
}

View File

@@ -32,7 +32,7 @@ protected:
public:
// Constructor
MovingSprite(float x = 0, float y = 0, int w = 0, int h = 0, float velx = 0, float vely = 0, float accelx = 0, float accely = 0, Texture *texture = nullptr, SDL_Renderer *renderer = nullptr);
MovingSprite(float x = 0, float y = 0, int w = 0, int h = 0, float velx = 0, float vely = 0, float accelx = 0, float accely = 0, Texture *texture = nullptr);
// Mueve el sprite
void move();

View File

@@ -1,11 +1,10 @@
#include "smartsprite.h"
// Constructor
SmartSprite::SmartSprite(Texture *texture, SDL_Renderer *renderer)
SmartSprite::SmartSprite(Texture *texture)
{
// Copia punteros
setTexture(texture);
setRenderer(renderer);
// Inicializa el objeto
init();

View File

@@ -25,7 +25,7 @@ private:
public:
// Constructor
SmartSprite(Texture *texture, SDL_Renderer *renderer);
SmartSprite(Texture *texture);
// Inicializa el objeto
void init();

View File

@@ -1,7 +1,7 @@
#include "sprite.h"
// Constructor
Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *renderer)
Sprite::Sprite(int x, int y, int w, int h, Texture *texture)
{
// Establece la posición X,Y del sprite
this->x = x;
@@ -11,9 +11,6 @@ Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *rende
this->w = w;
this->h = h;
// Establece el puntero al renderizador de la ventana
this->renderer = renderer;
// Establece la textura donde están los gráficos para el sprite
this->texture = texture;
@@ -24,7 +21,7 @@ Sprite::Sprite(int x, int y, int w, int h, Texture *texture, SDL_Renderer *rende
enabled = true;
}
Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
Sprite::Sprite(SDL_Rect rect, Texture *texture)
{
// Establece la posición X,Y del sprite
x = rect.x;
@@ -34,9 +31,6 @@ Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
w = rect.w;
h = rect.h;
// Establece el puntero al renderizador de la ventana
this->renderer = renderer;
// Establece la textura donde están los gráficos para el sprite
this->texture = texture;
@@ -51,7 +45,6 @@ Sprite::Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer)
Sprite::~Sprite()
{
texture = nullptr;
renderer = nullptr;
}
// Muestra el sprite por pantalla
@@ -59,7 +52,7 @@ void Sprite::render()
{
if (enabled)
{
texture->render(renderer, x, y, &spriteClip);
texture->render(x, y, &spriteClip);
}
}
@@ -88,10 +81,10 @@ int Sprite::getHeight()
}
// Establece la posición del objeto
void Sprite::setPos(SDL_Rect rect)
void Sprite::setPos(SDL_Point p)
{
this->x = rect.x;
this->y = rect.y;
this->x = p.x;
this->y = p.y;
}
// Establece el valor de la variable
@@ -148,18 +141,6 @@ void Sprite::setTexture(Texture *texture)
this->texture = texture;
}
// Obten el valor de la variable
SDL_Renderer *Sprite::getRenderer()
{
return renderer;
}
// Establece el valor de la variable
void Sprite::setRenderer(SDL_Renderer *renderer)
{
this->renderer = renderer;
}
// Establece el valor de la variable
void Sprite::setEnabled(bool value)
{

View File

@@ -12,7 +12,6 @@ protected:
int w; // Ancho del sprite
int h; // Alto del sprite
SDL_Renderer *renderer; // Puntero al renderizador de la ventana
Texture *texture; // Textura donde estan todos los dibujos del sprite
SDL_Rect spriteClip; // Rectangulo de origen de la textura que se dibujará en pantalla
@@ -20,8 +19,8 @@ protected:
public:
// Constructor
Sprite(int x = 0, int y = 0, int w = 0, int h = 0, Texture *texture = nullptr, SDL_Renderer *renderer = nullptr);
Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer);
Sprite(int x = 0, int y = 0, int w = 0, int h = 0, Texture *texture = nullptr);
Sprite(SDL_Rect rect, Texture *texture);
// Destructor
~Sprite();
@@ -42,7 +41,7 @@ public:
int getHeight();
// Establece la posición del objeto
void setPos(SDL_Rect rect);
void setPos(SDL_Point p);
// Establece el valor de la variable
void setPosX(int x);
@@ -77,12 +76,6 @@ public:
// Establece el valor de la variable
void setTexture(Texture *texture);
// Obten el valor de la variable
SDL_Renderer *getRenderer();
// Establece el valor de la variable
void setRenderer(SDL_Renderer *renderer);
// Establece el valor de la variable
void setEnabled(bool value);

View File

@@ -94,7 +94,7 @@ Text::Text(std::string bitmapFile, std::string textFile, SDL_Renderer *renderer)
// Crea los objetos
texture = new Texture(renderer, bitmapFile);
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture, renderer);
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture);
// Inicializa variables
fixedWidth = false;
@@ -118,7 +118,7 @@ Text::Text(std::string textFile, Texture *texture, SDL_Renderer *renderer)
// Crea los objetos
this->texture = nullptr;
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture, renderer);
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture);
// Inicializa variables
fixedWidth = false;
@@ -139,7 +139,7 @@ Text::Text(textFile_t *textFile, Texture *texture, SDL_Renderer *renderer)
// Crea los objetos
this->texture = nullptr;
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture, renderer);
sprite = new Sprite({0, 0, boxWidth, boxHeight}, texture);
// Inicializa variables
fixedWidth = false;

View File

@@ -29,7 +29,7 @@ Texture::Texture(SDL_Renderer *renderer, std::string path, bool verbose)
// .png
if (extension == "png")
{
loadFromFile(path, renderer, verbose);
loadFromFile(path, verbose);
}
// .gif
@@ -38,7 +38,7 @@ Texture::Texture(SDL_Renderer *renderer, std::string path, bool verbose)
surface = loadSurface(path.c_str());
addPalette(path.c_str());
setPaletteColor(0, 0, 0x00000000);
createBlank(renderer, width, height, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING);
createBlank(width, height, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING);
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
flipSurface();
}
@@ -53,7 +53,7 @@ Texture::~Texture()
}
// Carga una imagen desde un fichero
bool Texture::loadFromFile(std::string path, SDL_Renderer *renderer, bool verbose)
bool Texture::loadFromFile(std::string path, bool verbose)
{
const std::string filename = path.substr(path.find_last_of("\\/") + 1);
int req_format = STBI_rgb_alpha;
@@ -131,7 +131,7 @@ bool Texture::loadFromFile(std::string path, SDL_Renderer *renderer, bool verbos
}
// Crea una textura en blanco
bool Texture::createBlank(SDL_Renderer *renderer, int width, int height, SDL_PixelFormatEnum format, SDL_TextureAccess access)
bool Texture::createBlank(int width, int height, SDL_PixelFormatEnum format, SDL_TextureAccess access)
{
// Crea una textura sin inicializar
texture = SDL_CreateTexture(renderer, format, access, width, height);
@@ -187,7 +187,7 @@ void Texture::setAlpha(Uint8 alpha)
}
// Renderiza la textura en un punto específico
void Texture::render(SDL_Renderer *renderer, int x, int y, SDL_Rect *clip, float zoomW, float zoomH, double angle, SDL_Point *center, SDL_RendererFlip flip)
void Texture::render(int x, int y, SDL_Rect *clip, float zoomW, float zoomH, double angle, SDL_Point *center, SDL_RendererFlip flip)
{
// Establece el destino de renderizado en la pantalla
SDL_Rect renderQuad = {x, y, width, height};
@@ -373,4 +373,10 @@ void Texture::setPalette(int palette)
paletteIndex = palette;
flipSurface();
}
}
// Obtiene el renderizador
SDL_Renderer *Texture::getRenderer()
{
return renderer;
}

View File

@@ -52,10 +52,10 @@ public:
~Texture();
// Carga una imagen desde un fichero
bool loadFromFile(std::string path, SDL_Renderer *renderer, bool verbose = false);
bool loadFromFile(std::string path, bool verbose = false);
// Crea una textura en blanco
bool createBlank(SDL_Renderer *renderer, int width, int height, SDL_PixelFormatEnum format = SDL_PIXELFORMAT_RGBA8888, SDL_TextureAccess = SDL_TEXTUREACCESS_STREAMING);
bool createBlank(int width, int height, SDL_PixelFormatEnum format = SDL_PIXELFORMAT_RGBA8888, SDL_TextureAccess = SDL_TEXTUREACCESS_STREAMING);
// Libera la memoria de la textura
void unload();
@@ -70,7 +70,7 @@ public:
void setAlpha(Uint8 alpha);
// Renderiza la textura en un punto específico
void render(SDL_Renderer *renderer, int x, int y, SDL_Rect *clip = nullptr, float zoomW = 1, float zoomH = 1, double angle = 0.0, SDL_Point *center = nullptr, SDL_RendererFlip flip = SDL_FLIP_NONE);
void render(int x, int y, SDL_Rect *clip = nullptr, float zoomW = 1, float zoomH = 1, double angle = 0.0, SDL_Point *center = nullptr, SDL_RendererFlip flip = SDL_FLIP_NONE);
// Establece la textura como objetivo de renderizado
void setAsRenderTarget(SDL_Renderer *renderer);
@@ -95,4 +95,7 @@ public:
// Cambia la paleta de la textura
void setPalette(int palette);
// Obtiene el renderizador
SDL_Renderer *getRenderer();
};

View File

@@ -1,10 +1,9 @@
#include "define_buttons.h"
// Constructor
DefineButtons::DefineButtons(SDL_Renderer *renderer, Input *input, Text *text, param_t *param, options_t *options, section_t *section)
DefineButtons::DefineButtons(Input *input, Text *text, param_t *param, options_t *options, section_t *section)
{
// Copia punteros a los objetos
this->renderer = renderer;
this->input = input;
this->text = text;
this->param = param;

View File

@@ -17,7 +17,6 @@ class DefineButtons
{
private:
// Objetos
SDL_Renderer *renderer; // El renderizador de la ventana
Input *input; // Objeto pata gestionar la entrada
Text *text; // Objeto para escribir texto
@@ -47,7 +46,7 @@ private:
public:
// Constructor
DefineButtons(SDL_Renderer *renderer, Input *input, Text *text, param_t *param, options_t *options, section_t *section);
DefineButtons(Input *input, Text *text, param_t *param, options_t *options, section_t *section);
// Destructor
~DefineButtons();

View File

@@ -320,14 +320,27 @@ bool Director::setFileList()
asset->add(prefix + "/data/shaders/crtpi.glsl", t_data);
// Texturas
asset->add(prefix + "/data/gfx/balloon1.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon1.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon1.ani", t_data);
asset->add(prefix + "/data/gfx/balloon2.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon2.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon2.ani", t_data);
asset->add(prefix + "/data/gfx/balloon3.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon3.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon3.ani", t_data);
asset->add(prefix + "/data/gfx/balloon4.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon4.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon4.ani", t_data);
asset->add(prefix + "/data/gfx/balloon1_explosion.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon1_explosion.ani", t_data);
asset->add(prefix + "/data/gfx/balloon2_explosion.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon2_explosion.ani", t_data);
asset->add(prefix + "/data/gfx/balloon3_explosion.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon3_explosion.ani", t_data);
asset->add(prefix + "/data/gfx/balloon4_explosion.png", t_bitmap);
asset->add(prefix + "/data/gfx/balloon4_explosion.ani", t_data);
asset->add(prefix + "/data/gfx/balloon_blue_pal.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon_yellow_pal.gif", t_bitmap);
asset->add(prefix + "/data/gfx/balloon_green_pal.gif", t_bitmap);
asset->add(prefix + "/data/gfx/powerball.png", t_bitmap);
asset->add(prefix + "/data/gfx/bullet.png", t_bitmap);
asset->add(prefix + "/data/gfx/game_buildings.png", t_bitmap);

39
source/explosions.cpp Normal file
View File

@@ -0,0 +1,39 @@
#include "explosions.h"
// Constructor
Explosions::Explosions()
{
textures.clear();
explosions.clear();
}
// Destructor
Explosions::~Explosions()
{
for (auto explosion : explosions)
{
}
}
// Actualiza la lógica de la clase
void Explosions::update()
{
}
// Dibuja el objeto en pantalla
void Explosions::render()
{
}
// Añade texturas al objetp
void Explosions::addTexture(Texture *texture)
{
textures.push_back(texture);
}
// Añade una explosión
void Explosions::add(int x, int y, int size)
{
AnimatedSprite *sprite = new AnimatedSprite(textures[0]);
sprite->setPos({x,y});
}

48
source/explosions.h Normal file
View File

@@ -0,0 +1,48 @@
#pragma once
#include <SDL2/SDL.h>
#include "common/texture.h"
#include "common/animatedsprite.h"
#include <vector>
struct explosion_t
{
AnimatedSprite *sprite; // Sprite para dibujar la explosión
bool ended; // Indica si la explosión ha terminado
};
struct explision_texture_t
{
Texture *texture; // Textura para la explosión
int size; // Tamaño de la explosión
};
// Clase explosions
class Explosions
{
private:
// Objetos y punteros
// Variables
std::vector<Texture *> textures; // Vector con las texturas a utilizar
std::vector<explosion_t> explosions; // Lista con todas las explosiones
public:
// Constructor
Explosions();
// Destructor
~Explosions();
// Actualiza la lógica de la clase
void update();
// Dibuja el objeto en pantalla
void render();
// Añade texturas al objetp
void addTexture(Texture *texture);
// Añade una explosión
void add(int x, int y, int size);
};

View File

@@ -27,15 +27,7 @@ Game::Game(int playerID, int currentStage, SDL_Renderer *renderer, Screen *scree
eventHandler = new SDL_Event();
scoreboard = new Scoreboard(renderer, screen, asset, lang, options);
background = new Background(renderer, screen, asset, param);
// Inicializa vectores
playerAnimations.clear();
balloonAnimations.clear();
itemAnimations.clear();
player1Textures.clear();
player2Textures.clear();
itemTextures.clear();
balloonTextures.clear();
explosions = new Explosions();
// Carga los recursos
loadMedia();
@@ -50,15 +42,12 @@ Game::Game(int playerID, int currentStage, SDL_Renderer *renderer, Screen *scree
loadDemoFile(asset->get("demo2.bin"), &this->demo.dataFile[index2]);
}
// Establece la máxima puntuación desde fichero o desde las puntuaciones online
// Carga las puntuaciones desde el fichero y establece la máxima puntuación
setHiScore();
n1000Sprite = new SmartSprite(gameTextTexture, renderer);
n2500Sprite = new SmartSprite(gameTextTexture, renderer);
n5000Sprite = new SmartSprite(gameTextTexture, renderer);
gameOverSprite = new Sprite(16, 80, 128, 96, gameOverTexture, renderer);
gameOverEndSprite = new Sprite(PLAY_AREA_CENTER_X - gameOverEndTexture->getWidth() / 2, 80, 128, 96, gameOverEndTexture, renderer);
n1000Sprite = new SmartSprite(gameTextTexture);
n2500Sprite = new SmartSprite(gameTextTexture);
n5000Sprite = new SmartSprite(gameTextTexture);
canvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, playArea.w, playArea.h);
SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND);
@@ -74,130 +63,24 @@ Game::~Game()
saveDemoFile();
#endif
if (!demo.enabled)
{
hiScoreEntry_t entry = {"Sergio", players[0]->getScore()};
ManageHiScoreTable *m = new ManageHiScoreTable(&options->game.hiScoreTable);
m->add(entry);
delete m;
}
// Elimina todos los objetos contenidos en vectores
deleteAllVectorObjects();
bulletTexture->unload();
delete bulletTexture;
gameTextTexture->unload();
delete gameTextTexture;
gameOverTexture->unload();
delete gameOverTexture;
gameOverEndTexture->unload();
delete gameOverEndTexture;
// Animaciones
for (auto animation : playerAnimations)
{
if (animation)
{
delete animation;
}
}
playerAnimations.clear();
for (auto animation : balloonAnimations)
{
if (animation)
{
delete animation;
}
}
balloonAnimations.clear();
for (auto animation : itemAnimations)
{
if (animation)
{
delete animation;
}
}
itemAnimations.clear();
// Texturas
for (auto texture : player1Textures)
{
if (texture)
{
texture->unload();
delete texture;
}
}
player1Textures.clear();
for (auto texture : player2Textures)
{
if (texture)
{
texture->unload();
delete texture;
}
}
player2Textures.clear();
for (auto texture : itemTextures)
{
if (texture)
{
texture->unload();
delete texture;
}
}
itemTextures.clear();
for (auto texture : balloonTextures)
{
if (texture)
{
texture->unload();
delete texture;
}
}
balloonTextures.clear();
// Libera los recursos
unloadMedia();
delete scoreboard;
delete background;
delete explosions;
delete text;
delete textBig;
delete textNokia2;
delete textNokiaBig2;
delete fade;
delete eventHandler;
delete n1000Sprite;
delete n2500Sprite;
delete n5000Sprite;
delete gameOverSprite;
delete gameOverEndSprite;
SDL_DestroyTexture(canvas);
JA_DeleteSound(balloonSound);
JA_DeleteSound(bulletSound);
JA_DeleteSound(playerCollisionSound);
JA_DeleteSound(hiScoreSound);
JA_DeleteSound(itemDropSound);
JA_DeleteSound(itemPickUpSound);
JA_DeleteSound(coffeeOutSound);
JA_DeleteSound(stageChangeSound);
JA_DeleteSound(bubble1Sound);
JA_DeleteSound(bubble2Sound);
JA_DeleteSound(bubble3Sound);
JA_DeleteSound(bubble4Sound);
JA_DeleteSound(clockSound);
JA_DeleteSound(powerBallSound);
JA_DeleteSound(coffeeMachineSound);
}
// Inicializa las variables necesarias para la sección 'Game'
@@ -217,10 +100,10 @@ void Game::init(int playerID)
players.clear();
// Crea los dos jugadores
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 30, renderer, playerTextures[0], playerAnimations);
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 30, playerTextures[0], playerAnimations);
players.push_back(player1);
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 30, renderer, playerTextures[1], playerAnimations);
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 30, playerTextures[1], playerAnimations);
players.push_back(player2);
// Habilita el jugador seleccionado. playerID es player 1 o player 2
@@ -432,6 +315,15 @@ void Game::loadMedia()
<< "** LOADING RESOURCES FOR GAME SECTION" << std::endl;
}
playerAnimations.clear();
balloonAnimations.clear();
itemAnimations.clear();
player1Textures.clear();
player2Textures.clear();
itemTextures.clear();
balloonTextures.clear();
explosionsTextures.clear();
// Texturas
bulletTexture = new Texture(renderer, asset->get("bullet.png"));
gameTextTexture = new Texture(renderer, asset->get("game_text.png"));
@@ -439,18 +331,43 @@ void Game::loadMedia()
gameOverEndTexture = new Texture(renderer, asset->get("menu_game_over_end.png"));
// Texturas - Globos
Texture *balloon1Texture = new Texture(renderer, asset->get("balloon1.png"));
Texture *balloon1Texture = new Texture(renderer, asset->get("balloon1.gif"));
balloon1Texture->addPalette(asset->get("balloon_blue_pal.gif"));
balloon1Texture->addPalette(asset->get("balloon_yellow_pal.gif"));
balloon1Texture->addPalette(asset->get("balloon_green_pal.gif"));
balloonTextures.push_back(balloon1Texture);
Texture *balloon2Texture = new Texture(renderer, asset->get("balloon2.png"));
Texture *balloon2Texture = new Texture(renderer, asset->get("balloon2.gif"));
balloon2Texture->addPalette(asset->get("balloon_blue_pal.gif"));
balloon2Texture->addPalette(asset->get("balloon_yellow_pal.gif"));
balloon2Texture->addPalette(asset->get("balloon_green_pal.gif"));
balloonTextures.push_back(balloon2Texture);
Texture *balloon3Texture = new Texture(renderer, asset->get("balloon3.png"));
Texture *balloon3Texture = new Texture(renderer, asset->get("balloon3.gif"));
balloon3Texture->addPalette(asset->get("balloon_blue_pal.gif"));
balloon3Texture->addPalette(asset->get("balloon_yellow_pal.gif"));
balloon3Texture->addPalette(asset->get("balloon_green_pal.gif"));
balloonTextures.push_back(balloon3Texture);
Texture *balloon4Texture = new Texture(renderer, asset->get("balloon4.png"));
Texture *balloon4Texture = new Texture(renderer, asset->get("balloon4.gif"));
balloon4Texture->addPalette(asset->get("balloon_blue_pal.gif"));
balloon4Texture->addPalette(asset->get("balloon_yellow_pal.gif"));
balloon4Texture->addPalette(asset->get("balloon_green_pal.gif"));
balloonTextures.push_back(balloon4Texture);
// Texturas - Explosiones
Texture *explosion1Texture = new Texture(renderer, asset->get("balloon1_explosion.png"));
explosionsTextures.push_back(explosion1Texture);
Texture *explosion2Texture = new Texture(renderer, asset->get("balloon1_explosion.png"));
explosionsTextures.push_back(explosion2Texture);
Texture *explosion3Texture = new Texture(renderer, asset->get("balloon1_explosion.png"));
explosionsTextures.push_back(explosion3Texture);
Texture *explosion4Texture = new Texture(renderer, asset->get("balloon1_explosion.png"));
explosionsTextures.push_back(explosion4Texture);
// Texturas - Items
Texture *item1 = new Texture(renderer, asset->get("item_points1_disk.png"));
itemTextures.push_back(item1);
@@ -520,6 +437,23 @@ void Game::loadMedia()
loadAnimations(asset->get("balloon4.ani"), balloon4Animation);
balloonAnimations.push_back(balloon4Animation);
// Animaciones -- Explosiones
std::vector<std::string> *explosions1Animation = new std::vector<std::string>;
loadAnimations(asset->get("balloon1_explosion.ani"), explosions1Animation);
explosionsAnimations.push_back(explosions1Animation);
std::vector<std::string> *explosions2Animation = new std::vector<std::string>;
loadAnimations(asset->get("balloon2_explosion.ani"), explosions2Animation);
explosionsAnimations.push_back(explosions2Animation);
std::vector<std::string> *explosions3Animation = new std::vector<std::string>;
loadAnimations(asset->get("balloon3_explosion.ani"), explosions3Animation);
explosionsAnimations.push_back(explosions3Animation);
std::vector<std::string> *explosions4Animation = new std::vector<std::string>;
loadAnimations(asset->get("balloon4_explosion.ani"), explosions4Animation);
explosionsAnimations.push_back(explosions4Animation);
// Animaciones -- Items
std::vector<std::string> *item1Animation = new std::vector<std::string>;
loadAnimations(asset->get("item_points1_disk.ani"), item1Animation);
@@ -575,6 +509,121 @@ void Game::loadMedia()
}
}
// Libera los recursos previamente cargados
void Game::unloadMedia()
{
// Texturas
delete bulletTexture;
delete gameTextTexture;
delete gameOverTexture;
delete gameOverEndTexture;
for (auto texture : player1Textures)
{
if (texture)
{
delete texture;
}
}
player1Textures.clear();
for (auto texture : player2Textures)
{
if (texture)
{
delete texture;
}
}
player2Textures.clear();
for (auto texture : itemTextures)
{
if (texture)
{
delete texture;
}
}
itemTextures.clear();
for (auto texture : balloonTextures)
{
if (texture)
{
delete texture;
}
}
balloonTextures.clear();
for (auto texture : explosionsTextures)
{
if (texture)
{
delete texture;
}
}
explosionsTextures.clear();
// Animaciones
for (auto animation : playerAnimations)
{
if (animation)
{
delete animation;
}
}
playerAnimations.clear();
for (auto animation : balloonAnimations)
{
if (animation)
{
delete animation;
}
}
balloonAnimations.clear();
for (auto animation : explosionsAnimations)
{
if (animation)
{
delete animation;
}
}
explosionsAnimations.clear();
for (auto animation : itemAnimations)
{
if (animation)
{
delete animation;
}
}
itemAnimations.clear();
// Text
delete text;
delete textBig;
delete textNokia2;
delete textNokiaBig2;
// Sonidos
JA_DeleteSound(balloonSound);
JA_DeleteSound(bulletSound);
JA_DeleteSound(playerCollisionSound);
JA_DeleteSound(hiScoreSound);
JA_DeleteSound(itemDropSound);
JA_DeleteSound(itemPickUpSound);
JA_DeleteSound(coffeeOutSound);
JA_DeleteSound(stageChangeSound);
JA_DeleteSound(bubble1Sound);
JA_DeleteSound(bubble2Sound);
JA_DeleteSound(bubble3Sound);
JA_DeleteSound(bubble4Sound);
JA_DeleteSound(clockSound);
JA_DeleteSound(powerBallSound);
JA_DeleteSound(coffeeMachineSound);
}
// Carga el fichero de puntos
bool Game::loadScoreFile()
{
@@ -733,6 +782,10 @@ bool Game::loadDemoFile(std::string f, demoKeys_t (*dataFile)[TOTAL_DEMO_DATA])
// Guarda el fichero de puntos
bool Game::saveScoreFile()
{
// Almacena la máxima puntuación en el fichero junto con un checksum
scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43;
bool success = true;
const std::string p = asset->get("score.bin");
const std::string filename = p.substr(p.find_last_of("\\/") + 1);
@@ -1564,12 +1617,6 @@ void Game::increaseStageCurrentPower(int power)
stage[currentStage].currentPower += power;
}
// Establece el valor de la variable
void Game::setHiScore(Uint32 score)
{
hiScore = score;
}
// Actualiza el valor de hiScore en caso necesario
void Game::updateHiScore()
{
@@ -1580,10 +1627,6 @@ void Game::updateHiScore()
// Actualiza la máxima puntuación
hiScore = player->getScore();
// Almacena la máxima puntuación en el fichero junto con un checksum
scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43;
// Si se supera la máxima puntuación emite sonido
if (hiScoreAchieved == false)
{
@@ -1932,38 +1975,32 @@ void Game::popBalloon(Balloon *balloon)
evaluateAndSetMenace();
}
// Explosiona un globo. Lo destruye
// Explosiona un globo. Lo destruye = no crea otros globos
void Game::destroyBalloon(Balloon *balloon)
{
int score = 0;
int power = 0;
// Calcula la puntuación y el poder que generaria el globo en caso de romperlo a él y a sus hijos
switch (balloon->getSize())
{
case BALLOON_SIZE_4:
score = BALLOON_SCORE_4 + (2 * BALLOON_SCORE_3) + (4 * BALLOON_SCORE_2) + (8 * BALLOON_SCORE_1);
power = 15;
break;
case BALLOON_SIZE_3:
score = BALLOON_SCORE_3 + (2 * BALLOON_SCORE_2) + (4 * BALLOON_SCORE_1);
power = 7;
break;
case BALLOON_SIZE_2:
score = BALLOON_SCORE_2 + (2 * BALLOON_SCORE_1);
power = 3;
break;
case BALLOON_SIZE_1:
score = BALLOON_SCORE_1;
power = 1;
break;
default:
score = 0;
power = 0;
break;
}
@@ -1975,6 +2012,7 @@ void Game::destroyBalloon(Balloon *balloon)
updateHiScore();
// Aumenta el poder de la fase
const int power = balloon->getPower();
increaseStageCurrentPower(power);
balloonsPopped += power;
@@ -1990,7 +2028,7 @@ void Game::popAllBalloons()
{
for (auto balloon : balloons)
{
if ((balloon->isEnabled()) && (!balloon->isPopping()) && (!balloon->isBeingCreated()))
if (balloon->canBePopped())
{
popBalloon(balloon);
}
@@ -2004,7 +2042,7 @@ void Game::destroyAllBalloons()
{
for (auto balloon : balloons)
{
if ((balloon->isEnabled()) && (!balloon->isPopping()))
if (balloon->canBeDestroyed())
{
destroyBalloon(balloon);
}
@@ -2061,7 +2099,7 @@ int Game::countBalloons()
return num;
}
// Vacia el vector de globos
// Vacia del vector de globos los globos que ya no sirven
void Game::freeBalloons()
{
if (balloons.empty() == false)
@@ -2243,7 +2281,7 @@ void Game::renderBullets()
// Crea un objeto bala
void Game::createBullet(int x, int y, int kind, bool poweredUp, int owner)
{
Bullet *b = new Bullet(x, y, kind, poweredUp, owner, bulletTexture, renderer);
Bullet *b = new Bullet(x, y, kind, poweredUp, owner, bulletTexture);
bullets.push_back(b);
}
@@ -2368,7 +2406,7 @@ int Game::dropItem()
// Crea un objeto item
void Game::createItem(int kind, float x, float y)
{
Item *item = new Item(kind, x, y, itemTextures[kind - 1], itemAnimations[kind - 1], renderer);
Item *item = new Item(kind, x, y, itemTextures[kind - 1], itemAnimations[kind - 1]);
items.push_back(item);
}
@@ -2391,7 +2429,7 @@ void Game::freeItems()
// Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto
void Game::createItemScoreSprite(int x, int y, SmartSprite *sprite)
{
SmartSprite *ss = new SmartSprite(nullptr, renderer);
SmartSprite *ss = new SmartSprite(nullptr);
smartSprites.push_back(ss);
// Crea una copia del objeto
@@ -2423,7 +2461,7 @@ void Game::freeSmartSprites()
// Crea un SmartSprite para arrojar el item café al recibir un impacto
void Game::throwCoffee(int x, int y)
{
SmartSprite *ss = new SmartSprite(itemTextures[4], renderer);
SmartSprite *ss = new SmartSprite(itemTextures[4]);
smartSprites.push_back(ss);
ss->setPosX(x - 8);
@@ -2487,6 +2525,10 @@ void Game::killPlayer(Player *player)
JA_PlaySound(coffeeOutSound);
player->setAlive(false);
allPlayersAreDead() ? JA_StopMusic() : JA_ResumeMusic();
if (!demo.enabled)
{
addScoreToScoreBoard("Sergio", player->getScore());
}
}
}
@@ -2638,6 +2680,8 @@ void Game::update()
// Mueve los globos
updateBalloons();
explosions->update();
// Mueve las balas
moveBullets();
@@ -2731,6 +2775,7 @@ void Game::fillCanvas()
background->render();
renderItems();
renderSmartSprites();
explosions->render();
renderBalloons();
renderBullets();
renderMessages();
@@ -2783,7 +2828,7 @@ void Game::updateMenace()
if (menaceCurrent < menaceThreshold)
{
// Crea una formación de enemigos
deployEnemyFormation();
// deployEnemyFormation();
// Recalcula el nivel de amenaza con el nuevo globo
evaluateAndSetMenace();
@@ -3397,7 +3442,7 @@ void Game::reloadTextures()
background->reloadTextures();
}
// Establece la máxima puntuación desde fichero o desde las puntuaciones online
// Carga las puntuaciones desde el fichero y establece la máxima puntuación
void Game::setHiScore()
{
// Carga el fichero de puntos
@@ -3432,4 +3477,13 @@ void Game::pause(bool value)
{
paused = value;
screen->attenuate(paused);
}
// Añade una puntuación a la tabla de records
void Game::addScoreToScoreBoard(std::string name, int score)
{
hiScoreEntry_t entry = {name, score};
ManageHiScoreTable *m = new ManageHiScoreTable(&options->game.hiScoreTable);
m->add(entry);
delete m;
}

View File

@@ -20,6 +20,7 @@
#include "background.h"
#include "lang.h"
#include "manage_hiscore_table.h"
#include "explosions.h"
#include <iostream>
// Cantidad de elementos a escribir en los ficheros de datos
@@ -114,6 +115,7 @@ private:
section_t *section; // Seccion actual dentro del juego
Scoreboard *scoreboard; // Objeto para dibujar el marcador
Background *background; // Objeto para dibujar el fondo del juego
Explosions *explosions; // Objeto para dibujar explosiones
SDL_Texture *canvas; // Textura para dibujar la zona de juego
std::vector<Player *> players; // Vector con los jugadores
@@ -125,6 +127,7 @@ private:
Texture *bulletTexture; // Textura para las balas
std::vector<Texture *> itemTextures; // Vector con las texturas de los items
std::vector<Texture *> balloonTextures; // Vector con las texturas de los globos
std::vector<Texture *> explosionsTextures; // Vector con las texturas de las explosiones
std::vector<Texture *> player1Textures; // Vector con las texturas del jugador
std::vector<Texture *> player2Textures; // Vector con las texturas del jugador
std::vector<std::vector<Texture *>> playerTextures; // Vector con todas las texturas de los jugadores;
@@ -133,9 +136,10 @@ private:
Texture *gameOverTexture; // Textura para la pantalla de game over
Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos
std::vector<std::vector<std::string> *> itemAnimations; // Vector con las animaciones de los items
std::vector<std::vector<std::string> *> playerAnimations; // Vector con las animaciones del jugador
std::vector<std::vector<std::string> *> balloonAnimations; // Vector con las animaciones de los globos
std::vector<std::vector<std::string> *> explosionsAnimations; // Vector con las animaciones de las explosiones
Text *text; // Fuente para los textos del juego
Text *textBig; // Fuente de texto grande
@@ -149,9 +153,6 @@ private:
SmartSprite *n2500Sprite; // Sprite con el texto 2.500
SmartSprite *n5000Sprite; // Sprite con el texto 5.000
Sprite *gameOverSprite; // Sprite para dibujar los graficos del game over
Sprite *gameOverEndSprite; // Sprite para dibujar los graficos del game over de acabar el juego
JA_Sound_t *balloonSound; // Sonido para la explosión del globo
JA_Sound_t *bulletSound; // Sonido para los disparos
JA_Sound_t *playerCollisionSound; // Sonido para la colisión del jugador con un enemigo
@@ -226,6 +227,9 @@ private:
// Carga los recursos necesarios para la sección 'Game'
void loadMedia();
// Libera los recursos previamente cargados
void unloadMedia();
// Carga el fichero de puntos
bool loadScoreFile();
@@ -253,9 +257,6 @@ private:
// Aumenta el poder de la fase
void increaseStageCurrentPower(int power);
// Establece el valor de la variable
void setHiScore(Uint32 score);
// Actualiza el valor de HiScore en caso necesario
void updateHiScore();
@@ -448,7 +449,7 @@ private:
// Recarga las texturas
void reloadTextures();
// Establece la máxima puntuación desde fichero o desde las puntuaciones online
// Carga las puntuaciones desde el fichero y establece la máxima puntuación
void setHiScore();
// Actualiza el marcador
@@ -466,6 +467,9 @@ private:
// Comprueba si la música ha de estar sonando
void checkMusicStatus();
// Añade una puntuación a la tabla de records
void addScoreToScoreBoard(std::string name, int score);
public:
// Constructor
Game(int playerID, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, param_t *param, options_t *options, section_t *section, JA_Music_t *music);

View File

@@ -17,11 +17,11 @@ GameLogo::GameLogo(SDL_Renderer *renderer, Screen *screen, Asset *asset, param_t
crisisTexture = new Texture(renderer, asset->get("title_crisis.png"));
arcadeEditionTexture = new Texture(renderer, asset->get("title_arcade_edition.png"));
coffeeBitmap = new SmartSprite(coffeeTexture, renderer);
crisisBitmap = new SmartSprite(crisisTexture, renderer);
arcadeEditionBitmap = new Sprite((param->gameWidth - arcadeEditionTexture->getWidth()) / 2, param->arcadeEdition, arcadeEditionTexture->getWidth(), arcadeEditionTexture->getHeight(), arcadeEditionTexture, renderer);
dustBitmapL = new AnimatedSprite(dustTexture, renderer, asset->get("title_dust.ani"));
dustBitmapR = new AnimatedSprite(dustTexture, renderer, asset->get("title_dust.ani"));
coffeeBitmap = new SmartSprite(coffeeTexture);
crisisBitmap = new SmartSprite(crisisTexture);
arcadeEditionBitmap = new Sprite((param->gameWidth - arcadeEditionTexture->getWidth()) / 2, param->arcadeEdition, arcadeEditionTexture->getWidth(), arcadeEditionTexture->getHeight(), arcadeEditionTexture);
dustBitmapL = new AnimatedSprite(dustTexture, asset->get("title_dust.ani"));
dustBitmapR = new AnimatedSprite(dustTexture, asset->get("title_dust.ani"));
// Sonidos
crashSound = JA_LoadSound(asset->get("title.wav").c_str());

View File

@@ -98,8 +98,8 @@ void Instructions::iniSprites()
// Inicializa los sprites
for (int i = 0; i < (int)itemTextures.size(); ++i)
{
Sprite *sprite = new Sprite(0, 0, param->itemSize, param->itemSize, itemTextures[i], renderer);
sprite->setPos({spritePos.x, spritePos.y + ((param->itemSize + itemSpace) * i), param->itemSize, param->itemSize});
Sprite *sprite = new Sprite(0, 0, param->itemSize, param->itemSize, itemTextures[i]);
sprite->setPos({spritePos.x, spritePos.y + ((param->itemSize + itemSpace) * i)});
sprites.push_back(sprite);
}
}

View File

@@ -29,7 +29,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input,
const int totalBitmaps = 6;
for (int i = 0; i < totalBitmaps; ++i)
{
SmartSprite *ss = new SmartSprite(texture, renderer);
SmartSprite *ss = new SmartSprite(texture);
ss->setWidth(128);
ss->setHeight(96);
ss->setEnabledCounter(20);

View File

@@ -2,9 +2,9 @@
#include "item.h"
// Constructor
Item::Item(int kind, float x, float y, Texture *texture, std::vector<std::string> *animation, SDL_Renderer *renderer)
Item::Item(int kind, float x, float y, Texture *texture, std::vector<std::string> *animation)
{
sprite = new AnimatedSprite(texture, renderer, "", animation);
sprite = new AnimatedSprite(texture, "", animation);
this->kind = kind;
enabled = true;

View File

@@ -43,7 +43,7 @@ public:
Uint16 timeToLive; // Temporizador con el tiempo que el objeto está presente
// Constructor
Item(int kind, float x, float y, Texture *texture, std::vector<std::string> *animation, SDL_Renderer *renderer);
Item(int kind, float x, float y, Texture *texture, std::vector<std::string> *animation);
// Destructor
~Item();

View File

@@ -16,7 +16,7 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, p
eventHandler = new SDL_Event();
jailTexture = new Texture(renderer, asset->get("logo_jailgames.png"));
sinceTexture = new Texture(renderer, asset->get("logo_since_1998.png"));
sinceSprite = new Sprite((param->gameWidth - sinceTexture->getWidth()) / 2, 83 + jailTexture->getHeight() + 5, sinceTexture->getWidth(), sinceTexture->getHeight(), sinceTexture, renderer);
sinceSprite = new Sprite((param->gameWidth - sinceTexture->getWidth()) / 2, 83 + jailTexture->getHeight() + 5, sinceTexture->getWidth(), sinceTexture->getHeight(), sinceTexture);
sinceSprite->setSpriteClip(0, 0, sinceTexture->getWidth(), sinceTexture->getHeight());
sinceTexture->setColor(0, 0, 0);
@@ -36,7 +36,7 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, p
// Crea los sprites de cada linea
for (int i = 0; i < jailTexture->getHeight(); ++i)
{
Sprite *temp = new Sprite(0, i, jailTexture->getWidth(), 1, jailTexture, renderer);
Sprite *temp = new Sprite(0, i, jailTexture->getWidth(), 1, jailTexture);
temp->setSpriteClip(0, i, jailTexture->getWidth(), 1);
const int posX = (i % 2 == 0) ? param->gameWidth + (i * 3) : -jailTexture->getWidth() - (i * 3);
temp->setPosX(posX);

View File

@@ -2,14 +2,11 @@
#include "player.h"
// Constructor
Player::Player(float x, int y, SDL_Renderer *renderer, std::vector<Texture *> texture, std::vector<std::vector<std::string> *> animations)
Player::Player(float x, int y, std::vector<Texture *> texture, std::vector<std::vector<std::string> *> animations)
{
// Copia los punteros
this->renderer = renderer;
// Reserva memoria para los objetos
playerSprite = new AnimatedSprite(texture[0], renderer, "", animations[0]);
powerSprite = new AnimatedSprite(texture[1], renderer, "", animations[1]);
playerSprite = new AnimatedSprite(texture[0], "", animations[0]);
powerSprite = new AnimatedSprite(texture[1], "", animations[1]);
powerSprite->getTexture()->setAlpha(224);
// Establece la posición inicial del jugador

View File

@@ -26,7 +26,6 @@ class Player
{
private:
// Objetos y punteros
SDL_Renderer *renderer; // El renderizador de la ventana
AnimatedSprite *playerSprite; // Sprite para dibujar el jugador
AnimatedSprite *powerSprite; // Sprite para dibujar el aura del jugador con el poder a tope
@@ -72,7 +71,7 @@ private:
public:
// Constructor
Player(float x, int y, SDL_Renderer *renderer, std::vector<Texture *> texture, std::vector<std::vector<std::string> *> animations);
Player(float x, int y, std::vector<Texture *> texture, std::vector<std::vector<std::string> *> animations);
// Destructor
~Player();

View File

@@ -31,7 +31,7 @@ Scoreboard::Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lan
// Crea objetos
gamePowerMeterTexture = new Texture(renderer, asset->get("game_power_meter.png"));
powerMeterSprite = new Sprite(offsetPowerMeter.x - 20, offsetPowerMeter.y, 40, 7, gamePowerMeterTexture, renderer);
powerMeterSprite = new Sprite(offsetPowerMeter.x - 20, offsetPowerMeter.y, 40, 7, gamePowerMeterTexture);
textScoreBoard = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer);
// Crea la textura para dibujar el marcador

View File

@@ -56,7 +56,7 @@ void Tiledbg::fillTexture()
{
// Crea los objetos para pintar en la textura de fondo
Texture *bgTileTexture = new Texture(renderer, asset->get("title_bg_tile.png"));
Sprite *tile = new Sprite({0, 0, tileWidth, tileHeight}, bgTileTexture, renderer);
Sprite *tile = new Sprite({0, 0, tileWidth, tileHeight}, bgTileTexture);
// Prepara para dibujar sobre la textura
SDL_Texture *temp = SDL_GetRenderTarget(renderer);

View File

@@ -24,14 +24,14 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
text2 = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer);
miniLogoTexture = new Texture(renderer, asset->get("logo_jailgames_mini.png"));
miniLogoSprite = new Sprite(GAMECANVAS_CENTER_X - miniLogoTexture->getWidth() / 2, 0, miniLogoTexture->getWidth(), miniLogoTexture->getHeight(), miniLogoTexture, renderer);
miniLogoSprite = new Sprite(GAMECANVAS_CENTER_X - miniLogoTexture->getWidth() / 2, 0, miniLogoTexture->getWidth(), miniLogoTexture->getHeight(), miniLogoTexture);
tiledbg = new Tiledbg(renderer, screen, asset, {0, 0, param->gameWidth, param->gameHeight}, TILED_MODE_RANDOM);
gameLogo = new GameLogo(renderer, screen, asset, param, GAMECANVAS_CENTER_X, param->titleCC);
gameLogo->enable();
defineButtons = new DefineButtons(renderer, input, text2, param, options, section);
defineButtons = new DefineButtons(input, text2, param, options, section);
// Inicializa los valores
init();