////////////////////////////////////////////////////////////////////////// // // Allows the game code to write game-specific data into the minimap xml // file on level export. Currently used to export data to StatsTool // ////////////////////////////////////////////////////////////////////////// bool CEditorGame::GetAdditionalMinimapData(XmlNodeRef output) { string classes = g_pGameCVars->g_telemetryEntityClassesToExport; if(!classes.empty()) { // additional data relating to StatsTool XmlNodeRef statsNode = output->findChild("StatsTool"); if(!statsNode) { statsNode = GetISystem()->CreateXmlNode("StatsTool"); output->addChild(statsNode); } else { statsNode->removeAllChilds(); } // first build a list of entity classes from the cvar std::vector<IEntityClass*> interestingClasses; int curPos = 0; string currentClass = classes.Tokenize(",",curPos); IEntitySystem* pES = GetISystem()->GetIEntitySystem(); if(IEntityClassRegistry* pClassReg = pES->GetClassRegistry()) { while (!currentClass.empty()) { if(IEntityClass* pClass = pClassReg->FindClass(currentClass.c_str())) { interestingClasses.push_back(pClass); } currentClass = classes.Tokenize(",",curPos); } } // now iterate through all entities and save the ones which match the classes if(interestingClasses.size() > 0) { IEntityItPtr it = pES->GetEntityIterator(); while(IEntity* pEntity = it->Next()) { if(stl::find(interestingClasses, pEntity->GetClass())) { XmlNodeRef entityNode = GetISystem()->CreateXmlNode("Entity"); statsNode->addChild(entityNode); entityNode->setAttr("class", pEntity->GetClass()->GetName()); Vec3 pos = pEntity->GetWorldPos(); entityNode->setAttr("x", pos.x); entityNode->setAttr("y", pos.y); entityNode->setAttr("z", pos.z); } } } } return true; }