Files
volcano_2022/source/map.h

129 lines
3.7 KiB
C++

#pragma once
#include <SDL2/SDL.h>
#include "utils.h"
#include "asset.h"
#include "const.h"
#include "item_tracker.h"
#include "actor_moving_platform.h"
#include "actor_diamond.h"
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
#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 room_up; // Identificador de la habitación que se encuentra arriba
std::string room_down; // Identificador de la habitación que se encuentra abajp
std::string room_left; // Identificador de la habitación que se encuentra a la izquierda
std::string room_right; // Identificador de la habitación que se encuentra a la derecha
std::string enemy_file; // Fichero con los enemigos para la habitación
std::string tileset_img; // Imagen con los graficos para la habitación
std::vector<int> tilemap; // Indice de los tiles a dibujar en la habitación
LTexture *texture_tile; // Textura con los graficos de los tiles habitación
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
std::vector<Actor *> 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
ItemTracker *itemTracker; // Objeto que gestiona los items que ya se han recogido
int tile_size; // Ancho del tile en pixels
int map_width; // Ancho del mapa en tiles
int map_height; // Alto del mapa en tiles
int tileset_width; // Ancho del tileset en tiles
// Carga las variables desde un fichero
bool load(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 mapa de la habitación en la textura
void fillMapTexture();
public:
// Constructor
Map(std::string file, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker);
// Destructor
~Map();
// Actualiza todas las variables
void update();
// Dibuja el objeto
void render();
// 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 indice del tile correspondiente a un punto del mapa
int getTileIndex(SDL_Point p);
// 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();
};
#endif