From 3434cac45bdadb5012bcd7062383f998569a48e8 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 4 Jul 2022 19:02:38 +0200 Subject: [PATCH] Los enemigos ya se pintan y se mueven --- data/room/01.room | 28 ++--- source/animatedsprite.cpp | 10 +- source/animatedsprite.h | 4 +- source/director.h | 1 - source/enemy.cpp | 7 +- source/game.cpp | 1 + source/game.h | 2 - source/room.cpp | 13 ++- source/room.h | 3 + source/smartsprite.cpp | 233 -------------------------------------- source/smartsprite.h | 73 ------------ 11 files changed, 40 insertions(+), 335 deletions(-) delete mode 100644 source/smartsprite.cpp delete mode 100644 source/smartsprite.h diff --git a/data/room/01.room b/data/room/01.room index 54b9fbe..c28abee 100644 --- a/data/room/01.room +++ b/data/room/01.room @@ -6,29 +6,29 @@ room_up=0 room_down=0 room_left=0 room_right=02.room -tilemap=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,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,0,0,0,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,0,0,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,41,41,41,41,41,41,41,41,41,41,0,0,0,0,0,0,0,0,0,41,41,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,41,0,0,0,0,0,0,0,0,0,41,0,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,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,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,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 +tilemap=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,41,41,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,0,0,0,0,0,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,0,0,0,0,0,0,0,41,41,0,0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,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,0,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,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,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,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 [enemy] tileset=enemy01.png x=8 -y=8 -vx=0.1 -vy=0 +y=0 +vx=0 +vy=0.2 x1=8 -x2=200 -y1=8 -y2=8 +x2=8 +y1=0 +y2=48 color=red [enemy-end] [enemy] tileset=enemy01.png -x=20 -y=40 -vx=0.1 +x=56 +y=72 +vx=0.2 vy=0 -x1=8 -x2=200 -y1=40 -y2=40 +x1=49 +x2=154 +y1=72 +y2=72 color=yellow [enemy-end] item=1,10,10 \ No newline at end of file diff --git a/source/animatedsprite.cpp b/source/animatedsprite.cpp index faf4ad4..a7bec77 100644 --- a/source/animatedsprite.cpp +++ b/source/animatedsprite.cpp @@ -2,22 +2,20 @@ #include "animatedsprite.h" // Constructor -AnimatedSprite::AnimatedSprite() +AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer) { - //init(nullptr, nullptr); + mRenderer = renderer; + mTexture = texture; } // Destructor AnimatedSprite::~AnimatedSprite() { - //init(nullptr, nullptr); } // Iniciador -void AnimatedSprite::init(LTexture *texture, SDL_Renderer *renderer) +void AnimatedSprite::init() { - mRenderer = renderer; - mTexture = texture; for (int i = 0; i < 20; i++) { mAnimation[i].numFrames = 0; diff --git a/source/animatedsprite.h b/source/animatedsprite.h index f1c84bc..ee0d4ac 100644 --- a/source/animatedsprite.h +++ b/source/animatedsprite.h @@ -27,13 +27,13 @@ private: public: // Constructor - AnimatedSprite(); + AnimatedSprite(LTexture *texture, SDL_Renderer *renderer); // Destructor ~AnimatedSprite(); // Iniciador - void init(LTexture *texture, SDL_Renderer *renderer); + void init(); // Calcula el frame correspondiente a la animación void animate(int index); diff --git a/source/director.h b/source/director.h index e337a1b..aa5dd96 100644 --- a/source/director.h +++ b/source/director.h @@ -2,7 +2,6 @@ #include "ifdefs.h" #include "sprite.h" #include "movingsprite.h" -#include "smartsprite.h" #include "text.h" #include "writer.h" #include "menu.h" diff --git a/source/enemy.cpp b/source/enemy.cpp index 7b3773b..ff07563 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -11,7 +11,7 @@ Enemy::Enemy(enemy_t enemy) // Crea objetos texture = new LTexture(); - sprite = new AnimatedSprite(); + sprite = new AnimatedSprite(texture, renderer); // Carga la textura loadTextureFromFile(texture, asset->get(enemy.tileset), renderer); @@ -33,7 +33,7 @@ Enemy::Enemy(enemy_t enemy) sprite->setCurrentFrame(0); sprite->setAnimationCounter(0); sprite->setAnimationNumFrames(0, 4); - sprite->setAnimationSpeed(0, 10); + sprite->setAnimationSpeed(0, 5); sprite->setAnimationLoop(0, true); sprite->setAnimationFrames(0, 0, 16 * 0, 0, 16, 16); sprite->setAnimationFrames(0, 1, 16 * 1, 0, 16, 16); @@ -56,11 +56,14 @@ Enemy::~Enemy() // Pinta el enemigo en pantalla void Enemy::draw() { + sprite->getTexture()->setColor(color.r, color.g, color.b); sprite->render(); + sprite->getTexture()->setColor(255, 255, 255); } // Actualiza las variables del objeto void Enemy::update() { sprite->update(); + sprite->animate(0); } \ No newline at end of file diff --git a/source/game.cpp b/source/game.cpp index ad6769d..d8c307f 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -107,6 +107,7 @@ void Game::update() } checkInput(); + mRoom->update(); } } diff --git a/source/game.h b/source/game.h index ef7a394..4e448c6 100644 --- a/source/game.h +++ b/source/game.h @@ -5,8 +5,6 @@ #include "sprite.h" #include "movingsprite.h" -#include "smartsprite.h" - #include "text.h" #include "writer.h" #include "menu.h" diff --git a/source/room.cpp b/source/room.cpp index 7962aa0..f914c9d 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -62,7 +62,7 @@ bool Room::load(std::string _file_path) enemy_t enemy; enemy.asset = asset; enemy.renderer = renderer; - + do { std::getline(file, line); @@ -268,7 +268,16 @@ void Room::drawEnemies() { for (auto enemy : enemy_list) { - //enemy->draw(); + enemy->draw(); + } +} + +// Actualiza las variables y objetos de la habitación +void Room::update() +{ + for (auto enemy : enemy_list) + { + enemy->update(); } } diff --git a/source/room.h b/source/room.h index efd812e..ee75871 100644 --- a/source/room.h +++ b/source/room.h @@ -75,6 +75,9 @@ public: // Dibuja los enemigos en pantalla void drawEnemies(); + // Actualiza las variables y objetos de la habitación + void update(); + // Devuelve el valor de la variable std::string getRoomUp(); diff --git a/source/smartsprite.cpp b/source/smartsprite.cpp deleted file mode 100644 index c88f02f..0000000 --- a/source/smartsprite.cpp +++ /dev/null @@ -1,233 +0,0 @@ -#include "const.h" -#include "smartsprite.h" - -// Constructor -SmartSprite::SmartSprite() -{ - //init(nullptr, nullptr); -} - -// Destructor -SmartSprite::~SmartSprite() -{ - //init(nullptr, nullptr); -} - -// Inicializador -void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer) -{ - setTexture(texture); - setRenderer(renderer); - - setPosX(0); - setPosY(0); - setWidth(0); - setHeight(0); - - setVelX(0); - setVelY(0); - setAccelX(0); - setAccelY(0); - - setSpriteClip(0, 0, 0, 0); - - setEnabled(false); - setEnabledTimer(0); - - mIsOnDestination = false; - mDestX = 0; - mDestY = 0; - - setRotate(false); - setRotateSpeed(0); - setRotateAmount(0.0); - - mCounter = 0; - - // El Id siempre es >=0, por lo tanto si no se le asigna Id se queda en negativo - mId = -1; - - mIntroEvents = nullptr; -} - -// Pone a cero los elementos del objeto -void SmartSprite::erase() -{ - init(nullptr, nullptr); -} - -// Obtiene el valor de la variable -bool SmartSprite::isEnabled() -{ - return mEnabled; -} - -// Establece el valor de la variable -void SmartSprite::setEnabled(bool state) -{ - mEnabled = state; -} - -// Obtiene el valor de la variable -Uint16 SmartSprite::getEnabledTimer() -{ - return mEnabledCounter; -} - -// Establece el valor de la variable -void SmartSprite::setEnabledTimer(Uint16 time) -{ - mEnabledCounter = time; -} - -// Establece el valor de la variable -void SmartSprite::setDestX(int value) -{ - mDestX = value; -} - -// Establece el valor de la variable -void SmartSprite::setDestY(int value) -{ - mDestY = value; -} - -// Obtiene el valor de la variable -int SmartSprite::getDestX() -{ - return mDestX; -} - -// Obtiene el valor de la variable -int SmartSprite::getDestY() -{ - return mDestY; -} - -// Actualiza la posición y comprueba si ha llegado a su destino -bool SmartSprite::update() -{ - if (mEnabled) - { - MovingSprite::update(); - - // Comprueba si se desplaza en el eje X hacia la derecha - if ((getAccelX() > 0) || ((getAccelX() == 0) && (getVelX() > 0))) - { - // Comprueba si hemos llegado al destino - if (getPosX() > mDestX) - { - // Lo coloca en posición - setPosX(mDestX); - - // Lo detiene - setVelX(0.0f); - setAccelX(0.0f); - } - } - // Comprueba si se desplaza en el eje X hacia la izquierda - else if ((getAccelX() < 0) || ((getAccelX() == 0) && (getVelX() < 0))) - { - // Comprueba si hemos llegado al destino - if (getPosX() < mDestX) - { - // Lo coloca en posición - setPosX(mDestX); - - // Lo detiene - setVelX(0.0f); - setAccelX(0.0f); - } - } - - // Comprueba si se desplaza en el eje Y hacia abajo - if ((getAccelY() > 0) || ((getAccelY() == 0) && (getVelY() > 0))) - { - // Comprueba si hemos llegado al destino - if (getPosY() > mDestY) - { - // Lo coloca en posición - setPosY(mDestY); - - // Lo detiene - setVelY(0.0f); - setAccelY(0.0f); - } - } - // Comprueba si se desplaza en el eje Y hacia arriba - else if ((getAccelY() < 0) || ((getAccelY() == 0) && (getVelY() < 0))) - { - // Comprueba si hemos llegado al destino - if (getPosY() < mDestY) - { - // Lo coloca en posición - setPosY(mDestY); - - // Lo detiene - setVelY(0.0f); - setAccelY(0.0f); - } - } - - // Comprueba si ha llegado a su destino - if ((getPosX() == mDestX) && (getPosY() == mDestY)) - { - mIsOnDestination = true; - } - else - { - mIsOnDestination = false; - } - - // Si esta en el destino comprueba su contador - if (mIsOnDestination) - { - // Si el contador es mayor que cero, lo decrementa - if (mEnabledCounter > 0) - { - --mEnabledCounter; - } - // Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id - else if (mEnabledCounter == 0) - { - if (mId < 0) - { - mEnabled = false; - } - else - { - mIntroEvents[mId] = EVENT_COMPLETED; - } - } - } - } - - return mIsOnDestination; -} - -// Obtiene el valor de la variable -bool SmartSprite::isOnDestination() -{ - return mIsOnDestination; -} - -// Pinta el objeto en pantalla -void SmartSprite::render() -{ - if (mEnabled) - { - MovingSprite::render(); - } -} - -// Establece el valor de la variable -void SmartSprite::setId(int id) -{ - mId = id; -} - -// Establece el valor de la variable -void SmartSprite::setIntroEvents(Uint8 *value) -{ - mIntroEvents = value; -} \ No newline at end of file diff --git a/source/smartsprite.h b/source/smartsprite.h deleted file mode 100644 index 12463a8..0000000 --- a/source/smartsprite.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once -#include "utils.h" -#include "animatedsprite.h" - -#ifndef SMARTSPRITE_H -#define SMARTSPRITE_H - -// Clase SmartSprite -class SmartSprite : public AnimatedSprite -{ -private: - bool mEnabled; // Indica si esta habilitado - bool mIsOnDestination; // Indica si está en el destino - int mDestX; // Posicion de destino en el eje X - int mDestY; // Posicion de destino en el eje Y - int mId; // Identificador - Uint16 mEnabledCounter; // Contador para deshabilitarlo - Uint8 *mIntroEvents; // Dirección del array de eventos donde notificar el estado - -public: - // Constructor - SmartSprite(); - - // Destructor - ~SmartSprite(); - - // Inicializador - void init(LTexture *texture, SDL_Renderer *renderer); - - // Pone a cero los elementos del objeto - void erase(); - - // Obtiene el valor de la variable - bool isEnabled(); - - // Establece el valor de la variable - void setEnabled(bool state); - - // Obtiene el valor de la variable - Uint16 getEnabledTimer(); - - // Establece el valor de la variable - void setEnabledTimer(Uint16 time); - - // Establece el valor de la variable - void setDestX(int value); - - // Establece el valor de la variable - void setDestY(int value); - - // Obtiene el valor de la variable - int getDestX(); - - // Obtiene el valor de la variable - int getDestY(); - - // Actualiza la posición y comprueba si ha llegado a su destino - bool update(); - - // Obtiene el valor de la variable - bool isOnDestination(); - - // Pinta el objeto en pantalla - void render(); - - // Establece el valor de la variable - void setId(int id); - - // Establece el valor de la variable - void setIntroEvents(Uint8 *value); -}; - -#endif