Capa de fondo con posibilidad de scroll

This commit is contained in:
2022-09-23 17:32:09 +02:00
parent afe5b52b6b
commit eac0236c60
10 changed files with 62 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
fullScreenMode=0 fullScreenMode=0
windowSize=2 windowSize=3
filter=FILTER_NEAREST filter=FILTER_NEAREST
vSync=true vSync=true
integerScale=true integerScale=true

View File

@@ -2,6 +2,7 @@ tileset_img=surface.png
enemy_file=01.ene enemy_file=01.ene
bgColor1=0,171,159 bgColor1=0,171,159
bgColor2=144,225,231 bgColor2=144,225,231
bgScroll=true
room_up=0 room_up=0
room_down=0 room_down=0

View File

@@ -2,6 +2,7 @@ tileset_img=surface.png
enemy_file=02.ene enemy_file=02.ene
bgColor1=0,171,159 bgColor1=0,171,159
bgColor2=144,225,231 bgColor2=144,225,231
bgScroll=true
room_up=0 room_up=0
room_down=03.map room_down=03.map

View File

@@ -1,6 +1,7 @@
tileset_img=surface.png tileset_img=surface.png
bgColor1=255,90,100 bgColor1=255,90,100
bgColor2=255,255,100 bgColor2=255,255,100
bgScroll=true
room_up=0 room_up=0
room_down=04.map room_down=04.map

View File

@@ -1,6 +1,7 @@
tileset_img=surface.png tileset_img=surface.png
bgColor1=0,171,159 bgColor1=0,171,159
bgColor2=144,225,231 bgColor2=144,225,231
bgScroll=true
room_up=0 room_up=0
room_down=06.map room_down=06.map

View File

@@ -9,7 +9,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
this->screen = screen; this->screen = screen;
this->input = input; this->input = input;
this->debug = debug; this->debug = debug;
this->debug->setEnabled(true); //this->debug->setEnabled(true);
// Reserva memoria para los objetos // Reserva memoria para los objetos
scoreboard = new ScoreBoard(renderer, asset, &board); scoreboard = new ScoreBoard(renderer, asset, &board);

View File

@@ -10,6 +10,8 @@ Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset, ItemTracker *it
name = file.substr(file.find_last_of("\\/") + 1); name = file.substr(file.find_last_of("\\/") + 1);
enemy_file = ""; enemy_file = "";
bgColor1 = bgColor2 = {0, 0, 0}; bgColor1 = bgColor2 = {0, 0, 0};
bgScroll = false;
counter = 0;
// Copia los punteros a objetos // Copia los punteros a objetos
this->asset = asset; this->asset = asset;
@@ -273,6 +275,7 @@ bool Map::setVars(std::string var, std::string value)
{ {
tileset_img = value; tileset_img = value;
} }
else if (var == "bgColor1") else if (var == "bgColor1")
{ {
// Se introducen los valores separados por comas en un vector // Se introducen los valores separados por comas en un vector
@@ -285,6 +288,7 @@ bool Map::setVars(std::string var, std::string value)
getline(ss, tmp, ','); getline(ss, tmp, ',');
bgColor1.b = std::stoi(tmp); bgColor1.b = std::stoi(tmp);
} }
else if (var == "bgColor2") else if (var == "bgColor2")
{ {
// Se introducen los valores separados por comas en un vector // Se introducen los valores separados por comas en un vector
@@ -297,29 +301,41 @@ bool Map::setVars(std::string var, std::string value)
getline(ss, tmp, ','); getline(ss, tmp, ',');
bgColor2.b = std::stoi(tmp); bgColor2.b = std::stoi(tmp);
} }
else if (var == "bgScroll")
{
bgScroll = stringToBool(value);
}
else if (var == "room_up") else if (var == "room_up")
{ {
room_up = value; room_up = value;
} }
else if (var == "room_down") else if (var == "room_down")
{ {
room_down = value; room_down = value;
} }
else if (var == "room_left") else if (var == "room_left")
{ {
room_left = value; room_left = value;
} }
else if (var == "room_right") else if (var == "room_right")
{ {
room_right = value; room_right = value;
} }
else if (var == "enemy_file") else if (var == "enemy_file")
{ {
enemy_file = value; enemy_file = value;
} }
else if (var == "") else if (var == "")
{ {
} }
else else
{ {
success = false; success = false;
@@ -338,53 +354,66 @@ bool Map::setActor(actor_t *actor, SDL_Point *p1, SDL_Point *p2, std::string var
{ {
actor->tileset = value; actor->tileset = value;
} }
else if (var == "animation") else if (var == "animation")
{ {
actor->animation = value; actor->animation = value;
} }
else if (var == "width") else if (var == "width")
{ {
actor->w = std::stoi(value); actor->w = std::stoi(value);
} }
else if (var == "height") else if (var == "height")
{ {
actor->h = std::stoi(value); actor->h = std::stoi(value);
} }
else if (var == "x") else if (var == "x")
{ {
actor->x = std::stof(value) * tile_size; actor->x = std::stof(value) * tile_size;
} }
else if (var == "y") else if (var == "y")
{ {
actor->y = std::stof(value) * tile_size; actor->y = std::stof(value) * tile_size;
} }
else if (var == "vx") else if (var == "vx")
{ {
actor->vx = std::stof(value); actor->vx = std::stof(value);
} }
else if (var == "vy") else if (var == "vy")
{ {
actor->vy = std::stof(value); actor->vy = std::stof(value);
} }
else if (var == "x1") else if (var == "x1")
{ {
p1->x = std::stoi(value) * tile_size; p1->x = std::stoi(value) * tile_size;
} }
else if (var == "x2") else if (var == "x2")
{ {
p2->x = std::stoi(value) * tile_size; p2->x = std::stoi(value) * tile_size;
} }
else if (var == "y1") else if (var == "y1")
{ {
p1->y = std::stoi(value) * tile_size; p1->y = std::stoi(value) * tile_size;
} }
else if (var == "y2") else if (var == "y2")
{ {
p2->y = std::stoi(value) * tile_size; p2->y = std::stoi(value) * tile_size;
} }
else if ((var == "[/moving platform]") || (var == "[/diamond]")) else if ((var == "[/moving platform]") || (var == "[/diamond]"))
{ {
} }
else else
{ {
success = false; success = false;
@@ -468,8 +497,23 @@ void Map::render()
void Map::renderLayer0() void Map::renderLayer0()
{ {
// Dibuja la textura con el mapa en pantalla // Dibuja la textura con el mapa en pantalla
if (bgScroll)
{
const int offset = PLAY_AREA_WIDTH - ((counter / 20) % PLAY_AREA_WIDTH);
SDL_Rect src1 = {PLAY_AREA_X, PLAY_AREA_Y, offset, PLAY_AREA_HEIGHT};
SDL_Rect dst1 = {PLAY_AREA_X + PLAY_AREA_WIDTH - offset, PLAY_AREA_Y, offset, PLAY_AREA_HEIGHT};
SDL_Rect src2 = {PLAY_AREA_X + offset, PLAY_AREA_Y, PLAY_AREA_WIDTH - offset, PLAY_AREA_HEIGHT};
SDL_Rect dst2 = {PLAY_AREA_X, PLAY_AREA_Y, PLAY_AREA_WIDTH - offset, PLAY_AREA_HEIGHT};
SDL_RenderCopy(renderer, map_layer0, &src1, &dst1);
SDL_RenderCopy(renderer, map_layer0, &src2, &dst2);
}
else
{
SDL_Rect rect = {PLAY_AREA_X, PLAY_AREA_Y, PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT}; SDL_Rect rect = {PLAY_AREA_X, PLAY_AREA_Y, PLAY_AREA_WIDTH, PLAY_AREA_HEIGHT};
SDL_RenderCopy(renderer, map_layer0, NULL, &rect); SDL_RenderCopy(renderer, map_layer0, nullptr, nullptr);
}
} }
// Dibuja la capa 1 // Dibuja la capa 1
@@ -492,6 +536,8 @@ void Map::renderActors()
// Actualiza todas las variables // Actualiza todas las variables
void Map::update() void Map::update()
{ {
counter++;
for (auto actor : actors) for (auto actor : actors)
{ {
actor->update(); actor->update();

View File

@@ -53,7 +53,9 @@ private:
std::vector<Actor *> actors; // Listado con los actores de la habitación std::vector<Actor *> actors; // Listado con los actores de la habitación
color_t bgColor1; // Color superior del degradado de fondo color_t bgColor1; // Color superior del degradado de fondo
color_t bgColor2; // Color inferior del degradado de fondo color_t bgColor2; // Color inferior del degradado de fondo
bool bgScroll; // Indica si la capa de fondo se mueve
ItemTracker *itemTracker; // Objeto que gestiona los items que ya se han recogido ItemTracker *itemTracker; // Objeto que gestiona los items que ya se han recogido
int counter; // Contador para lo que se necesite
int tile_size; // Ancho del tile en pixels int tile_size; // Ancho del tile en pixels
int map_width; // Ancho del mapa en tiles int map_width; // Ancho del mapa en tiles

View File

@@ -24,7 +24,6 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board)
// Inicializa las variables // Inicializa las variables
rect = {SCOREBOARD_X, SCOREBOARD_Y, SCOREBOARD_WIDTH, SCOREBOARD_HEIGHT}; rect = {SCOREBOARD_X, SCOREBOARD_Y, SCOREBOARD_WIDTH, SCOREBOARD_HEIGHT};
counter = 0; counter = 0;
movingCounter = 0;
fadingCounter = 0; fadingCounter = 0;
state = sb_hide; state = sb_hide;
} }
@@ -101,16 +100,12 @@ void ScoreBoard::update()
else if (state == sb_showing) else if (state == sb_showing)
{ {
movingCounter++;
fadingCounter++; fadingCounter++;
// float step = ((float)fadingCounter / (float)SCOREBOARD_HEIGHT); const float step = ((float)fadingCounter / (float)SCOREBOARD_HEIGHT);
auto easingFunction = getEasingFunction(EaseOutSine); const int alpha = 255 * step;
auto step = easingFunction(((float)fadingCounter / (float)SCOREBOARD_HEIGHT));
int alpha = 0 + ((255 - 0) * step);
int pos = -32 + ((0 + 32) * step);
rect.y = pos; rect.y++;
SDL_SetTextureAlphaMod(layer, alpha); SDL_SetTextureAlphaMod(layer, alpha);
if (rect.y == SCOREBOARD_Y) if (rect.y == SCOREBOARD_Y)
@@ -122,22 +117,18 @@ void ScoreBoard::update()
else if (state == sb_hiding) else if (state == sb_hiding)
{ {
movingCounter--;
fadingCounter--; fadingCounter--;
auto easingFunction = getEasingFunction(EaseOutSine); const float step = ((float)fadingCounter / (float)SCOREBOARD_HEIGHT);
auto step = easingFunction(((float)fadingCounter / (float)SCOREBOARD_HEIGHT)); const int alpha = 255 * step;
int alpha = 0 + ((255 - 0) * step);
int pos = -32 + ((0 + 32) * step);
rect.y = pos; rect.y--;
SDL_SetTextureAlphaMod(layer, alpha); SDL_SetTextureAlphaMod(layer, alpha);
if (rect.y == SCOREBOARD_Y - SCOREBOARD_HEIGHT) if (rect.y == SCOREBOARD_Y - SCOREBOARD_HEIGHT)
{ {
state = sb_hide; state = sb_hide;
counter = 0; counter = 0;
movingCounter = 0;
fadingCounter = 0; fadingCounter = 0;
SDL_SetTextureAlphaMod(layer, 255); SDL_SetTextureAlphaMod(layer, 255);
} }

View File

@@ -37,7 +37,6 @@ private:
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
int counter; // Contador interno int counter; // Contador interno
int movingCounter; // Contador para el movimiento del marcador
int fadingCounter; // Contador para el desvanecimiento del marcador int fadingCounter; // Contador para el desvanecimiento del marcador
board_t *board; // Contiene las variables a mostrar en el marcador board_t *board; // Contiene las variables a mostrar en el marcador
sb_state_e state; // Estado en el que se encuentra el marcador sb_state_e state; // Estado en el que se encuentra el marcador