From 4cf09d1535581cc3f09155164be08af861cdd610 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 23 Sep 2022 20:43:31 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20input=20al=20scoreboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/actors/enemies/manzana.ani | 9 +++++++++ data/actors/enemies/manzana.png | Bin 0 -> 992 bytes data/map/01.ene | 6 +++--- source/game.cpp | 10 +++------- source/player.cpp | 19 ++++++++++++------- source/player.h | 17 ++++++++++++++--- source/prog.cpp | 2 ++ source/scoreboard.cpp | 15 ++++++++++++--- source/scoreboard.h | 11 +++++++---- 9 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 data/actors/enemies/manzana.ani create mode 100644 data/actors/enemies/manzana.png diff --git a/data/actors/enemies/manzana.ani b/data/actors/enemies/manzana.ani new file mode 100644 index 0000000..8b38f0c --- /dev/null +++ b/data/actors/enemies/manzana.ani @@ -0,0 +1,9 @@ +frame_width=16 +frame_height=16 + +[animation] +name=default +speed=8 +loop=0 +frames=0,1,2,3,4,5,6,7,8,9,10,11 +[/animation] \ No newline at end of file diff --git a/data/actors/enemies/manzana.png b/data/actors/enemies/manzana.png new file mode 100644 index 0000000000000000000000000000000000000000..758d7818ef9b66c476274531d2e1bffba842e7e6 GIT binary patch literal 992 zcmV<610Vc}P)Px&nn^@KRA_Qh7JO(a2Jb*m| z)j>xO4`66rr*emAH-#lzzLV~+Z31{_Ja@Xg@3+!wb>}@B;wJXf#F}bs_zk~Oekn-~ZISvyaAy@>ltAXENbw zXJ?l1X&YiaC`3_ifJ@_O+(n zfRCMb$uo>3&xhxm#&1nLP-*`2@^1?kiw55km?r+q%k+-lnqH}tiq-;87Z(eBV)-FJ ztHmj(OOe?fJdbw^@5IweVD=O$;$t?}I=BFxrQ`6K_@?n&Cf{`a%jDnuEzr%)f=~iH z+I^Ssd5NFaNPr=*3!Kh*L`0NQ%58IbW4IOJ@AWm`j*n;CUv``6PQZWA^4=(@-%y?8YIp8HAlxg zJ|td)I6h(iHY;S&8lvCl_58e0V_m#Ip1ORR&EwPacgVc%s>0We|FY)a^#Stpk2Xjb zWB?-lz8J`SMp{c7L}dEq-)&t793RsdX)S})v8wz?>xK5J_>jgrdGp5nTgQJ@d@TPm zt7u>Ag(70?eV=?bW?}XDohZu#neYD_etA4(@1pOi|Lf*6KZM~49Zaibudebug->setEnabled(true); // Reserva memoria para los objetos - scoreboard = new ScoreBoard(renderer, asset, &board); + scoreboard = new ScoreBoard(renderer, asset, input, &board); eventHandler = new SDL_Event(); itemTracker = new ItemTracker(); map = new Map(asset->get("01.map"), renderer, asset, itemTracker); - player = new Player(renderer, asset, input, map, debug); + player = new Player(renderer, asset, input, map, debug, &board.diamonds); enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile())); music = JA_LoadMusic(asset->get("music_surface.ogg").c_str()); @@ -89,10 +89,6 @@ void Game::update() // Comprueba los eventos de la cola checkEventHandler(); - // Comprueba si se ha pulsado alguna tecla - if (input->checkAnyInput()) - scoreboard->reset(); - // Actualiza los objetos debug->clear(); scoreboard->update(); @@ -200,7 +196,7 @@ void Game::checkEventHandler() delete map; map = new Map(asset->get("01.map"), renderer, asset, itemTracker); delete player; - player = new Player(renderer, asset, input, map, debug); + player = new Player(renderer, asset, input, map, debug, &board.diamonds); break; case SDL_SCANCODE_F: diff --git a/source/player.cpp b/source/player.cpp index 68f95d0..666dd5c 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -1,13 +1,14 @@ #include "player.h" // Constructor -Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug) +Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug, int *diamonds) { this->asset = asset; this->renderer = renderer; this->input = input; this->map = map; this->debug = debug; + this->diamonds = diamonds; sound_jump = JA_LoadSound(asset->get("sound_player_jump.wav").c_str()); sound_death = JA_LoadSound(asset->get("sound_player_death.wav").c_str()); @@ -34,13 +35,13 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Deb maxVY = 4.0f; state = s_standing; + living = l_alive; jumpPressed = false; key.insert(key.end(), {0, 0, 0, 0, 0, 0}); const SDL_Point p = {0, 0}; collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p}); underFeet.insert(underFeet.end(), {p, p, p}); hookedOnMovingPlatform = -1; - diamonds = 0; colliderBox = getRect(); } @@ -75,7 +76,6 @@ void Player::update() debug->add("state " + std::to_string(state)); debug->add(map->getName() + " (" + map->getRoomFileName(b_top) + ", " + map->getRoomFileName(b_right) + ", " + map->getRoomFileName(b_bottom) + ", " + map->getRoomFileName(b_left) + ")"); debug->add("hookedOn = " + std::to_string(hookedOnMovingPlatform)); - debug->add("DIAMONDS = " + std::to_string(diamonds)); } // Dibuja el objeto @@ -424,19 +424,19 @@ bool Player::isOnScreenBorder() border = b_left; return true; } - + else if (x > map->getPlayArea(b_right) - w) { border = b_right; return true; } - + else if (y < map->getPlayArea(b_top)) { border = b_top; return true; } - + else if (y > map->getPlayArea(b_bottom) - h) { border = b_bottom; @@ -495,7 +495,7 @@ int Player::checkActors() if (name == a_diamond) { - diamonds++; + *diamonds = *diamonds + 1; JA_PlaySound(sound_coin); map->getItem(index); map->deleteActor(index); @@ -520,4 +520,9 @@ SDL_Rect Player::getRect() SDL_Rect &Player::getCollider() { return colliderBox; +} + +// Comprueba los estados de vida +void Player::checkLivingState() +{ } \ No newline at end of file diff --git a/source/player.h b/source/player.h index 284202f..0aab6bf 100644 --- a/source/player.h +++ b/source/player.h @@ -20,6 +20,13 @@ enum e_state s_falling }; +enum e_living +{ + l_alive, + l_dying, + l_dead +}; + enum e_floor { f_none, @@ -37,7 +44,7 @@ private: AnimatedSprite *sprite; // Objeto con los graficos, animaciones y posición del jugador LTexture *texture; // Textura con los graficos del jugador Map *map; // Objeto con el mapa - Debug *debug; // Objeto para gestionar la información de debug + Debug *debug; // Objeto para gestionar la información de debug float x; // Posición del jugador en el eje X float y; // Posición del jugador en el eje Y @@ -47,6 +54,7 @@ private: int h; // ALto del jugador e_state state; // Estado actual del jugador e_border border; // Indica en qué borde de la pantalla está el jugador + e_living living; // Indica en que estado de la vida se encuentra el jugador SDL_Point lastPosition; // Posición anterior int hookedOnMovingPlatform; // Índice de la plataforma movil a la que está enganchado e_floor isOn; // Indica sobre que tipo de suelo se encuentra @@ -60,7 +68,7 @@ private: float maxVX; // Velocidad mazima de desplazamiento horizontal float maxVY; // Velocidad mazima de desplazamiento vertical - int diamonds; // Cantidad de diamantes recogidos por el jugador + int *diamonds; // Puntero a la cantidad de diamantes recogidos y que lleva la cuenta el juego std::vector key; // Indica las llaves que posee el jugador std::vector collider; // Contiene los puntos de colisión del jugador con el mapa std::vector underFeet; // Contiene los puntos que hay bajo cada pie del jugador @@ -71,6 +79,9 @@ private: // Comprueba las entradas y modifica variables void checkInput(); + // Comprueba los estados de vida + void checkLivingState(); + // Aplica la gravedad void addGravity(); @@ -100,7 +111,7 @@ private: public: // Constructor - Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug); + Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug, int *diamonds); // Destructor ~Player(); diff --git a/source/prog.cpp b/source/prog.cpp index 0a19e2f..1227379 100644 --- a/source/prog.cpp +++ b/source/prog.cpp @@ -417,6 +417,8 @@ bool Prog::setFileList() asset->add("/data/actors/enemies/flying_eye.ani", data); asset->add("/data/actors/enemies/flying_eye_horn.png", bitmap); asset->add("/data/actors/enemies/flying_eye_horn.ani", data); + asset->add("/data/actors/enemies/manzana.png", bitmap); + asset->add("/data/actors/enemies/manzana.ani", data); // Ficheros de actores asset->add("/data/actors/moving_platform.png", bitmap); diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index 2d179a1..cf60711 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -3,12 +3,13 @@ #include // Constructor -ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board) +ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, Input *input, board_t *board) { // Obten punteros a objetos this->asset = asset; this->renderer = renderer; this->board = board; + this->input = input; // Reserva memoria para los objetos texture = new LTexture(renderer, asset->get("player.png")); @@ -26,6 +27,7 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board) counter = 0; fadingCounter = 0; state = sb_hide; + waitTime = 100; } // Destructor @@ -88,10 +90,17 @@ void ScoreBoard::render() // Actualiza las variables del objeto void ScoreBoard::update() { + // Comprueba si se ha pulsado alguna tecla + if (input->checkAnyInput()) + { + reset(); + } + + // Comprueba los estados if (state == sb_hide) { counter++; - if (counter == 200) + if (counter == waitTime) { state = sb_showing; rect.y = SCOREBOARD_Y - SCOREBOARD_HEIGHT; @@ -107,7 +116,7 @@ void ScoreBoard::update() rect.y++; SDL_SetTextureAlphaMod(layer, alpha); - + if (rect.y == SCOREBOARD_Y) { state = sb_show; diff --git a/source/scoreboard.h b/source/scoreboard.h index a8ede12..bc737fb 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -6,6 +6,7 @@ #include "asset.h" #include "sprite.h" #include "const.h" +#include "input.h" #include #ifndef SCOREBOARD_H @@ -35,15 +36,20 @@ private: SDL_Texture *layer; // Textura donde dibujar el marcador Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Text *text; // Objeto para escribir texto + Input *input; // Objeto Input para gestionar las entradas int counter; // Contador interno int fadingCounter; // Contador para el desvanecimiento del marcador board_t *board; // Contiene las variables a mostrar en el marcador sb_state_e state; // Estado en el que se encuentra el marcador SDL_Rect rect; // Posición del marcador + int waitTime; // Tiempo de espera para mostrar el marcador + + // Resetea el tiempo de aparición del marcador + void reset(); public: // Constructor - ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board); + ScoreBoard(SDL_Renderer *renderer, Asset *asset, Input *input, board_t *board); // Destructor ~ScoreBoard(); @@ -60,9 +66,6 @@ public: // Recarga la textura void reLoadTexture(); - // Resetea el tiempo de aparición del marcador - void reset(); - // Devuelve el rectangulo con la posición del marcador SDL_Rect getRect(); };