Definidas areas para cada zona del juego
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user