From 8101c335266eb48aa59c3005d56d82a192a59f10 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 11 Jul 2022 18:08:48 +0200 Subject: [PATCH] =?UTF-8?q?Muerte=20y=20reaparici=C3=B3n=20del=20jugador?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/room/02.room | 15 ++++++++++++++- data/room/room1.tmx | 22 +++++++++++----------- data/room/room2.tmx | 22 +++++++++++----------- source/game.cpp | 23 ++++++++++++++++++++--- source/game.h | 6 ++++-- source/movingsprite.cpp | 6 ++++++ source/movingsprite.h | 3 +++ source/player.cpp | 35 ++++++++++++++++++++++++++--------- source/player.h | 16 +++++++++++++++- 9 files changed, 110 insertions(+), 38 deletions(-) diff --git a/data/room/02.room b/data/room/02.room index d9bb16b..20fb3e9 100644 --- a/data/room/02.room +++ b/data/room/02.room @@ -8,4 +8,17 @@ room_right=0 [tilemap] room2.tmx -[tilemap-end] \ No newline at end of file +[tilemap-end] + +[enemy] +tileset=enemy01.png +x=120 +y=8 +vx=0 +vy=1 +x1=120 +x2=120 +y1=8 +y2=104 +color=purple +[enemy-end] \ No newline at end of file diff --git a/data/room/room1.tmx b/data/room/room1.tmx index 4457e9e..7144aaf 100644 --- a/data/room/room1.tmx +++ b/data/room/room1.tmx @@ -4,17 +4,17 @@ 41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,41,41,41,41,41,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,41,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,41,41,0,0,0,0,0,0,0,0,0,0,0,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,41, -41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41, -41,0,0,0,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,0,0,0,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,41,41,41,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,41,41,41,41,41,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,41,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,41,41,0,0,0,0,0,0,0,0,0,0,0,41,41,41,41,41,41,41,41,0,0,0,0,0,41,41,41,41,41, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0, +41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +41,0,0,0,0,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,0,0,0,0, 41,0,0,0,0,0,0,0,0,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41, diff --git a/data/room/room2.tmx b/data/room/room2.tmx index 89b0bab..f7e8161 100644 --- a/data/room/room2.tmx +++ b/data/room/room2.tmx @@ -4,17 +4,17 @@ 43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,83,83,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,43,43,43,43,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43, -43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,83,83,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,43,43,43,43,0,0,0,0,0,0,0,0,0,43, +43,43,43,43,43,43,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43, 0,0,0,0,0,0,0,83,83,83,83,83,83,0,0,0,0,0,0,3,0,0,0,0,83,83,0,0,0,0,0,43, 0,0,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,43, 63,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,43,43,43,43,43,43,43,43,43,43,43,63, diff --git a/source/game.cpp b/source/game.cpp index a6e1348..34e34d9 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -3,6 +3,10 @@ // Constructor Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input) { + // Inicia variables + mCurrentRoom = "01.room"; + mSpawnPoint = {2 * 8, 12 * 8, 0, 0, 0, STATUS_STANDING, SDL_FLIP_NONE}; + // Copia los punteros mRenderer = renderer; mAsset = asset; @@ -11,8 +15,8 @@ Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, // Crea los objetos mScreen = new Screen(window, renderer); - mRoom = new Room(mAsset->get("01.room"), mRenderer, mAsset); - mPlayer = new Player(mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom); + mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset); + mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom); mEventHandler = new SDL_Event(); mTextureText = new LTexture(); mText = new Text(mAsset->get("smb2.txt"), mTextureText, renderer); @@ -118,6 +122,16 @@ void Game::update() checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro checkPlayerOnBorder(); checkPlayerOnFloor(); + if (checkPlayerAndEnemies()) + { + // Destruye la habitacion y el jugador + delete mRoom; + delete mPlayer; + + // Crea la nueva habitación y el nuevo jugador + mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset); + mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom); + } } } @@ -207,9 +221,12 @@ void Game::checkPlayerOnBorder() { if (mPlayer->getOnBorder()) { - if (changeRoom(mRoom->getRoom(mPlayer->getBorder()))) + const std::string room_name = mRoom->getRoom(mPlayer->getBorder()); + if (changeRoom(room_name)) { mPlayer->switchBorders(); + mCurrentRoom = room_name; + mSpawnPoint = mPlayer->getSpawnParams(); } } } diff --git a/source/game.h b/source/game.h index 6b4cf42..2b1318b 100644 --- a/source/game.h +++ b/source/game.h @@ -37,7 +37,9 @@ private: Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa section_t mSection; // Seccion actual dentro del juego - + std::string mCurrentRoom; // Fichero de la habitación actual + player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador + // Inicializa las variables void init(); @@ -51,7 +53,7 @@ private: void draw(); // Comprueba la entrada y actua - //void checkInput(); + // void checkInput(); // Cambia de habitación bool changeRoom(std::string file); diff --git a/source/movingsprite.cpp b/source/movingsprite.cpp index 885182a..ea76dfd 100644 --- a/source/movingsprite.cpp +++ b/source/movingsprite.cpp @@ -294,6 +294,12 @@ void MovingSprite::setFlip(SDL_RendererFlip flip) mFlip = flip; } +// Obtiene el valor de la variable +SDL_RendererFlip MovingSprite::getFlip() +{ + return mFlip; +} + // Devuelve el rectangulo donde está el sprite SDL_Rect MovingSprite::getRect() { diff --git a/source/movingsprite.h b/source/movingsprite.h index fcf7bb6..18d6f54 100644 --- a/source/movingsprite.h +++ b/source/movingsprite.h @@ -138,6 +138,9 @@ public: // Establece el valor de la variable void setFlip(SDL_RendererFlip flip); + // Obtiene el valor de la variable + SDL_RendererFlip getFlip(); + // Devuelve el rectangulo donde está el sprite SDL_Rect getRect(); }; diff --git a/source/player.cpp b/source/player.cpp index d50d3d5..e92382b 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -5,7 +5,7 @@ // CAUTION!!!!! si no se gasta al final, quitar la referencia a la habitación // Constructor -Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room) +Player::Player(player_t ini, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room) { // Obten punteros a objetos asset = _asset; @@ -24,15 +24,14 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp onBorder = false; border = BORDER_TOP; - jump_ini = 0; - status = STATUS_STANDING; + jump_ini = ini.jump_ini; + status = ini.status; + + sprite->setPosX(ini.x); + sprite->setPosY(ini.y); + sprite->setVelX(ini.vx); + sprite->setVelY(ini.vy); - sprite->setPosX(2 * 8); - sprite->setPosX(10 * 8); - sprite->setPosY(12 * 8); - sprite->setPosY(6 * 8); - sprite->setVelX(0); - sprite->setVelY(0); sprite->setWidth(8); sprite->setHeight(16); sprite->setCurrentFrame(0); @@ -46,6 +45,8 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp sprite->setAnimationFrames(0, 3, 8 * 3, 0, 8, 16); sprite->setSpriteClip(sprite->getAnimationClip(0, 0)); + sprite->setFlip(ini.flip); + lastPosition = getRect(); collider = getRect(); } @@ -281,4 +282,20 @@ void Player::checkJump() { status = STATUS_FALLING; } +} + +// Obtiene algunos parametros del jugador +player_t Player::getSpawnParams() +{ + player_t params; + + params.x = sprite->getPosX(); + params.y = sprite->getPosY(); + params.vx = sprite->getVelX(); + params.vy = sprite->getVelY(); + params.jump_ini = jump_ini; + params.status = status; + params.flip = sprite->getFlip(); + + return params; } \ No newline at end of file diff --git a/source/player.h b/source/player.h index 2922f0b..5d826ee 100644 --- a/source/player.h +++ b/source/player.h @@ -19,6 +19,17 @@ #define GRAVITY 0.035f #define MAX_VY 1.2f +struct player_t +{ + float x; + float y; + float vx; + float vy; + int jump_ini; + int status; + SDL_RendererFlip flip; +}; + // Clase Player class Player { @@ -62,7 +73,7 @@ public: int status; // Estado en el que se encuentra el jugador. Util apara saber si está saltando o cayendo // Constructor - Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room); + Player(player_t ini, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room); // Destructor ~Player(); @@ -105,6 +116,9 @@ public: // Deshace el ultimo movimiento void undoLastMove(); + + // Obtiene algunos parametros del jugador + player_t getSpawnParams(); }; #endif