void InformationStorage::loadAll(string file) { //Clear out the object types first terrainTypes.clear(); buildingTypes.clear(); unitTypes.clear(); TiXmlDocument doc( file.c_str()); if(doc.LoadFile()) { TiXmlHandle hDoc(&doc); TiXmlElement* pElem; TiXmlHandle hRoot(0); pElem = hDoc.FirstChildElement().Element(); hRoot=TiXmlHandle(pElem); //--------------------------------Load in Units---------------------- TiXmlNode* pUnitNode=hRoot.FirstChild( "Units" ).FirstChild().ToNode(); TiXmlNode* pUnitInfoNode; //For loop will cycle through each unit within the Units tag for( pUnitNode; pUnitNode; pUnitNode=pUnitNode->NextSiblingElement()) { //Need to iterate through the data of a unit; can make a pointer to the first child of pUnitNode for ID, get NextSiblingElement for other elements, use //query attributes for combat stats. UnitInfo u = UnitInfo(); u.load(pUnitNode); unitTypes[u.id] = u; } //----------------------Load in Terrain------------------------------- TiXmlNode* pTerrainNode=hRoot.FirstChild( "Terrain" ).FirstChild().ToNode(); TiXmlNode* pTerrainInfoNode; //For loop will cycle through each unit within the Units tag for( pTerrainNode; pTerrainNode; pTerrainNode=pTerrainNode->NextSiblingElement()) { //Need to iterate through the data of a unit; can make a pointer to the first child of pUnitNode for ID, get NextSiblingElement for other elements, use //query attributes for combat stats. TerrainInfo t = TerrainInfo(); t.load(pTerrainNode); terrainTypes[t.id] = t; } //---------------------------------Load in Buildings-------------------------------------- TiXmlNode* pBuildingNode=hRoot.FirstChild( "Buildings" ).FirstChild().ToNode(); //TiXmlNode* pBuildingInfoNode; //TiXmlNode* pProductionIDNode; //For loop will cycle through each unit within the Units tag for( pBuildingNode; pBuildingNode; pBuildingNode=pBuildingNode->NextSiblingElement()) { //Need to iterate through the data of a unit; can make a pointer to the first child of pUnitNode for ID, get NextSiblingElement for other elements, use //query attributes for combat stats. BuildingInfo b = BuildingInfo(); b.load(pBuildingNode); buildingTypes[b.id] = b; } //-------------------------------Load in Commander Cards-------------------------------- TiXmlNode* pCardNode = hRoot.FirstChild( "Cards" ).FirstChild().ToNode(); for( pCardNode; pCardNode; pCardNode=pCardNode->NextSiblingElement()) { CardInfo c = CardInfo(); c.load(pCardNode); cardTypes[c.id] = c; } } else { //std::cout << "\nFailed to load the units\n"; } DeveloperConsole::write("Buildings Loaded: "); DeveloperConsole::writeLine(buildingTypes.size()); DeveloperConsole::write("Units Loaded: "); DeveloperConsole::writeLine(unitTypes.size()); DeveloperConsole::write("Terrain Loaded: "); DeveloperConsole::writeLine(terrainTypes.size()); }
DFhackCExport command_result plugin_init ( color_ostream &out, vector <PluginCommand> &commands) { commands.push_back(PluginCommand("fortplan","Lay out buildings in your fortress based on a Quickfort-style CSV input file.",fortplan,false, "Lay out buildings in your fortress based on a Quickfort-style CSV input file.\n" "Usage: fortplan [filename]\n")); buildings.push_back(BuildingInfo("c",df::building_type::Chair,"Chair",1,1)); buildings.push_back(BuildingInfo("b",df::building_type::Bed,"Bed",1,1)); buildings.push_back(BuildingInfo("t",df::building_type::Table,"Table",1,1)); buildings.push_back(BuildingInfo("n",df::building_type::Coffin,"Coffin",1,1)); buildings.push_back(BuildingInfo("d",df::building_type::Door,"Door",1,1)); buildings.push_back(BuildingInfo("x",df::building_type::Floodgate,"Floodgate",1,1)); buildings.push_back(BuildingInfo("h",df::building_type::Box,"Box",1,1)); buildings.push_back(BuildingInfo("r",df::building_type::Weaponrack,"Weapon Rack",1,1)); buildings.push_back(BuildingInfo("a",df::building_type::Armorstand,"Armor Stand",1,1)); buildings.push_back(BuildingInfo("f",df::building_type::Cabinet,"Cabinet",1,1)); buildings.push_back(BuildingInfo("s",df::building_type::Statue,"Statue",1,1)); buildings.push_back(BuildingInfo("y",df::building_type::WindowGlass,"Glass Window",1,1)); buildings.push_back(BuildingInfo("m",df::building_type::AnimalTrap,"Animal Trap",1,1)); buildings.push_back(BuildingInfo("v",df::building_type::Chain,"Chain",1,1)); buildings.push_back(BuildingInfo("j",df::building_type::Cage,"Cage",1,1)); buildings.push_back(BuildingInfo("H",df::building_type::Hatch,"Floor Hatch",1,1)); buildings.push_back(BuildingInfo("W",df::building_type::GrateWall,"Wall Grate",1,1)); buildings.push_back(BuildingInfo("G",df::building_type::GrateFloor,"Floor Grate",1,1)); buildings.push_back(BuildingInfo("B",df::building_type::BarsVertical,"Vertical Bars",1,1)); buildings.push_back(BuildingInfo("~b",df::building_type::BarsFloor,"Floor Bars",1,1)); buildings.push_back(BuildingInfo("R",df::building_type::TractionBench,"Traction Bench",1,1)); buildings.push_back(BuildingInfo("~s",df::building_type::Slab,"Slab",1,1)); buildings.push_back(BuildingInfo("N",df::building_type::NestBox,"Nest Box",1,1)); buildings.push_back(BuildingInfo("~h",df::building_type::Hive,"Hive",1,1)); planner.initialize(); return CR_OK; }