forked from jaildesigner-jailgames/jaildoctors_dilemma
ERROR: no pinta los enemigos
This commit is contained in:
148
source/room.cpp
148
source/room.cpp
@@ -24,15 +24,22 @@ Room::Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset)
|
||||
// Destructor
|
||||
Room::~Room()
|
||||
{
|
||||
// Reclama la memoria utilizada por los objetos
|
||||
texture->unload();
|
||||
delete texture;
|
||||
texture = nullptr;
|
||||
|
||||
SDL_DestroyTexture(map_texture);
|
||||
map_texture = nullptr;
|
||||
|
||||
for (auto enemy : enemy_list)
|
||||
{
|
||||
delete enemy;
|
||||
}
|
||||
enemy_list.clear();
|
||||
}
|
||||
|
||||
// Carga una habitación desde un fichero
|
||||
// Carga las variables desde un fichero
|
||||
bool Room::load(std::string _file_path)
|
||||
{
|
||||
// Indicador de éxito en la carga
|
||||
@@ -45,15 +52,45 @@ bool Room::load(std::string _file_path)
|
||||
// El fichero se puede abrir
|
||||
if (file.good())
|
||||
{
|
||||
// Carga los datos
|
||||
// Procesa el fichero linea a linea
|
||||
printf("Reading file %s\n", filename.c_str());
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
int pos = line.find("=");
|
||||
if (!setVars(line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
// Si la linea contiene el texto [enemy] se realiza un proceso distinto
|
||||
if (line == "[enemy]")
|
||||
{
|
||||
printf("Warning: file %s, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
|
||||
success = false;
|
||||
enemy_t enemy;
|
||||
enemy.asset = asset;
|
||||
enemy.renderer = renderer;
|
||||
|
||||
do
|
||||
{
|
||||
std::getline(file, line);
|
||||
|
||||
// Encuentra la posición del caracter '='
|
||||
int pos = line.find("=");
|
||||
// Procesa las dos subcadenas
|
||||
if (!setEnemy(&enemy, line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
{
|
||||
printf("Warning: file %s\n, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
|
||||
success = false;
|
||||
}
|
||||
} while (line != "[enemy-end]");
|
||||
|
||||
// Añade el enemigo al vector de enemigos
|
||||
enemy_list.push_back(new Enemy(enemy));
|
||||
}
|
||||
// En caso contrario se parsea el fichero para buscar las variables y los valores
|
||||
else
|
||||
{
|
||||
// Encuentra la posición del caracter '='
|
||||
int pos = line.find("=");
|
||||
// Procesa las dos subcadenas
|
||||
if (!setVars(line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
{
|
||||
printf("Warning: file %s, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +124,7 @@ bool Room::setVars(std::string _var, std::string _value)
|
||||
}
|
||||
else if (_var == "bg_color")
|
||||
{
|
||||
bg_color = _value;
|
||||
bg_color = stringToColor(_value);
|
||||
}
|
||||
else if (_var == "tileset")
|
||||
{
|
||||
@@ -111,13 +148,12 @@ bool Room::setVars(std::string _var, std::string _value)
|
||||
}
|
||||
else if (_var == "tilemap")
|
||||
{
|
||||
// Se introducen los valores separados por comas en un vector
|
||||
std::stringstream ss(_value);
|
||||
std::string tmp;
|
||||
while (getline(ss, tmp, ','))
|
||||
{
|
||||
// printf("text - %s\n",tmp.c_str());
|
||||
tilemap.push_back(std::stoi(tmp));
|
||||
// printf("int - %i\n",std::stoi(tmp));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -128,6 +164,60 @@ bool Room::setVars(std::string _var, std::string _value)
|
||||
return success;
|
||||
}
|
||||
|
||||
// Asigna variables a una estructura enemy_t
|
||||
bool Room::setEnemy(enemy_t *enemy, std::string _var, std::string _value)
|
||||
{
|
||||
// Indicador de éxito en la asignación
|
||||
bool success = true;
|
||||
|
||||
if (_var == "tileset")
|
||||
{
|
||||
enemy->tileset = _value;
|
||||
}
|
||||
else if (_var == "x")
|
||||
{
|
||||
enemy->x = std::stof(_value);
|
||||
}
|
||||
else if (_var == "y")
|
||||
{
|
||||
enemy->y = std::stof(_value);
|
||||
}
|
||||
else if (_var == "vx")
|
||||
{
|
||||
enemy->vx = std::stof(_value);
|
||||
}
|
||||
else if (_var == "vy")
|
||||
{
|
||||
enemy->vy = std::stof(_value);
|
||||
}
|
||||
else if (_var == "x1")
|
||||
{
|
||||
enemy->x1 = std::stoi(_value);
|
||||
}
|
||||
else if (_var == "x2")
|
||||
{
|
||||
enemy->x2 = std::stoi(_value);
|
||||
}
|
||||
else if (_var == "y1")
|
||||
{
|
||||
enemy->y1 = std::stoi(_value);
|
||||
}
|
||||
else if (_var == "y2")
|
||||
{
|
||||
enemy->y2 = std::stoi(_value);
|
||||
}
|
||||
else if (_var == "color")
|
||||
{
|
||||
enemy->color = stringToColor(_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// Devuelve el nombre de la habitación
|
||||
std::string Room::getName()
|
||||
{
|
||||
@@ -137,36 +227,7 @@ std::string Room::getName()
|
||||
// Devuelve el color de la habitación
|
||||
color_t Room::getBGColor()
|
||||
{
|
||||
color_t color = {0x00, 0x00, 0x00};
|
||||
if (bg_color == "white")
|
||||
{
|
||||
color = {0xFF, 0xFF, 0xFF};
|
||||
}
|
||||
else if (bg_color == "red")
|
||||
{
|
||||
color = {0xFF, 0x00, 0x00};
|
||||
}
|
||||
else if (bg_color == "green")
|
||||
{
|
||||
color = {0x00, 0xFF, 0x00};
|
||||
}
|
||||
else if (bg_color == "blue")
|
||||
{
|
||||
color = {0x00, 0x00, 0xFF};
|
||||
}
|
||||
else if (bg_color == "yellow")
|
||||
{
|
||||
color = {0xFF, 0xFF, 0x00};
|
||||
}
|
||||
else if (bg_color == "cyan")
|
||||
{
|
||||
color = {0x00, 0xFF, 0xFF};
|
||||
}
|
||||
else if (bg_color == "purple")
|
||||
{
|
||||
color = {0xFF, 0x00, 0xFF};
|
||||
}
|
||||
return color;
|
||||
return bg_color;
|
||||
}
|
||||
|
||||
// Crea la textura con el mapeado de la habitación
|
||||
@@ -202,6 +263,15 @@ void Room::drawMap()
|
||||
SDL_RenderCopy(renderer, map_texture, &rect, NULL);
|
||||
}
|
||||
|
||||
// Dibuja los enemigos en pantalla
|
||||
void Room::drawEnemies()
|
||||
{
|
||||
for (auto enemy : enemy_list)
|
||||
{
|
||||
//enemy->draw();
|
||||
}
|
||||
}
|
||||
|
||||
// Devuelve el valor de la variable
|
||||
std::string Room::getRoomUp()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user