forked from jaildesigner-jailgames/jaildoctors_dilemma
95 lines
2.9 KiB
C++
95 lines
2.9 KiB
C++
#pragma once
|
|
#include "ifdefs.h"
|
|
#include "const.h"
|
|
#include "utils.h"
|
|
#include "asset.h"
|
|
#include "enemy.h"
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#ifndef ROOM_H
|
|
#define ROOM_H
|
|
|
|
#define TILE_EMPTY 0
|
|
#define TILE_SOLID 1
|
|
#define TILE_TRAVESSABLE 2
|
|
|
|
/*
|
|
Cada habitación se crea y destruye cada vez que se entra o sale de la misma
|
|
Cada habitacion si que tendra lo siguiente:
|
|
ID (numerico)
|
|
NOMBRE (texto)
|
|
COLOR DE FONDO (texto)
|
|
SET DE TILES (texto, hace referencia a un png de la colección)
|
|
LIMITE SUPERIOR (ID de la habitación superior), INFERIOR, IZQUIERDO y DERECHO
|
|
MAPA DE TILES (array con los indices de los tiles a utilizar) <-- hay que decidir si cada tile del set ya
|
|
tierne propiedades o se ponen en un mapa aparte
|
|
LISTADO DE ENEMIGOS (tipo, posicion, dx, dy)
|
|
LISTADO DE ITEMS (tipo, posicion)
|
|
*/
|
|
|
|
// Clase Room
|
|
class Room
|
|
{
|
|
private:
|
|
std::string name; // Nombre de la habitación
|
|
color_t bg_color; // Color de fondo 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 tileset; // Imagen con los graficos para la habitación
|
|
std::vector<int> tilemap; // Indice de los tiles a dibujar en la habitación
|
|
std::vector<Enemy *> enemy_list; // Listado con los enemigos de la habitación
|
|
std::vector<int> item_list; // Listado con los items que hay en la habitación
|
|
LTexture *texture; // Textura con los graficos de la habitación
|
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
|
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
|
|
|
|
// Carga las variables desde un fichero
|
|
bool load(std::string _file_path);
|
|
|
|
// Asigna variables a partir de dos cadenas
|
|
bool setVars(std::string _var, std::string _value);
|
|
|
|
// Asigna variables a una estructura enemy_t
|
|
bool setEnemy(enemy_t *enemy, std::string _var, std::string _value);
|
|
|
|
// Pinta el mapa de la habitación en la textura
|
|
void fillMapTexture();
|
|
|
|
public:
|
|
// Constructor
|
|
Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset);
|
|
|
|
// Destructor
|
|
~Room();
|
|
|
|
// Devuelve el nombre de la habitación
|
|
std::string getName();
|
|
|
|
// Devuelve el color de la habitación
|
|
color_t getBGColor();
|
|
|
|
// Dibuja el mapa en pantalla
|
|
void drawMap();
|
|
|
|
// Dibuja los enemigos en pantalla
|
|
void drawEnemies();
|
|
|
|
// Actualiza las variables y objetos de la habitación
|
|
void update();
|
|
|
|
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
|
std::string getRoom(int border);
|
|
|
|
// Devuelve el tipo de tile que hay en ese pixel
|
|
int getTile(SDL_Point point);
|
|
|
|
// Indica si hay colision con un enemigo a partir de un rectangulo
|
|
bool enemyCollision(SDL_Rect &rect);
|
|
};
|
|
|
|
#endif
|