#pragma once #include #include "utils.h" #include "asset.h" #include "const.h" #include "item_tracker.h" #include "actor_moving_platform.h" #include "actor_diamond.h" #include #include #include #include #ifndef MAP_H #define MAP_H enum e_tile_map { nothing, wall, passable }; enum e_border { b_none, b_top, b_bottom, b_left, b_right }; // The player class Map { private: Asset *asset; // Objeto con la ruta a todos los ficheros de recursos SDL_Renderer *renderer; // El renderizador de la ventana std::string name; // Identificador de la habitación std::string roomUp; // Identificador de la habitación que se encuentra arriba std::string roomDown; // Identificador de la habitación que se encuentra abajp std::string roomLeft; // Identificador de la habitación que se encuentra a la izquierda std::string roomRight; // Identificador de la habitación que se encuentra a la derecha std::string enemyFile; // Fichero con los enemigos para la habitación std::string tileset; // Imagen con los graficos para la habitación std::string tileMapFile; // Fichero con el mapa de indices de tile std::vector collisionmap; // Indice con los tipos de tile de la habitación LTexture *textureTile; // Textura con los graficos de los tiles habitación SDL_Texture *mapLayerBG; // Textura para dibujar la capa BG del mapa de la habitación SDL_Texture *mapLayer0; // Textura para dibujar la capa 0 del mapa de la habitación SDL_Texture *mapLayer1; // Textura para dibujar la capa 1 del mapa de la habitación std::vector actors; // Listado con los actores de la habitación color_t bgColor1; // Color superior del degradado de fondo color_t bgColor2; // Color inferior del degradado de fondo bool bgScroll; // Indica si la capa de fondo se mueve ItemTracker *itemTracker; // Objeto que gestiona los items que ya se han recogido int counter; // Contador para lo que se necesite int tileSize; // Ancho del tile en pixels int mapWidth; // Ancho del mapa en tiles int mapHeight; // Alto del mapa en tiles int tilesetWidth; // Ancho del tileset en tiles // Carga las variables desde un fichero de mapa bool loadMapFile(std::string file); // Carga las variables y texturas desde un fichero de mapa de tiles bool loadMapTileFile(std::string file); // Asigna variables a partir de dos cadenas bool setVars(std::string var, std::string value); // Asigna variables a una estructura actor_t bool setActor(actor_t *actor, SDL_Point *p1, SDL_Point *p2, std::string var, std::string value); // Pinta el degradado en la textura void fillGradientTexture(SDL_Texture &layer); // Pinta el mapa de tiles en la textura void fillMapTexture(SDL_Texture &layer, std::vector tilemap, bool clean); // Lee la matriz de tiles desde un fichero tmx a un vector std::vector readTilesFromFile(std::ifstream &file); public: // Constructor Map(std::string file, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker); // Destructor ~Map(); // Actualiza todas las variables void update(); // Dibuja todos los elementos del mapa void render(); // Dibuja la capa BG void renderLayerBG(); // Dibuja la capa 1 void renderLayer0(); // Dibuja la capa 1 void renderLayer1(); // Dibuja los actores void renderActors(); // Devuelve el tipo de tile que hay en un punto e_tile_map getTile(SDL_Point p); // Devuelve el valor de la variable int getTileSize(); // Devuelve el valor de los bordes de la zona de juego int getPlayArea(e_border border); // Devuelve el nombre del fichero de la habitación en funcion del borde std::string getRoomFileName(e_border border); // Devuelve el nombre del fichero de la habitación std::string getName(); // Indica si hay colision con un actor a partir de un rectangulo int actorCollision(SDL_Rect &rect); // Indica si hay colision con un actor a partir de un punto int actorCollision(SDL_Point &p); // Devuelve el nombre del actor a pàrtir de un índice int getActorName(int index); // Devuelve el rectangulo de colisión SDL_Rect getActorCollider(int index); // Devuelve el desplazamiento relativo del actor int getActorIncX(int index); // Elimina un actor bool deleteActor(int index); // Coge un item void getItem(int index); // Obtiene el valor de la variable std::string getEnemyFile(); // Recarga las texturas void reLoadTextures(); }; #endif