diff --git a/data/room/room1.tmx b/data/room/room1.tmx index c9d7974..91215be 100644 --- a/data/room/room1.tmx +++ b/data/room/room1.tmx @@ -3,22 +3,22 @@ -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,121, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,161,162,163,121,121,121,121,121,121,121,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,121,121,181,182,183,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,161,163,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,161,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,183,121,121,121,0,0,0,0,0,121,121,121,121,121, -121,181,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,162,163,161,163, -181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,182,183,181,183 +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,108,108,108,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,0,0,0,0,0,108,108,108,108,108, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, +27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27 diff --git a/media/tilesets/room1.png b/media/tilesets/room1.png index 42cb230..b64ec39 100644 Binary files a/media/tilesets/room1.png and b/media/tilesets/room1.png differ diff --git a/source/animatedsprite.cpp b/source/animatedsprite.cpp index a7bec77..c885fe0 100644 --- a/source/animatedsprite.cpp +++ b/source/animatedsprite.cpp @@ -1,13 +1,6 @@ #include "const.h" #include "animatedsprite.h" -// Constructor -AnimatedSprite::AnimatedSprite(LTexture *texture, SDL_Renderer *renderer) -{ - mRenderer = renderer; - mTexture = texture; -} - // Destructor AnimatedSprite::~AnimatedSprite() { diff --git a/source/animatedsprite.h b/source/animatedsprite.h index ee0d4ac..47611db 100644 --- a/source/animatedsprite.h +++ b/source/animatedsprite.h @@ -27,7 +27,11 @@ private: public: // Constructor - AnimatedSprite(LTexture *texture, SDL_Renderer *renderer); + AnimatedSprite(LTexture *texture, SDL_Renderer *renderer) + : MovingSprite(0, 0, 0, 0, 0, 0, 0, 0, texture, renderer) + { + + }; // Destructor ~AnimatedSprite(); diff --git a/source/enemy.cpp b/source/enemy.cpp index 2323159..9f39d83 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -77,13 +77,11 @@ void Enemy::checkPath() { if (sprite->getPosX() > x2 || sprite->getPosX() < x1) { - // sprite->setPosX(sprite->getPosX() - sprite->getVelX()); sprite->setVelX(sprite->getVelX() * (-1)); } if (sprite->getPosY() > y2 || sprite->getPosY() < y1) { - // sprite->setPosY(sprite->getPosY() - sprite->getVelY()); sprite->setVelY(sprite->getVelY() * (-1)); } } diff --git a/source/item.cpp b/source/item.cpp new file mode 100644 index 0000000..028bf06 --- /dev/null +++ b/source/item.cpp @@ -0,0 +1,63 @@ +#include "item.h" +#include +#include + +// Constructor +Item::Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset) +{ + // Obten punteros a objetos + asset = _asset; + renderer = _renderer; + + // Crea objetos + texture = new LTexture(); + sprite = new Sprite(_rect, texture, renderer); + + // Carga la textura + loadTextureFromFile(texture, asset->get(_tileset), renderer); + + // Inicia variables + sprite->setSpriteClip(0,0,8,8); + + // Inicializa los colores + color_t c = stringToColor("blue"); + color.push_back(c); + + c = stringToColor("red"); + color.push_back(c); + + c = stringToColor("purple"); + color.push_back(c); + + c = stringToColor("green"); + color.push_back(c); + + c = stringToColor("cyan"); + color.push_back(c); + + c = stringToColor("yellow"); + color.push_back(c); +} + +// Destructor +Item::~Item() +{ + texture->unload(); + delete texture; + texture = nullptr; + + delete sprite; + sprite = nullptr; +} + +// Pinta el enemigo en pantalla +void Item::draw() +{ + +} + +// Actualiza las variables del objeto +void Item::update() +{ + +} diff --git a/source/item.h b/source/item.h new file mode 100644 index 0000000..9271538 --- /dev/null +++ b/source/item.h @@ -0,0 +1,45 @@ +#pragma once +#include "ifdefs.h" +#include "utils.h" +#include "asset.h" +#include "sprite.h" +#include + +#ifndef ITEM_H +#define ITEM_H + +/* +Un item deberia tener la siguiente informacion: +POSICION INICIAL +PNG ASOCIADO +*/ + +// Clase Item +class Item +{ +private: + LTexture *texture; // Textura con los graficos del objeto + Sprite *sprite; // Sprite del objeto + + SDL_Renderer *renderer; // El renderizador de la ventana + Asset *asset; // Objeto con la ruta a todos los ficheros de recursos + std::vector color; // Vector con los colores del objeto + + // Comprueba si ha llegado al limite del recorrido para darse media vuelta + void checkPath(); + +public: + // Constructor + Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset); + + // Destructor + ~Item(); + + // Pinta el objeto en pantalla + void draw(); + + // Actualiza las variables del objeto + void update(); +}; + +#endif diff --git a/source/movingsprite.cpp b/source/movingsprite.cpp index ea76dfd..2b04ccc 100644 --- a/source/movingsprite.cpp +++ b/source/movingsprite.cpp @@ -1,16 +1,9 @@ #include "const.h" #include "movingsprite.h" -// Constructor -MovingSprite::MovingSprite() -{ - clear(); -} - // Destructor MovingSprite::~MovingSprite() { - clear(); } // Reinicia todas las variables @@ -38,50 +31,6 @@ void MovingSprite::clear() mFlip = SDL_FLIP_NONE; // Establece como se ha de voltear el sprite } -// Iniciador -void MovingSprite::init(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer) -{ - // Establece el alto y el ancho del sprite - setWidth(w); - setHeight(h); - - // Establece la posición X,Y del sprite - setPosX(x); - setPosY(y); - - // Establece la velocidad X,Y del sprite - setVelX(velx); - setVelY(vely); - - // Establece la aceleración X,Y del sprite - setAccelX(accelx); - setAccelY(accely); - - // Establece el zoom W,H del sprite - setZoomW(1); - setZoomH(1); - - // Establece el angulo con el que se dibujará - setAngle(0.0); - - // Establece los valores de rotacion - setRotate(false); - setRotateSpeed(0); - setRotateAmount(0.0); - - // Contador interno - mCounter = 0; - - // Establece la textura donde están los gráficos para el sprite - setTexture(texture); - - // Establece el renderizador - setRenderer(renderer); - - // Establece el rectangulo de donde coger la imagen - setSpriteClip(0, 0, w, h); -} - // Mueve el sprite void MovingSprite::move() { diff --git a/source/movingsprite.h b/source/movingsprite.h index 18d6f54..06ceb8d 100644 --- a/source/movingsprite.h +++ b/source/movingsprite.h @@ -31,14 +31,47 @@ protected: public: // Constructor - MovingSprite(); + MovingSprite(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer) + : Sprite((int)x, (int)y, w, h, texture, renderer) + { + // Establece el alto y el ancho del sprite + setWidth(w); + setHeight(h); + + // Establece la posición X,Y del sprite + setPosX(x); + setPosY(y); + + // Establece la velocidad X,Y del sprite + setVelX(velx); + setVelY(vely); + + // Establece la aceleración X,Y del sprite + setAccelX(accelx); + setAccelY(accely); + + // Establece el zoom W,H del sprite + setZoomW(1); + setZoomH(1); + + // Establece el angulo con el que se dibujará + setAngle(0.0); + + // Establece los valores de rotacion + setRotate(false); + setRotateSpeed(0); + setRotateAmount(0.0); + + // Contador interno + mCounter = 0; + + // Establece el rectangulo de donde coger la imagen + setSpriteClip(0, 0, w, h); + }; // Destructor ~MovingSprite(); - // Iniciador - void init(float x, float y, int w, int h, float velx, float vely, float accelx, float accely, LTexture *texture, SDL_Renderer *renderer); - // Mueve el sprite void move(); diff --git a/source/room.cpp b/source/room.cpp index ce6ffd5..a9ef9a4 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -397,13 +397,13 @@ int Room::getTile(SDL_Point point) if (pos < 512) { // Los tiles entre el 1 y el 80 son solidos - if ((tilemap[pos] > 0) && (tilemap[pos] < 81)) + if ((tilemap[pos] > 0) && (tilemap[pos] < 201)) { return TILE_SOLID; } // Los tiles mayores de 80 son atravesables - if (tilemap[pos] > 80) + if (tilemap[pos] > 200) { return TILE_TRAVESSABLE; } diff --git a/source/sprite.cpp b/source/sprite.cpp index a032c51..74c1fbc 100644 --- a/source/sprite.cpp +++ b/source/sprite.cpp @@ -1,44 +1,7 @@ #include "sprite.h" // Constructor -Sprite::Sprite() -{ - init(0, 0, 0, 0, nullptr, nullptr); -} - -// Destructor -Sprite::~Sprite() -{ - mTexture = nullptr; - mRenderer = nullptr; -} - -// Inicializador -void Sprite::init(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer) -{ - // Establece la posición X,Y del sprite - setPosX(x); - setPosY(y); - - // Establece el alto y el ancho del sprite - setWidth(w); - setHeight(h); - - // Establece el puntero al renderizador de la ventana - setRenderer(renderer); - - // Establece la textura donde están los gráficos para el sprite - setTexture(texture); - - // Establece el rectangulo de donde coger la imagen - setSpriteClip(0, 0, w, h); - - // Habilita el objeto - setEnabled(true); -} - -// Inicializador -void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer) +Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer) { // Establece el alto y el ancho del sprite mWidth = rect.w; @@ -56,6 +19,39 @@ void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer) // Establece el rectangulo de donde coger la imagen setSpriteClip(rect); + + // Inicializa variables + mEnabled = true; +} + +Sprite::Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer) +{ + // Establece el alto y el ancho del sprite + mWidth = w; + mHeight = h; + + // Establece la posición X,Y del sprite + mPosX = x; + mPosY = y; + + // Establece el puntero al renderizador de la ventana + setRenderer(renderer); + + // Establece la textura donde están los gráficos para el sprite + setTexture(texture); + + // Establece el rectangulo de donde coger la imagen + setSpriteClip(x,y,w,h); + + // Inicializa variables + mEnabled = true; +} + +// Destructor +Sprite::~Sprite() +{ + mTexture = nullptr; + mRenderer = nullptr; } // Muestra el sprite por pantalla diff --git a/source/sprite.h b/source/sprite.h index b0d0b3e..9b2bd97 100644 --- a/source/sprite.h +++ b/source/sprite.h @@ -22,15 +22,12 @@ protected: public: // Constructor - Sprite(); + Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer); + Sprite(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer); // Destructor ~Sprite(); - // Inicializador - void init(int x, int y, int w, int h, LTexture *texture, SDL_Renderer *renderer); - void init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer); - // Muestra el sprite por pantalla void render(); diff --git a/source/text.cpp b/source/text.cpp index 211d50c..6de4715 100644 --- a/source/text.cpp +++ b/source/text.cpp @@ -6,7 +6,8 @@ // Constructor Text::Text(std::string file, LTexture *texture, SDL_Renderer *renderer) { - mSprite = new Sprite(); + SDL_Rect rect = {0,0,0,0}; + mSprite = new Sprite(rect, texture, renderer); mSprite->setTexture(texture); mSprite->setRenderer(renderer); mFile = file; diff --git a/todo.txt b/todo.txt index e1cb707..2089dc1 100644 --- a/todo.txt +++ b/todo.txt @@ -2,6 +2,40 @@ [x] Arreglar que no atraviese tiles atravaseables al caer muy rapido [x] Leer los mapas directamente del archivo tmx [ ] Crear la clase item -[ ] Colisiones con los enemigos -[ ] Decidir un diseño para qué sucede en caso de morir: Recordar el punto por donde se entró al mapa y la velocidad en el eje X/Y que llevaba el personaje, crear puntos de reaparicion en las habitaciones, etc - 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 \ No newline at end of file +[x] Colisiones con los enemigos +[x] Decidir un diseño para qué sucede en caso de morir: Recordar el punto por donde se entró al mapa y la velocidad en el eje X/Y que llevaba el personaje, crear puntos de reaparicion en las habitaciones, etc + 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 +[ ] Crear tiles que maten +[ ] Crear tiles que deslicen, (no tipo hielo sino cinta) +[ ] Crear ascensores + + +TEMAS: +arounders +paku simbel +jail battle +arounders race +aee gba +matatunos +sigmasua +calculin doom +leaper reaper +mini ascii +mappy +paco +chirping +abad y batman +jail +counter strike +starcraft +diablo +jailparty +maniac mansion +molotov +tutorials +gavina +puzzle restorer +qvoid +brick roll +dante's fall +repairing computers