Completadas las superficies automáticas

This commit is contained in:
2022-09-25 14:34:40 +02:00
parent dea16e0004
commit b88df7c9e6
5 changed files with 40 additions and 23 deletions

View File

@@ -7,6 +7,7 @@ roomUp=0
roomDown=0 roomDown=0
roomLeft=02.room roomLeft=02.room
roomRight=0 roomRight=0
autoSurface=left
[enemy] [enemy]
tileset=bin.png tileset=bin.png

View File

@@ -183,8 +183,16 @@ void Player::checkInput()
} }
else else
{ // El movimiento lo proporciona la superficie { // El movimiento lo proporciona la superficie
vx = 0.6f; vx = 0.6f * room->getAutoSurfaceDirection();
sprite->setFlip(SDL_FLIP_NONE);
if (vx > 0.0f)
{
sprite->setFlip(SDL_FLIP_NONE);
}
else
{
sprite->setFlip(SDL_FLIP_HORIZONTAL);
}
} }
if (input->checkInput(INPUT_UP, REPEAT_TRUE)) if (input->checkInput(INPUT_UP, REPEAT_TRUE))

View File

@@ -13,6 +13,7 @@ Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asse
paused = false; paused = false;
itemColor1 = stringToColor("magenta"); itemColor1 = stringToColor("magenta");
itemColor2 = stringToColor("yellow"); itemColor2 = stringToColor("yellow");
autoSurfaceDirection = 1;
counter = 0; counter = 0;
// Copia los punteros a objetos // Copia los punteros a objetos
@@ -339,14 +340,15 @@ bool Room::setVars(std::string var, std::string value)
roomRight = value; roomRight = value;
} }
else if (var == "tilemap") else if (var == "autoSurface")
{ {
// Se introducen los valores separados por comas en un vector if (value == "right")
std::stringstream ss(value);
std::string tmp;
while (getline(ss, tmp, ','))
{ {
tilemap.push_back(std::stoi(tmp)); autoSurfaceDirection = 1;
}
else
{
autoSurfaceDirection = -1;
} }
} }
@@ -1181,7 +1183,16 @@ void Room::setAnimatedTiles()
void Room::updateAnimatedTiles() void Room::updateAnimatedTiles()
{ {
const int numFrames = 4; const int numFrames = 4;
const int offset = ((counter / 3) % numFrames * tileSize); int offset = 0;
if (autoSurfaceDirection == -1)
{
offset = ((counter / 3) % numFrames * tileSize);
}
else
{
offset = ((numFrames - 1 - ((counter / 3) % numFrames)) * tileSize);
}
for (auto &a : aTile) for (auto &a : aTile)
{ {
SDL_Rect rect = a.sprite->getSpriteClip(); SDL_Rect rect = a.sprite->getSpriteClip();
@@ -1365,4 +1376,10 @@ void Room::pause()
void Room::resume() void Room::resume()
{ {
paused = false; paused = false;
}
// Obten la direccion de las superficies automaticas
int Room::getAutoSurfaceDirection()
{
return autoSurfaceDirection;
} }

View File

@@ -17,19 +17,6 @@
#ifndef ROOM_H #ifndef ROOM_H
#define ROOM_H #define ROOM_H
/*
Cada habitación se crea y destruye cada vez que se entra o sale de la misma
Cada habitacion tiene lo siguiente:
- NOMBRE (texto)
- COLOR DE FONDO (texto)
- COLOR DEL BORDE (texto)
- SET DE TILES (texto, hace referencia a un png de la colección)
- LIMITE SUPERIOR (ID de la habitación superior), INFERIOR, IZQUIERDO y DERECHO
- MAPA DE TILES (array con los indices de los tiles a utilizar) <-- hay que decidir si cada tile del set ya
tierne propiedades o se ponen en un mapa aparte
- LISTADO DE ENEMIGOS (tipo, posicion, dx, dy)
- LISTADO DE ITEMS (tipo, posicion)
*/
enum tile_e enum tile_e
{ {
t_empty, t_empty,
@@ -84,6 +71,7 @@ private:
int counter; // Contador para lo que haga falta int counter; // Contador para lo que haga falta
std::vector<aTile_t> aTile; // Vector con los indices de tiles animados std::vector<aTile_t> aTile; // Vector con los indices de tiles animados
std::vector<h_line_t> autoSurfaces; // Lista con las superficies automaticas de la habitación std::vector<h_line_t> autoSurfaces; // Lista con las superficies automaticas de la habitación
int autoSurfaceDirection; // Sentido en el que arrastran las superficies automáticas de la habitación
int tileSize; // Ancho del tile en pixels int tileSize; // Ancho del tile en pixels
int mapWidth; // Ancho del mapa en tiles int mapWidth; // Ancho del mapa en tiles
@@ -228,6 +216,9 @@ public:
// Quita el modo pausa del mapa // Quita el modo pausa del mapa
void resume(); void resume();
// Obten la direccion de las superficies automaticas
int getAutoSurfaceDirection();
}; };
#endif #endif

View File

@@ -8,7 +8,7 @@ x (A) Decidir un diseño para qué sucede en caso de morir: Recordar el punto po
x En el Jet Set Willy el juego recuerda la posicion y el momento. En las Tres Luces de Glaurung solo la posición. Se va a optar por seguir el diseño del Jet Set Willy {cm:2022-08-29} x En el Jet Set Willy el juego recuerda la posicion y el momento. En las Tres Luces de Glaurung solo la posición. Se va a optar por seguir el diseño del Jet Set Willy {cm:2022-08-29}
x (A) Crear tiles que maten {cm:2022-08-29} x (A) Crear tiles que maten {cm:2022-08-29}
x (A) Modificar el salto para que coincida con el del JSW, no ha de colisionar lateralmente x (A) Modificar el salto para que coincida con el del JSW, no ha de colisionar lateralmente
(A) Crear tiles que arrastren, tipo cinta transportadora x (A) Crear tiles que arrastren, tipo cinta transportadora
x (A) Tiles animados x (A) Tiles animados
x (A) Tile que maten (o enemigos?) x (A) Tile que maten (o enemigos?)
x (A) Cuando mueres, pantalla negra entre vida y vida x (A) Cuando mueres, pantalla negra entre vida y vida