forked from jaildesigner-jailgames/jaildoctors_dilemma
Los enemigos ya se pintan y se mueven
This commit is contained in:
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -107,6 +107,7 @@ void Game::update()
|
||||
}
|
||||
|
||||
checkInput();
|
||||
mRoom->update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@
|
||||
|
||||
#include "sprite.h"
|
||||
#include "movingsprite.h"
|
||||
#include "smartsprite.h"
|
||||
|
||||
#include "text.h"
|
||||
#include "writer.h"
|
||||
#include "menu.h"
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user