示例#1
0
    /// <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++;
        }
    }
示例#2
0
        /// <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);
                }
            }
        }
示例#3
0
    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);
    }
示例#4
0
        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++;
        }
    }