int Map::load(std::string fname) { FileParser infile; maprow *cur_layer = NULL; clearEvents(); clearLayers(); clearQueues(); // @CLASS Map|Description of maps/ if (!infile.open(fname)) return 0; this->filename = fname; while (infile.next()) { if (infile.new_section) { // for sections that are stored in collections, add a new object here if (infile.section == "enemy") enemies.push(Map_Enemy()); else if (infile.section == "enemygroup") enemy_groups.push(Map_Group()); else if (infile.section == "npc") npcs.push(Map_NPC()); else if (infile.section == "event") events.push_back(Event()); } if (infile.section == "header") loadHeader(infile); else if (infile.section == "layer") loadLayer(infile, &cur_layer); else if (infile.section == "enemy") loadEnemy(infile); else if (infile.section == "enemygroup") loadEnemyGroup(infile, &enemy_groups.back()); else if (infile.section == "npc") loadNPC(infile); else if (infile.section == "event") EventManager::loadEvent(infile, &events.back()); } infile.close(); return 0; }
bool MapRenderer::enemyGroupPlaceEnemy(float x, float y, Map_Group &g) { if (collider.is_empty(x, y)) { Enemy_Level enemy_lev = enemyg->getRandomEnemy(g.category, g.levelmin, g.levelmax); if (!enemy_lev.type.empty()) { Map_Enemy group_member = Map_Enemy(enemy_lev.type, FPoint(x, y)); group_member.direction = g.direction; group_member.wander_radius = g.wander_radius; group_member.requires_status = g.requires_status; group_member.requires_not_status = g.requires_not_status; if (g.area.x == 1 && g.area.y == 1) { // this is a single enemy group_member.waypoints = g.waypoints; } enemies.push(group_member); } return true; } return false; }