#include "enemy_engine.h" #include #include // Constructor EnemyEngine::EnemyEngine(SDL_Renderer *renderer, Asset *asset, Player *player, Map *map, std::string file) { this->renderer = renderer; this->asset = asset; this->player = player; this->map = map; load(file); } // Destructor EnemyEngine::~EnemyEngine() { // Elimina todos los enemigos anteriores for (auto enemy : enemies) { delete enemy; } enemies.clear(); delete enemy; } // Pinta los enemigos en pantalla void EnemyEngine::render() { for (auto enemy : enemies) { enemy->render(); } enemy->render(); } // Actualiza las variables del objeto void EnemyEngine::update() { for (auto enemy : enemies) { enemy->update(); } enemy->update(); } // Carga las variables desde un fichero bool EnemyEngine::load(std::string file_path) { // Indicador de éxito en la carga bool success = true; std::string filename = file_path.substr(file_path.find_last_of("\\/") + 1); std::string line; std::ifstream file(file_path); // El fichero se puede abrir if (file.good()) { // Procesa el fichero linea a linea printf("Reading file %s\n", filename.c_str()); while (std::getline(file, line)) { // Si la linea contiene el texto [actor] se realiza el proceso de carga de los actores if (line == "[path]") { enemy_t enemy; enemy.asset = asset; enemy.renderer = renderer; SDL_Point p1, p2; do { std::getline(file, line); // Encuentra la posición del caracter '=' int pos = line.find("="); // Procesa las dos subcadenas if (!setEnemy(&enemy, &p1, &p2, 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 != "[/path]"); printf("** enemy path loaded\n\n"); //enemies.push_back(new EnemyPath(enemy, p1, p2)); enemy = new EnemyPath(enemy, p1, p2); } } // Cierra el fichero printf("Closing file %s\n\n", filename.c_str()); file.close(); } // El fichero no se puede abrir else { printf("Warning: Unable to open %s file\n", filename.c_str()); success = false; } return success; } // Asigna variables a una estructura enemy_t bool EnemyEngine::setEnemy(enemy_t *enemy, SDL_Point *p1, SDL_Point *p2, std::string var, std::string value) { const int tile_size = 8; // Indicador de éxito en la asignación bool success = true; if (var == "tileset") { enemy->tileset = value; } else if (var == "animation") { enemy->animation = value; } else if (var == "width") { enemy->w = std::stof(value); } else if (var == "height") { enemy->h = std::stof(value); } else if (var == "x") { enemy->x = std::stof(value) * tile_size; } else if (var == "y") { enemy->y = std::stof(value) * tile_size; } else if (var == "vx") { enemy->vx = std::stof(value); } else if (var == "vy") { enemy->vy = std::stof(value); } else if (var == "x1") { p1->x = std::stoi(value) * tile_size; } else if (var == "x2") { p2->x = std::stoi(value) * tile_size; } else if (var == "y1") { p1->y = std::stoi(value) * tile_size; } else if (var == "y2") { p2->y = std::stoi(value) * tile_size; } else if (var == "[/path]") { } else { success = false; } return success; } // Carga el vector de enemigos //bool EnemyEngine::setEnemies(std::string file) //{ // // Elimina todos los enemigos anteriores // for (auto enemy : enemies) // { // delete enemy; // } // enemies.clear(); // // // Carga el vector de enemigos desde un fichero // const bool success = load(file); // // return success; //}