Trabajando en el ending2
This commit is contained in:
@@ -22,6 +22,9 @@ Ending2::Ending2(SDL_Renderer *renderer, Screen *screen, Resource *resource, Ass
|
|||||||
section.subsection = 0;
|
section.subsection = 0;
|
||||||
ticks = 0;
|
ticks = 0;
|
||||||
ticksSpeed = 15;
|
ticksSpeed = 15;
|
||||||
|
distSpriteText = 8;
|
||||||
|
distSpriteSprite = 0;
|
||||||
|
despSpeed = -0.2f;
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
screen->setBorderColor(stringToColor(options->palette, "black"));
|
screen->setBorderColor(stringToColor(options->palette, "black"));
|
||||||
@@ -31,6 +34,12 @@ Ending2::Ending2(SDL_Renderer *renderer, Screen *screen, Resource *resource, Ass
|
|||||||
|
|
||||||
// Carga todos los sprites desde una lista
|
// Carga todos los sprites desde una lista
|
||||||
loadSprites();
|
loadSprites();
|
||||||
|
|
||||||
|
// Coloca los sprites en su sito
|
||||||
|
placeSprites();
|
||||||
|
|
||||||
|
// Crea los sprites con las texturas con los textos
|
||||||
|
createSpriteTexts();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
@@ -41,11 +50,8 @@ Ending2::~Ending2()
|
|||||||
delete text;
|
delete text;
|
||||||
JA_DeleteMusic(music);
|
JA_DeleteMusic(music);
|
||||||
|
|
||||||
for (auto sprite : sprites)
|
deleteSprites();
|
||||||
{
|
deleteSpriteTexts();
|
||||||
delete sprite;
|
|
||||||
}
|
|
||||||
sprites.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza el objeto
|
// Actualiza el objeto
|
||||||
@@ -66,10 +72,8 @@ void Ending2::update()
|
|||||||
// Actualiza los sprites
|
// Actualiza los sprites
|
||||||
updateSprites();
|
updateSprites();
|
||||||
|
|
||||||
if (counter > 4000)
|
// Actualiza los sprites de texto
|
||||||
{
|
updateTextSprites();
|
||||||
section.name = SECTION_PROG_LOGO;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,8 +89,11 @@ void Ending2::render()
|
|||||||
// Dibuja los sprites
|
// Dibuja los sprites
|
||||||
renderSprites();
|
renderSprites();
|
||||||
|
|
||||||
|
// Dibuja los sprites con el texto
|
||||||
|
renderSpriteTexts();
|
||||||
|
|
||||||
const std::string txt = std::to_string(preCounter) + " - " + std::to_string(counter) + " - W:" + std::to_string(maxSpriteWidth) + " - H:" + std::to_string(maxSpriteHeight);
|
const std::string txt = std::to_string(preCounter) + " - " + std::to_string(counter) + " - W:" + std::to_string(maxSpriteWidth) + " - H:" + std::to_string(maxSpriteHeight);
|
||||||
text->write(0, 192 - 8, txt);
|
// text->write(0, 192 - 8, txt);
|
||||||
|
|
||||||
// Dibuja la cuadricula
|
// Dibuja la cuadricula
|
||||||
/*{
|
/*{
|
||||||
@@ -103,6 +110,12 @@ void Ending2::render()
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
/*{
|
||||||
|
SDL_SetRenderDrawColor(renderer, 128, 128, 128, 128);
|
||||||
|
SDL_RenderDrawLine(renderer, GAMECANVAS_FIRST_QUARTER_X, 0, GAMECANVAS_FIRST_QUARTER_X, 192);
|
||||||
|
SDL_RenderDrawLine(renderer, GAMECANVAS_THIRD_QUARTER_X, 0, GAMECANVAS_THIRD_QUARTER_X, 192);
|
||||||
|
}*/
|
||||||
|
|
||||||
// Vuelca el contenido del renderizador en pantalla
|
// Vuelca el contenido del renderizador en pantalla
|
||||||
screen->blit();
|
screen->blit();
|
||||||
}
|
}
|
||||||
@@ -257,27 +270,20 @@ void Ending2::iniSpriteList()
|
|||||||
// Carga todos los sprites desde una lista
|
// Carga todos los sprites desde una lista
|
||||||
void Ending2::loadSprites()
|
void Ending2::loadSprites()
|
||||||
{
|
{
|
||||||
|
// Borra la memoria ocupada por los sprites
|
||||||
|
deleteSprites();
|
||||||
|
|
||||||
|
// Inicializa variables
|
||||||
maxSpriteWidth = 0;
|
maxSpriteWidth = 0;
|
||||||
maxSpriteHeight = 0;
|
maxSpriteHeight = 0;
|
||||||
|
|
||||||
|
// Carga los sprites
|
||||||
for (auto sl : spriteList)
|
for (auto sl : spriteList)
|
||||||
{
|
{
|
||||||
sprites.push_back(new AnimatedSprite(renderer, resource->getAnimation(sl + ".ani")));
|
sprites.push_back(new AnimatedSprite(renderer, resource->getAnimation(sl + ".ani")));
|
||||||
maxSpriteWidth = std::max(sprites.back()->getAnimationClip(0, 0).w, maxSpriteWidth);
|
maxSpriteWidth = std::max(sprites.back()->getAnimationClip(0, 0).w, maxSpriteWidth);
|
||||||
maxSpriteHeight = std::max(sprites.back()->getAnimationClip(0, 0).h, maxSpriteHeight);
|
maxSpriteHeight = std::max(sprites.back()->getAnimationClip(0, 0).h, maxSpriteHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int sw = maxSpriteWidth + 6;
|
|
||||||
const int sh = maxSpriteHeight + 6;
|
|
||||||
for (int i = 0; i < (int)sprites.size(); ++i)
|
|
||||||
{
|
|
||||||
const int x = (i * sw) % (256 - (256 % sw));
|
|
||||||
const int y = (i / (256 / sw)) * sh;
|
|
||||||
const int w = sprites.at(i)->getAnimationClip(0, 0).w;
|
|
||||||
const int h = sprites.at(i)->getAnimationClip(0, 0).h;
|
|
||||||
sprites.at(i)->setRect({x, y, w, h});
|
|
||||||
sprites.at(i)->setVelY(-0.1f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza los sprites
|
// Actualiza los sprites
|
||||||
@@ -289,14 +295,23 @@ void Ending2::updateSprites()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Actualiza los sprites de texto
|
||||||
|
void Ending2::updateTextSprites()
|
||||||
|
{
|
||||||
|
for (auto &sprite : spriteTexts)
|
||||||
|
{
|
||||||
|
sprite->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Dibuja los sprites
|
// Dibuja los sprites
|
||||||
void Ending2::renderSprites()
|
void Ending2::renderSprites()
|
||||||
{
|
{
|
||||||
const color_t color = stringToColor(options->palette, "red");
|
const color_t color = stringToColor(options->palette, "red");
|
||||||
for (auto sprite : sprites)
|
for (auto sprite : sprites)
|
||||||
{
|
{
|
||||||
const bool a = sprite->getRect().y + sprite->getRect().h > 5;
|
const bool a = sprite->getRect().y + sprite->getRect().h > 0;
|
||||||
const bool b = sprite->getRect().y < 187;
|
const bool b = sprite->getRect().y < GAMECANVAS_HEIGHT;
|
||||||
if (a && b)
|
if (a && b)
|
||||||
{
|
{
|
||||||
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
||||||
@@ -305,3 +320,96 @@ void Ending2::renderSprites()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Dibuja los sprites con el texto
|
||||||
|
void Ending2::renderSpriteTexts()
|
||||||
|
{
|
||||||
|
const color_t color = stringToColor(options->palette, "white");
|
||||||
|
for (auto sprite : spriteTexts)
|
||||||
|
{
|
||||||
|
const bool a = sprite->getRect().y + sprite->getRect().h > 0;
|
||||||
|
const bool b = sprite->getRect().y < GAMECANVAS_HEIGHT;
|
||||||
|
if (a && b)
|
||||||
|
{
|
||||||
|
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
||||||
|
sprite->render();
|
||||||
|
sprite->getTexture()->setColor(255, 255, 255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Coloca los sprites en su sito
|
||||||
|
void Ending2::placeSprites()
|
||||||
|
{
|
||||||
|
const int sep = 16;
|
||||||
|
for (int i = 0; i < (int)sprites.size(); ++i)
|
||||||
|
{
|
||||||
|
const int x = i % 2 == 0 ? GAMECANVAS_FIRST_QUARTER_X : GAMECANVAS_THIRD_QUARTER_X;
|
||||||
|
const int y = (i / 1) * (maxSpriteHeight + distSpriteText + text->getCharacterSize() + distSpriteSprite) + GAMECANVAS_HEIGHT;
|
||||||
|
const int w = sprites.at(i)->getAnimationClip(0, 0).w;
|
||||||
|
const int h = sprites.at(i)->getAnimationClip(0, 0).h;
|
||||||
|
const int dx = -(w / 2);
|
||||||
|
const int dy = i % 1 == 0 ? maxSpriteHeight - h : (int)(maxSpriteHeight * 1.5f) - h;
|
||||||
|
|
||||||
|
sprites.at(i)->setRect({x + dx, y + dy, w, h});
|
||||||
|
sprites.at(i)->setVelY(despSpeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea los sprites con las texturas con los textos
|
||||||
|
void Ending2::createSpriteTexts()
|
||||||
|
{
|
||||||
|
// Borra la memoria ocupada por los sprites con las texturas de los textos
|
||||||
|
deleteSpriteTexts();
|
||||||
|
|
||||||
|
// Crea los sprites de texto a partir de la lista
|
||||||
|
for (int i = 0; i < (int)spriteList.size(); ++i)
|
||||||
|
{
|
||||||
|
// Calcula constantes
|
||||||
|
// Texto debajo
|
||||||
|
const int w = text->lenght(spriteList.at(i), 1);
|
||||||
|
const int h = text->getCharacterSize();
|
||||||
|
const int x = i % 2 == 0 ? GAMECANVAS_FIRST_QUARTER_X : GAMECANVAS_THIRD_QUARTER_X;
|
||||||
|
const int dx = -(w / 2);
|
||||||
|
const int y = sprites.at(i)->getPosY() + sprites.at(i)->getHeight() + distSpriteText;
|
||||||
|
|
||||||
|
// Texto al lado
|
||||||
|
// const int w = text->lenght(spriteList.at(i), 1);
|
||||||
|
// const int h = text->getCharacterSize();
|
||||||
|
// const int x = i % 2 == 1 ? GAMECANVAS_FIRST_QUARTER_X : GAMECANVAS_THIRD_QUARTER_X;
|
||||||
|
// const int dx = -(w / 2);
|
||||||
|
// const int y = sprites.at(i)->getPosY() + (sprites.at(i)->getHeight() / 2) - (h / 2);
|
||||||
|
|
||||||
|
// Crea la textura
|
||||||
|
Texture *texture = new Texture(renderer);
|
||||||
|
texture->createBlank(renderer, w, h, SDL_TEXTUREACCESS_TARGET);
|
||||||
|
texture->setAsRenderTarget(renderer);
|
||||||
|
texture->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
text->write(0, 0, spriteList.at(i));
|
||||||
|
|
||||||
|
// Crea el sprite
|
||||||
|
MovingSprite *sprite = new MovingSprite(x + dx, y, w, h, 0.0f, despSpeed, 0.0f, 0.0f, texture, renderer);
|
||||||
|
spriteTexts.push_back(sprite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Borra la memoria ocupada por los sprites con las texturas de los textos
|
||||||
|
void Ending2::deleteSpriteTexts()
|
||||||
|
{
|
||||||
|
for (auto sprite : spriteTexts)
|
||||||
|
{
|
||||||
|
delete sprite->getTexture();
|
||||||
|
delete sprite;
|
||||||
|
}
|
||||||
|
spriteTexts.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Borra la memoria ocupada por los sprites
|
||||||
|
void Ending2::deleteSprites()
|
||||||
|
{
|
||||||
|
for (auto sprite : sprites)
|
||||||
|
{
|
||||||
|
delete sprite;
|
||||||
|
}
|
||||||
|
sprites.clear();
|
||||||
|
}
|
||||||
@@ -20,14 +20,15 @@ class Ending2
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
// Objetos y punteros
|
// Objetos y punteros
|
||||||
Asset *asset; // Objeto con los ficheros de recursos
|
Asset *asset; // Objeto con los ficheros de recursos
|
||||||
Resource *resource; // Objeto con los recursos
|
Resource *resource; // Objeto con los recursos
|
||||||
Screen *screen; // Objeto encargado de dibujar en pantalla
|
Screen *screen; // Objeto encargado de dibujar en pantalla
|
||||||
SDL_Event *eventHandler; // Manejador de eventos
|
SDL_Event *eventHandler; // Manejador de eventos
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Text *text; // Objeto para escribir texto en pantalla
|
Text *text; // Objeto para escribir texto en pantalla
|
||||||
options_t *options; // Puntero a las opciones del juego
|
options_t *options; // Puntero a las opciones del juego
|
||||||
std::vector<AnimatedSprite *> sprites; // Vector con todos los sprites a dibujar
|
std::vector<AnimatedSprite *> sprites; // Vector con todos los sprites a dibujar
|
||||||
|
std::vector<MovingSprite *> spriteTexts; // Vector con los sprites de texto
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
int counter; // Contador
|
int counter; // Contador
|
||||||
@@ -39,6 +40,9 @@ private:
|
|||||||
std::vector<std::string> spriteList; // Lista con todos los sprites a dibujar
|
std::vector<std::string> spriteList; // Lista con todos los sprites a dibujar
|
||||||
int maxSpriteWidth; // El valor de ancho del sprite mas ancho
|
int maxSpriteWidth; // El valor de ancho del sprite mas ancho
|
||||||
int maxSpriteHeight; // El valor de alto del sprite mas alto
|
int maxSpriteHeight; // El valor de alto del sprite mas alto
|
||||||
|
int distSpriteText; // Distancia entre el sprite y el texto que lo acompaña
|
||||||
|
int distSpriteSprite; // Distancia entre dos sprites de la misma columna
|
||||||
|
float despSpeed; // Velocidad de desplazamiento de los sprites
|
||||||
|
|
||||||
// Actualiza el objeto
|
// Actualiza el objeto
|
||||||
void update();
|
void update();
|
||||||
@@ -61,9 +65,27 @@ private:
|
|||||||
// Actualiza los sprites
|
// Actualiza los sprites
|
||||||
void updateSprites();
|
void updateSprites();
|
||||||
|
|
||||||
|
// Actualiza los sprites de texto
|
||||||
|
void updateTextSprites();
|
||||||
|
|
||||||
// Dibuja los sprites
|
// Dibuja los sprites
|
||||||
void renderSprites();
|
void renderSprites();
|
||||||
|
|
||||||
|
// Dibuja los sprites con el texto
|
||||||
|
void renderSpriteTexts();
|
||||||
|
|
||||||
|
// Coloca los sprites en su sito
|
||||||
|
void placeSprites();
|
||||||
|
|
||||||
|
// Crea los sprites con las texturas con los textos
|
||||||
|
void createSpriteTexts();
|
||||||
|
|
||||||
|
// Borra la memoria ocupada por los sprites con las texturas de los textos
|
||||||
|
void deleteSpriteTexts();
|
||||||
|
|
||||||
|
// Borra la memoria ocupada por los sprites
|
||||||
|
void deleteSprites();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Ending2(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);
|
Ending2(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);
|
||||||
|
|||||||
Reference in New Issue
Block a user