From b88df7c9e62234bfd831afc9301a25216b1aabef Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 25 Sep 2022 14:34:40 +0200 Subject: [PATCH] =?UTF-8?q?Completadas=20las=20superficies=20autom=C3=A1ti?= =?UTF-8?q?cas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/room/03.room | 1 + source/player.cpp | 12 ++++++++++-- source/room.cpp | 31 ++++++++++++++++++++++++------- source/room.h | 17 ++++------------- todo.txt | 2 +- 5 files changed, 40 insertions(+), 23 deletions(-) diff --git a/data/room/03.room b/data/room/03.room index 48eb929..e917178 100644 --- a/data/room/03.room +++ b/data/room/03.room @@ -7,6 +7,7 @@ roomUp=0 roomDown=0 roomLeft=02.room roomRight=0 +autoSurface=left [enemy] tileset=bin.png diff --git a/source/player.cpp b/source/player.cpp index e910936..c94eeb5 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -183,8 +183,16 @@ void Player::checkInput() } else { // El movimiento lo proporciona la superficie - vx = 0.6f; - sprite->setFlip(SDL_FLIP_NONE); + vx = 0.6f * room->getAutoSurfaceDirection(); + + if (vx > 0.0f) + { + sprite->setFlip(SDL_FLIP_NONE); + } + else + { + sprite->setFlip(SDL_FLIP_HORIZONTAL); + } } if (input->checkInput(INPUT_UP, REPEAT_TRUE)) diff --git a/source/room.cpp b/source/room.cpp index 80a3140..8ace96c 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -13,6 +13,7 @@ Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asse paused = false; itemColor1 = stringToColor("magenta"); itemColor2 = stringToColor("yellow"); + autoSurfaceDirection = 1; counter = 0; // Copia los punteros a objetos @@ -339,14 +340,15 @@ bool Room::setVars(std::string var, std::string value) roomRight = value; } - else if (var == "tilemap") + else if (var == "autoSurface") { - // Se introducen los valores separados por comas en un vector - std::stringstream ss(value); - std::string tmp; - while (getline(ss, tmp, ',')) + if (value == "right") { - tilemap.push_back(std::stoi(tmp)); + autoSurfaceDirection = 1; + } + else + { + autoSurfaceDirection = -1; } } @@ -1181,7 +1183,16 @@ void Room::setAnimatedTiles() void Room::updateAnimatedTiles() { 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) { SDL_Rect rect = a.sprite->getSpriteClip(); @@ -1365,4 +1376,10 @@ void Room::pause() void Room::resume() { paused = false; +} + +// Obten la direccion de las superficies automaticas +int Room::getAutoSurfaceDirection() +{ + return autoSurfaceDirection; } \ No newline at end of file diff --git a/source/room.h b/source/room.h index d2a0099..124aeee 100644 --- a/source/room.h +++ b/source/room.h @@ -17,19 +17,6 @@ #ifndef 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 { t_empty, @@ -84,6 +71,7 @@ private: int counter; // Contador para lo que haga falta std::vector aTile; // Vector con los indices de tiles animados std::vector 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 mapWidth; // Ancho del mapa en tiles @@ -228,6 +216,9 @@ public: // Quita el modo pausa del mapa void resume(); + + // Obten la direccion de las superficies automaticas + int getAutoSurfaceDirection(); }; #endif diff --git a/todo.txt b/todo.txt index c87b3c3..f136dfa 100644 --- a/todo.txt +++ b/todo.txt @@ -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 (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 -(A) Crear tiles que arrastren, tipo cinta transportadora +x (A) Crear tiles que arrastren, tipo cinta transportadora x (A) Tiles animados x (A) Tile que maten (o enemigos?) x (A) Cuando mueres, pantalla negra entre vida y vida