Definidas areas para cada zona del juego

This commit is contained in:
2024-06-01 18:17:03 +02:00
parent 75a18c5306
commit baa2f3effd
12 changed files with 116 additions and 58 deletions

View File

@@ -8,6 +8,22 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset)
this->screen = screen;
this->asset = asset;
// Inicializa variables
gradientNumber = 0;
alpha = 0;
cloudsSpeed = 0;
transition = 0;
counter = 0;
rect = {0, 0, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
srcRect = {0, rect.h - playArea.h, playArea.w, playArea.h};
dstRect = playArea;
base = rect.h;
gradientRect[0] = {0, 0, rect.w, rect.h};
gradientRect[1] = {256, 0, rect.w, rect.h};
gradientRect[2] = {0, 192, rect.w, rect.h};
gradientRect[3] = {256, 192, rect.w, rect.h};
// Carga las texturas
buildingsTexture = new Texture(renderer, asset->get("game_buildings.png"));
cloudsTexture = new Texture(renderer, asset->get("game_clouds.png"));
@@ -15,32 +31,26 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset)
gradientsTexture = new Texture(renderer, asset->get("game_sky_colors.png"));
// Crea los sprites
clouds1A = new MovingSprite(0, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds1B = new MovingSprite(256, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds2A = new MovingSprite(0, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds2B = new MovingSprite(256, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds1A = new MovingSprite(0, base - 155, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds1B = new MovingSprite(256, base - 155, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds2A = new MovingSprite(0, base - 155 + 57, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
clouds2B = new MovingSprite(256, base - 155 + 57, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, cloudsTexture, renderer);
buildingsSprite = new Sprite(0, 0, 256, 160, buildingsTexture, renderer);
gradientSprite = new Sprite(0, 0, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT, gradientsTexture, renderer);
gradientSprite = new Sprite(0, 0, 256, 192, gradientsTexture, renderer);
grassSprite = new Sprite(0, 0, 256, 6, grassTexture, renderer);
// Inicializa variables
clouds1A->setSpriteClip(0, 0, 256, 52);
clouds1B->setSpriteClip(0, 0, 256, 52);
clouds2A->setSpriteClip(0, 52, 256, 32);
clouds2B->setSpriteClip(0, 52, 256, 32);
grassSprite->setPosY(154);
// Inicializa objetos
clouds1A->setSpriteClip(0, 0, 256, 52);
clouds1B->setSpriteClip(0, 0, 256, 52);
clouds2A->setSpriteClip(0, 52, 256, 32);
clouds2B->setSpriteClip(0, 52, 256, 32);
buildingsSprite->setPosY(base - buildingsSprite->getHeight());
grassSprite->setPosY(base - grassSprite->getHeight());
gradientRect[0] = {0, 0, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
gradientRect[1] = {256, 0, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
gradientRect[2] = {0, 192, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
gradientRect[3] = {256, 192, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT};
gradientNumber = 0;
alpha = 0;
cloudsSpeed = 0;
transition = 0;
counter = 0;
// Crea la textura para componer el fondo
canvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, rect.w, rect.h);
SDL_SetTextureBlendMode(canvas, SDL_BLENDMODE_BLEND);
}
// Destructor
@@ -65,6 +75,7 @@ Background::~Background()
delete buildingsSprite;
delete gradientSprite;
delete grassSprite;
SDL_DestroyTexture(canvas);
}
// Actualiza la lógica del objeto
@@ -113,9 +124,13 @@ void Background::update()
counter++;
}
// Dibuja el objeto
void Background::render()
// Compone todos los elementos del fondo en la textura
void Background::fillCanvas()
{
// Cambia el destino del renderizador
SDL_Texture *temp = SDL_GetRenderTarget(renderer);
SDL_SetRenderTarget(renderer, canvas);
// Dibuja el gradiente 2
gradientSprite->setSpriteClip(gradientRect[(gradientNumber + 1) % 4]);
gradientsTexture->setAlpha(255);
@@ -137,6 +152,16 @@ void Background::render()
// Dibuja la hierba
grassSprite->render();
// Deja el renderizador apuntando donde estaba
SDL_SetRenderTarget(renderer, temp);
}
// Dibuja el objeto
void Background::render()
{
fillCanvas();
SDL_RenderCopy(renderer, canvas, &srcRect, &dstRect);
}
// Vuelve a cargar las texturas
@@ -164,4 +189,14 @@ void Background::setGradientNumber(int value)
void Background::setTransition(float value)
{
transition = value;
}
// Establece la posición del objeto
void Background::setPos(SDL_Rect rect)
{
dstRect = rect;
// Si cambian las medidas del destino, hay que cambiar las del origen para evitar deformar la imagen
srcRect.w = rect.w;
srcRect.h = rect.h;
}