/// <summary> /// Cleans up the entries in this statistics. This accounts for plans that have been deleted. /// </summary> public static void CleanUp() { var allPlans = UTils.AllVisibleAssetsOfType <UTAutomationPlan> (); var knownGuids = new HashSet <string> (); knownGuids.UnionWith(allPlans.ConvertAll(plan => plan.Guid)); var knownEntries = new List <StatEntry> (); var i = 0; StatEntry statEntry = null; do { statEntry = new StatEntry(); statEntry.guid = EditorPrefs.GetString(PlanPrefix + i, ""); if (!string.IsNullOrEmpty(statEntry.guid)) { statEntry.project = EditorPrefs.GetString(PlanPrefix + i + ".project", ""); statEntry.lastModified = FromString(EditorPrefs.GetString(PlanPrefix + i + ".lastModified")); statEntry.time = EditorPrefs.GetFloat(PlanPrefix + i + ".time", 0f); if (knownGuids.Contains(statEntry.guid)) { knownEntries.Add(statEntry); } else { // not known, check if it's from this project if (statEntry.project != Application.dataPath) { // different project, candidate for keeping it var age = DateTime.Now - statEntry.lastModified; if (age.TotalDays < 90) { // age is recent, keep it. knownEntries.Add(statEntry); } } // in all other cases, kill it. } EditorPrefs.DeleteKey(PlanPrefix + i); EditorPrefs.DeleteKey(PlanPrefix + i + ".time"); EditorPrefs.DeleteKey(PlanPrefix + i + ".project"); EditorPrefs.DeleteKey(PlanPrefix + i + ".lastModified"); } i++; } while (!string.IsNullOrEmpty(statEntry.guid)); i = 0; foreach (var entry in knownEntries) { EditorPrefs.SetString(PlanPrefix + i, entry.guid); EditorPrefs.SetFloat(PlanPrefix + i + ".time", entry.time); EditorPrefs.SetString(PlanPrefix + i + ".project", entry.project); EditorPrefs.SetString(PlanPrefix + i + ".lastModified", ToString(entry.lastModified)); i++; } }
/// <summary> /// Processes the wave bullets, gathering targeting statistics /// </summary> /// <param name="location">The current location.</param> private void ProcessWaveBullets(Point location) { foreach (var enemyData in this.enemies.Values) { var targetStatistics = this.statistics.GetStatistics(enemyData.Name); var fieldArea = GetFieldArea(enemyData.Location); var distanceBucket = (int)(Point.Distance(enemyData.Location, location) / 100); var bulletsToTerminate = new List <WaveBullet>(); // statistics for each enemy robot are segmented by distance to target and field area the enemy is in var currentStats = targetStatistics.SegmentedTargeting.Where(x => x.DistanceBucket == distanceBucket && x.FieldAreaBucket == fieldArea).ToList(); foreach (var bullet in targetStatistics.WaveBullets) { double guessFactor = 0; if (bullet.CheckHit(enemyData.Name, enemyData.Location, enemyData.Time, out guessFactor)) { int index = (int)Math.Round((guessFactors - 1) / 2 * (guessFactor + 1)); // increment the hit counter for the bucket var stats = currentStats.Where(x => x.GuessFactorBucket == index).FirstOrDefault(); if (stats == null) { stats = new StatEntry() { GuessFactorBucket = index, DistanceBucket = distanceBucket, FieldAreaBucket = fieldArea, Value = 1 }; targetStatistics.SegmentedTargeting.Add(stats); currentStats.Add(stats); } else { stats.Value++; } // the bullet has hit, terminate it bulletsToTerminate.Add(bullet); } else if (this.Time - bullet.Time > 30) { // terminate the old bullets bulletsToTerminate.Add(bullet); } } foreach (var bullet in bulletsToTerminate) { targetStatistics.WaveBullets.Remove(bullet); } } }
public void AddEntry(Texture2D texture, string text) { GameObject StatEntryObject = Instantiate(StatEntryPrefab); StatEntryObject.transform.SetParent(transform); StatEntryObject.transform.localScale = Vector3.one; StatEntry statEntry = StatEntryObject.GetComponent <StatEntry>(); statEntry.SetImage(Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f))); statEntry.SetText(text); StatEntries.Add(statEntry); }
public void AddStat(string type, string id, BaseStat stat) { var statEntry = FindStat(type); if (statEntry == null) { statEntry = new StatEntry(); _stats.Add(statEntry); } statEntry.Stat = stat; statEntry.Id = id; statEntry.DamageType = type; }
/// <summary> /// Cleans up the entries in this statistics. This accounts for plans that have been deleted. /// </summary> public static void CleanUp() { var allPlans = UTils.AllVisibleAssetsOfType<UTAutomationPlan> (); var knownGuids = new HashSet<string> (); knownGuids.UnionWith (allPlans.ConvertAll (plan => plan.Guid)); var knownEntries = new List<StatEntry> (); var i = 0; StatEntry statEntry = null; do { statEntry = new StatEntry (); statEntry.guid = EditorPrefs.GetString (PlanPrefix + i, ""); if (!string.IsNullOrEmpty (statEntry.guid)) { statEntry.project = EditorPrefs.GetString (PlanPrefix + i + ".project", ""); statEntry.lastModified = FromString (EditorPrefs.GetString (PlanPrefix + i + ".lastModified")); statEntry.time = EditorPrefs.GetFloat (PlanPrefix + i + ".time", 0f); if (knownGuids.Contains (statEntry.guid)) { knownEntries.Add (statEntry); } else { // not known, check if it's from this project if (statEntry.project != Application.dataPath) { // different project, candidate for keeping it var age = DateTime.Now - statEntry.lastModified; if (age.TotalDays < 90) { // age is recent, keep it. knownEntries.Add (statEntry); } } // in all other cases, kill it. } EditorPrefs.DeleteKey (PlanPrefix + i); EditorPrefs.DeleteKey (PlanPrefix + i + ".time"); EditorPrefs.DeleteKey (PlanPrefix + i + ".project"); EditorPrefs.DeleteKey (PlanPrefix + i + ".lastModified"); } i++; } while (!string.IsNullOrEmpty(statEntry.guid)); i = 0; foreach (var entry in knownEntries) { EditorPrefs.SetString (PlanPrefix + i, entry.guid); EditorPrefs.SetFloat (PlanPrefix + i + ".time", entry.time); EditorPrefs.SetString (PlanPrefix + i + ".project", entry.project); EditorPrefs.SetString (PlanPrefix + i + ".lastModified", ToString (entry.lastModified)); i++; } }