private eventOverallValues sessionSummary(List<uniqueEventValues> sessionList) { eventOverallValues sessionValues = new eventOverallValues(); bool firstEntry = true; double[] oldPosition = new double[3]; List<int> uniqueBiomeValues = new List<int>(); //parse data for each entry foreach (var value in sessionList) { uniqueEventValues dataPoint = new uniqueEventValues(); dataPoint = value; if (dataPoint.type < 10) { sessionValues.numberEvents++; //generate list of unique biomes if (!uniqueBiomeValues.Contains(dataPoint.biome)) uniqueBiomeValues.Add(dataPoint.biome); //info to calculate total time if(dataPoint.deltaTime > 0) sessionValues.sessionLenght += dataPoint.deltaTime; //events position double[] position = new double[3] { dataPoint.x, dataPoint.y, dataPoint.z }; //calculate distance between positions if (!firstEntry) { sessionValues.traveledDistance += Math.Sqrt((position[0] - oldPosition[0]) * (position[0] - oldPosition[0]) + (position[1] - oldPosition[1]) * (position[1] - oldPosition[1]) + (position[2] - oldPosition[2]) * (position[2] - oldPosition[2])); } else { sessionValues.playerName = dataPoint.name; sessionValues.sessionID = dataPoint.sessionID; firstEntry = false; } oldPosition[0] = position[0]; oldPosition[1] = position[1]; oldPosition[2] = position[2]; //Populate all the lists according to actions ID //0 session id, 1 player name, 2 action ID, 3 date, 4 deltaTime, 5 sub action, 6 unique value, 7 biome, 8 x, 9 y, 10 z if (dataPoint.type == 1) { sessionValues.miningEvents++; } if (dataPoint.type == 2) { sessionValues.buildingEvents++; } if (dataPoint.type == 3) { sessionValues.harvestingEvents++; } if (dataPoint.type == 4) { sessionValues.craftingEvents++; } if (dataPoint.type == 5) { sessionValues.farmingEvents++; } if (dataPoint.type == 6) { sessionValues.exploringEvents++; } if (dataPoint.type == 7) { sessionValues.deathsEvents++; } if (dataPoint.type == 8) { if (dataPoint.subAction == "Fight") { sessionValues.fightEvents++; } else { sessionValues.huntEvents++; } } if (dataPoint.type == 9) { sessionValues.consumableEvents++; } } } sessionValues.uniqueBiomes = uniqueBiomeValues.Count(); sessionValues.sessionLenght /= 10000; sessionValues.traveledDistance /= 10; return sessionValues; }
//Display session(s) statistcs on viewer according to session ID. -1 all sessions. private void displayAllSessionsOnViewer(int sessionID) { List<string> miningEquipment = new List<string>(); List<string> minedMaterials = new List<string>(); List<string> buildingMaterials = new List<string>(); List<string> harvestingEquipment = new List<string>(); List<string> harvestedObj = new List<string>(); List<string> craftedObjects = new List<string>(); List<string> plantedSeeds = new List<string>(); List<string> deathEvents = new List<string>(); List<string> huntedPlayers = new List<string>(); List<string> huntedCreatures = new List<string>(); List<string> consumedCateg = new List<string>(); List<string> consumedObj = new List<string>(); int exploringEvents = 0; int deathsByStarve = 0; int deathsByHealth = 0; string playerName = ""; int sID = 0; emptyData(); foreach (var subList in allEventsBySessions) { foreach(var a in subList) { uniqueEventValues dataPoint = new uniqueEventValues(); dataPoint = a; //add to list only the selected sessionID or all if session ID == -1 if (dataPoint.sessionID == sessionID || sessionID == -1) { playerName = dataPoint.name; sID = dataPoint.sessionID; //Populate all the lists according to actions ID if (dataPoint.type == 1) { miningEquipment.Add(dataPoint.subAction); minedMaterials.Add(dataPoint.uniqueValue); } if (dataPoint.type == 2) { buildingMaterials.Add(dataPoint.uniqueValue); } if (dataPoint.type == 3) { harvestingEquipment.Add(dataPoint.subAction); harvestedObj.Add(dataPoint.uniqueValue); } if (dataPoint.type == 4) { craftedObjects.Add(dataPoint.uniqueValue); } if (dataPoint.type == 5) { plantedSeeds.Add(dataPoint.uniqueValue); } if (dataPoint.type == 6) { exploringEvents++; } if (dataPoint.type == 7) { deathEvents.Add(dataPoint.uniqueValue); if (dataPoint.subAction == "Starved") deathsByStarve++; else deathsByHealth++; } if (dataPoint.type == 8) { if (dataPoint.subAction == "Fight") { huntedPlayers.Add(dataPoint.uniqueValue); } else { huntedCreatures.Add(dataPoint.uniqueValue); } } if (dataPoint.type == 9) { consumedCateg.Add(dataPoint.subAction); consumedObj.Add(dataPoint.uniqueValue); } } } } //call function to order and print lists printListsScreen(minedMaterials, lbMinMat, tbTotalMinedMat); printListsScreen(miningEquipment, lbMinEquip, tbTotalMinEquip); printListsScreen(harvestedObj, lbHarvObj, tbTotalHavObj); printListsScreen(harvestingEquipment, lbHarvEquip, tbTotalHavEquip); printListsScreen(buildingMaterials, lbBuildMat, tbTotalBuildMat); printListsScreen(craftedObjects, lbCraftObj, tbTotalCrafted); printListsScreen(huntedCreatures, lbHunted, tbTotalHunted); printListsScreen(plantedSeeds, lbPlantedSeed, tbTotalPlanted); printListsScreen(consumedCateg, lbConsumCat, tbTotalConCat); printListsScreen(consumedObj, lbConsumObj, tbTotalConObj); printListsScreen(huntedPlayers, lbHuntedPlayers, tbTotalHuntedPlayers); //fill status values //int uniqueBiomes = uniqueBiomeValues.Count; //tbUniqueBiomes.Text = uniqueBiomes.ToString(); //tbSessionLenght.Text = sessionLenght.ToString(); //tbTraveledDist.Text = distance.ToString(); //tbAvgWalkSpeed.Text = (distance / sessionLenght).ToString(); if (sessionID == -1) { tbPlayerName.Text = "all"; tbSessionID.Text = "all"; } else { tbPlayerName.Text = playerName; tbSessionID.Text = sID.ToString(); } tbExploringTotal.Text = exploringEvents.ToString(); tbDeathHealth.Text = deathsByHealth.ToString(); tbDeathStarved.Text = deathsByStarve.ToString(); }
//analyze all events at file loaded using analyzeFile() and add them to lists based on their unique IDs private void parseInputBySession() { //get the file, create a list AllEntriesList with all entries by line string[] dataEntries = analyzeFile(); //calculate the number of unique sessions int oldSessionID = -1; int numberOfSessions = 0; for(int i = 0 ; i < dataEntries.Length - 1 ; i++) { string[] dataPoint = dataEntries[i].Split(delimiterChars); if (System.Convert.ToInt16(dataPoint[0]) != oldSessionID) { numberOfSessions++; oldSessionID = System.Convert.ToInt16(dataPoint[0]); } } //all this crazy stuff is just to remove marcelo_SR1 from the events without chaging their IDs =/ int[] correctSessionIDs = new int[numberOfSessions+1]; int counter = 0; for (int i = 0; i < dataEntries.Length; i++) { string[] dataPoint = dataEntries[i].Split(delimiterChars); correctSessionIDs[counter] = System.Convert.ToInt16(dataPoint[0]); if (System.Convert.ToInt16(dataPoint[0]) != oldSessionID) { counter++; oldSessionID = System.Convert.ToInt16(dataPoint[0]); } } for (int i = 0; i < numberOfSessions; i++) { List<uniqueEventValues> thisSessionEvents = new List<uniqueEventValues>(); for (int j = 0; j < dataEntries.Length; j++) { string[] dataPoint = dataEntries[j].Split(delimiterChars); if (System.Convert.ToInt16(dataPoint[0]) == correctSessionIDs[i]) { oldSessionID = System.Convert.ToInt16(dataPoint[0]); uniqueEventValues a = new uniqueEventValues(); a.sessionID = System.Convert.ToInt16(dataPoint[0]); a.name = dataPoint[1]; a.type = System.Convert.ToInt16(dataPoint[2]); a.date = dataPoint[3]; if (a.type <= 9) { a.deltaTime = System.Convert.ToDouble(dataPoint[4]); a.subAction = dataPoint[5]; a.uniqueValue = dataPoint[6]; a.biome = System.Convert.ToInt16(dataPoint[7]); a.x = System.Convert.ToDouble(dataPoint[8]); a.y = System.Convert.ToDouble(dataPoint[9]); a.z = System.Convert.ToDouble(dataPoint[10]); } thisSessionEvents.Add(a); } } allEventsBySessions.Add(thisSessionEvents); } outputMessageToUser("Import successful. There were " + dataEntries.Length + " events in " + numberOfSessions + " unique sessions"); }