예제 #1
0
        public void PaintWorld(WorldLayer layer)
        {
            if ((Hud.Game.SpecialArea != SpecialArea.Rift) && (Hud.Game.SpecialArea != SpecialArea.GreaterRift) && (Hud.Game.SpecialArea != SpecialArea.ChallengeRift))
            {
                return;
            }

            var monsters = Hud.Game.AliveMonsters.Where(x => (x.SnoMonster != null) && (IncludeOffScreen || x.IsOnScreen) && !((x.SummonerAcdDynamicId != 0) && (x.Rarity == ActorRarity.RareMinion)));

            foreach (var monster in monsters)
            {
                var nearMe = monsters.Where(x => x != monster && x.FloorCoordinate.XYDistanceTo(monster.FloorCoordinate) <= Range);
                Clusters.Add(monster, nearMe.Sum(x => x.SnoMonster.RiftProgression) + monster.SnoMonster.RiftProgression);
            }

            var clusters = 0;

            while (Clusters.Count > 0 && clusters < ClustersMax)
            {
                var cluster = Clusters.Aggregate((l, r) => l.Value > r.Value ? l : r);

                if ((cluster.Value / Hud.Game.MaxQuestProgress * 100d) >= ProgressMin)
                {
                    Decorator.Paint(layer, cluster.Key, cluster.Key.FloorCoordinate, (cluster.Value / Hud.Game.MaxQuestProgress * 100d).ToString("F2", CultureInfo.InvariantCulture) + "%");

                    var nearMeAgain = monsters.Where(x => x.FloorCoordinate.XYDistanceTo(cluster.Key.FloorCoordinate) <= Range * 2f);
                    foreach (var monster in nearMeAgain)
                    {
                        Clusters.Remove(monster);
                    }
                    clusters++;
                }
                else
                {
                    clusters = ClustersMax;
                }
            }

            Clusters.Clear();
        }