forked from jaildesigner-jailgames/jaildoctors_dilemma
Afegint smart pointers
Actualitzat Resources Actualitzades les classes Sprite i derivades Afegida nova tipografia Actualitzat Asset Actualitzat Text
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
#include <SDL2/SDL_blendmode.h> // for SDL_BLENDMODE_BLEND
|
||||
#include <SDL2/SDL_timer.h> // for SDL_GetTicks
|
||||
#include <algorithm> // for max, min, replace
|
||||
#include "animatedsprite.h" // for AnimatedSprite
|
||||
#include "animated_sprite.h" // for AnimatedSprite
|
||||
#include "asset.h" // for Asset
|
||||
#include "const.h" // for GAMECANVAS_HEIGHT, GAMECANVAS_CENTER_X
|
||||
#include "input.h" // for Input, REPEAT_FALSE, inputs_e
|
||||
#include "jail_audio.h" // for JA_SetVolume, JA_DeleteMusic, JA_Loa...
|
||||
#include "movingsprite.h" // for MovingSprite
|
||||
#include "moving_sprite.h" // for MovingSprite
|
||||
#include "resource.h" // for Resource
|
||||
#include "screen.h" // for Screen
|
||||
#include "text.h" // for Text
|
||||
@@ -26,8 +26,8 @@ Ending2::Ending2()
|
||||
input(Input::get())
|
||||
{
|
||||
// Reserva memoria para los punteros a objetos
|
||||
text = new Text(resource->getOffset("smb2.txt"), resource->getTexture("smb2.png"), renderer);
|
||||
music = JA_LoadMusic(asset->get("ending2.ogg").c_str());
|
||||
text = resource->getText("smb2.txt");
|
||||
music = resource->getMusic("ending2.ogg");
|
||||
|
||||
// Inicializa variables
|
||||
counterEnabled = false;
|
||||
@@ -70,18 +70,6 @@ Ending2::Ending2()
|
||||
createTexts();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
Ending2::~Ending2()
|
||||
{
|
||||
// Libera la memoria de los objetos
|
||||
delete text;
|
||||
JA_DeleteMusic(music);
|
||||
|
||||
deleteSprites();
|
||||
deleteSpriteTexts();
|
||||
deleteTexts();
|
||||
}
|
||||
|
||||
// Actualiza el objeto
|
||||
void Ending2::update()
|
||||
{
|
||||
@@ -324,9 +312,6 @@ void Ending2::iniSpriteList()
|
||||
// Carga todos los sprites desde una lista
|
||||
void Ending2::loadSprites()
|
||||
{
|
||||
// Borra la memoria ocupada por los sprites
|
||||
deleteSprites();
|
||||
|
||||
// Inicializa variables
|
||||
maxSpriteWidth = 0;
|
||||
maxSpriteHeight = 0;
|
||||
@@ -334,9 +319,9 @@ void Ending2::loadSprites()
|
||||
// Carga los sprites
|
||||
for (auto sl : spriteList)
|
||||
{
|
||||
sprites.push_back(new AnimatedSprite(renderer, resource->getAnimation(sl + ".ani")));
|
||||
maxSpriteWidth = std::max(sprites.back()->getAnimationClip(0, 0).w, maxSpriteWidth);
|
||||
maxSpriteHeight = std::max(sprites.back()->getAnimationClip(0, 0).h, maxSpriteHeight);
|
||||
sprites.emplace_back(std::make_shared<AnimatedSprite>(renderer, resource->getAnimation(sl + ".ani")));
|
||||
maxSpriteWidth = std::max(sprites.back()->getWidth(), maxSpriteWidth);
|
||||
maxSpriteHeight = std::max(sprites.back()->getHeight(), maxSpriteHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,17 +417,17 @@ void Ending2::placeSprites()
|
||||
{
|
||||
const int x = i % 2 == 0 ? firstCol : secondCol;
|
||||
const int y = (i / 1) * (maxSpriteHeight + distSpriteText + text->getCharacterSize() + distSpriteSprite) + GAMECANVAS_HEIGHT + 40;
|
||||
const int w = sprites[i]->getAnimationClip(0, 0).w;
|
||||
const int h = sprites[i]->getAnimationClip(0, 0).h;
|
||||
const int w = sprites[i]->getWidth();
|
||||
const int h = sprites[i]->getHeight();
|
||||
const int dx = -(w / 2);
|
||||
const int dy = i % 1 == 0 ? maxSpriteHeight - h : (int)(maxSpriteHeight * 1.5f) - h;
|
||||
|
||||
sprites[i]->setRect({x + dx, y + dy, w, h});
|
||||
sprites[i]->setPosition({x + dx, y + dy, w, h});
|
||||
sprites[i]->setVelY(despSpeed);
|
||||
}
|
||||
|
||||
// Recoloca el último sprite, que es el del jugador
|
||||
const int w = sprites.back()->getAnimationClip(0, 0).w;
|
||||
const int w = sprites.back()->getWidth();
|
||||
const int x = GAMECANVAS_CENTER_X - (w / 2);
|
||||
const int y = sprites.back()->getPosY() + maxSpriteHeight * 2;
|
||||
sprites.back()->setPosX(x);
|
||||
@@ -453,9 +438,6 @@ void Ending2::placeSprites()
|
||||
// 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)
|
||||
{
|
||||
@@ -473,24 +455,22 @@ void Ending2::createSpriteTexts()
|
||||
const int X = (i == (int)spriteList.size() - 1) ? GAMECANVAS_CENTER_X - (w / 2) : x + dx;
|
||||
|
||||
// Crea la textura
|
||||
Texture *texture = new Texture(renderer);
|
||||
texture->createBlank(renderer, w, h, SDL_TEXTUREACCESS_TARGET);
|
||||
auto texture = std::make_shared<Texture>(renderer);
|
||||
texture->createBlank(w, h);
|
||||
texture->setAsRenderTarget(renderer);
|
||||
texture->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||
text->write(0, 0, txt);
|
||||
|
||||
// Crea el sprite
|
||||
MovingSprite *sprite = new MovingSprite(X, y, w, h, 0.0f, despSpeed, 0.0f, 0.0f, texture, renderer);
|
||||
spriteTexts.push_back(sprite);
|
||||
SDL_Rect pos = {X, y, w, h};
|
||||
spriteTexts.emplace_back(std::make_shared<MovingSprite>(texture, pos));
|
||||
spriteTexts.back()->setVelY(despSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
// Crea los sprites con las texturas con los textos del final
|
||||
void Ending2::createTexts()
|
||||
{
|
||||
// Borra la memoria ocupada por los sprites con las texturas de los textos del final
|
||||
deleteTexts();
|
||||
|
||||
// Crea los primeros textos
|
||||
std::vector<std::string> list;
|
||||
list.push_back("STARRING");
|
||||
@@ -506,15 +486,16 @@ void Ending2::createTexts()
|
||||
const int y = GAMECANVAS_HEIGHT + (text->getCharacterSize() * (i * 2));
|
||||
|
||||
// Crea la textura
|
||||
Texture *texture = new Texture(renderer);
|
||||
texture->createBlank(renderer, w, h, SDL_TEXTUREACCESS_TARGET);
|
||||
auto texture = std::make_shared<Texture>(renderer);
|
||||
texture->createBlank(w, h);
|
||||
texture->setAsRenderTarget(renderer);
|
||||
texture->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||
text->write(0, 0, list[i]);
|
||||
|
||||
// Crea el sprite
|
||||
MovingSprite *sprite = new MovingSprite(x + dx, y, w, h, 0.0f, despSpeed, 0.0f, 0.0f, texture, renderer);
|
||||
texts.push_back(sprite);
|
||||
SDL_Rect pos = {x + dx, y, w, h};
|
||||
texts.emplace_back(std::make_shared<MovingSprite>(texture, pos));
|
||||
texts.back()->setVelY(despSpeed);
|
||||
}
|
||||
|
||||
// Crea los últimos textos
|
||||
@@ -535,49 +516,19 @@ void Ending2::createTexts()
|
||||
const int y = start + (text->getCharacterSize() * (i * 2));
|
||||
|
||||
// Crea la textura
|
||||
Texture *texture = new Texture(renderer);
|
||||
texture->createBlank(renderer, w, h, SDL_TEXTUREACCESS_TARGET);
|
||||
auto texture = std::make_shared<Texture>(renderer);
|
||||
texture->createBlank(w, h);
|
||||
texture->setAsRenderTarget(renderer);
|
||||
texture->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||
text->write(0, 0, list[i]);
|
||||
|
||||
// Crea el sprite
|
||||
MovingSprite *sprite = new MovingSprite(x + dx, y, w, h, 0.0f, despSpeed, 0.0f, 0.0f, texture, renderer);
|
||||
texts.push_back(sprite);
|
||||
SDL_Rect pos = {x + dx, y, w, h};
|
||||
texts.emplace_back(std::make_shared<MovingSprite>(texture, pos));
|
||||
texts.back()->setVelY(despSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
// 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();
|
||||
}
|
||||
|
||||
// Borra la memoria ocupada por los sprites con las texturas de los textos del final
|
||||
void Ending2::deleteTexts()
|
||||
{
|
||||
for (auto text : texts)
|
||||
{
|
||||
delete text;
|
||||
}
|
||||
texts.clear();
|
||||
}
|
||||
|
||||
// Actualiza el fade final
|
||||
void Ending2::updateFinalFade()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user