コード例 #1
0
        private static void DrawTopPanel(int type)
        {
            List <Hero> selectedHeroes = null;

            switch (type)
            {
            case 0:
                selectedHeroes = Manager.HeroManager.GetHeroes();
                break;

            case 1:
                selectedHeroes = Members.AllyHeroes;
                break;

            case 2:
                selectedHeroes = Members.EnemyHeroes;
                break;
            }
            if (selectedHeroes == null)
            {
                return;
            }
            if (Members.Menu.Item("toppanel.Status.Enable").GetValue <bool>() ||
                Members.Menu.Item("toppanel.Health.Enable").GetValue <bool>() ||
                Members.Menu.Item("toppanel.Mana.Enable").GetValue <bool>())
            {
                foreach (var v in selectedHeroes)
                {
                    try
                    {
                        var pos = Helper.GetTopPanelPosition(v) +
                                  new Vector2(Members.Menu.Item("extraPos.X").GetValue <Slider>().Value,
                                              Members.Menu.Item("extraPos.Y").GetValue <Slider>().Value);
                        var temp        = HUDInfo.GetTopPanelSize(v);
                        var size        = new Vector2((float)temp[0], (float)temp[1]);
                        var healthDelta = new Vector2(v.Health * size.X / v.MaximumHealth, 0);
                        var manaDelta   = new Vector2(v.Mana * size.X / v.MaximumMana, 0);
                        DrawHealthPanel(pos, size, healthDelta);
                        DrawManaPanel(pos, size, manaDelta);
                        DrawStatus(pos, v, size);
                    }
                    catch (Exception)
                    {
                        Printer.Print($"[DrawTopPanel: selectedHeroes] --> {v!=null && v.IsValid}");
                    }
                }
            }
            if (!Members.Menu.Item("ultimate.Enable").GetValue <bool>())
            {
                return;
            }

            /*if (!Members.Menu.Item("ultimate.Icon.Enable").GetValue<bool>() &&
             *  !Members.Menu.Item("ultimate.Info").GetValue<bool>() &&
             *  !Members.Menu.Item("ultimate.InfoAlways").GetValue<bool>()) return;*/
            foreach (var v in Members.EnemyHeroes)
            {
                var ablist = Manager.HeroManager.GetAbilityList(v);
                if (ablist == null)
                {
                    continue;
                }
                try
                {
                    Ability ultimate;
                    if (!Ultimate.TryGetValue(v.StoredName(), out ultimate))
                    {
                        var spell = ablist.FirstOrDefault(x => x.IsAbilityType(AbilityType.Ultimate));
                        if (spell != null)
                        {
                            Ultimate.Remove(v.StoredName());
                            Ultimate.Add(v.StoredName(), spell);
                        }
                        continue;
                    }
                    if (ultimate == null || !ultimate.IsValid || ultimate.Level <= 0)
                    {
                        continue;
                    }
                    var pos = Helper.GetTopPanelPosition(v) +
                              new Vector2(Members.Menu.Item("extraPos.X").GetValue <Slider>().Value,
                                          Members.Menu.Item("extraPos.Y").GetValue <Slider>().Value);
                    var    tempS  = HUDInfo.GetTopPanelSize(v);
                    var    size   = new Vector2((float)tempS[0], (float)tempS[1]);
                    var    ultPos = pos + new Vector2(size[0] / 2 - 5, size[1] + 1);
                    string path;

                    switch (ultimate.AbilityState)
                    {
                    case AbilityState.NotEnoughMana:
                        path = "materials/ensage_ui/other/ulti_nomana.vmat";
                        break;

                    case AbilityState.OnCooldown:
                        path = "materials/ensage_ui/other/ulti_cooldown.vmat";
                        break;

                    default:
                        path = "materials/ensage_ui/other/ulti_ready.vmat";
                        break;
                    }
                    if (Members.Menu.Item("ultimate.Icon.Enable").GetValue <bool>())
                    {
                        Drawing.DrawRect(ultPos, new Vector2(14, 14), Drawing.GetTexture(path));
                    }
                    if (Members.Menu.Item("ultimate.Type").GetValue <StringList>().SelectedIndex == 0 && Members.Menu.Item("ultimate.Info").GetValue <bool>() &&
                        (Members.Menu.Item("ultimate.InfoAlways").GetValue <bool>() && (
                             ultimate.AbilityState == AbilityState.OnCooldown ||
                             ultimate.AbilityState == AbilityState.NotEnoughMana) ||
                         Utils.IsUnderRectangle(Game.MouseScreenPosition, ultPos.X, ultPos.Y, 15, 15)))
                    {
                        var texturename = $"materials/ensage_ui/spellicons/{ultimate.StoredName()}.vmat";
                        pos = Helper.GetTopPanelPosition(v);
                        var startPos = pos + new Vector2(0, 7 * 4 + size.Y);
                        size = new Vector2(size.X, size.Y + 15);
                        Drawing.DrawRect(startPos,
                                         size,
                                         Textures.GetTexture(texturename));
                        string  ultimateCd;
                        Vector2 textSize;
                        Vector2 textPos;
                        switch (ultimate.AbilityState)
                        {
                        case AbilityState.OnCooldown:
                            ultimateCd =
                                ((int)Math.Min(ultimate.Cooldown, 999)).ToString(CultureInfo.InvariantCulture);
                            textSize = Drawing.MeasureText(ultimateCd, "Arial",
                                                           new Vector2((float)(size.Y * .50), size.Y / 2), FontFlags.AntiAlias);
                            //Print(v.Name + " cd: " + ultimateCd);
                            textPos = startPos + new Vector2(0, size.Y - textSize.Y);
                            Drawing.DrawRect(textPos - new Vector2(0, 0),
                                             new Vector2(textSize.X, textSize.Y),
                                             new Color(0, 0, 0, 200));
                            Drawing.DrawText(
                                ultimateCd,
                                textPos,
                                new Vector2(textSize.Y, 0),
                                Color.White,
                                FontFlags.AntiAlias | FontFlags.StrikeOut);
                            if (Members.Menu.Item("ultimate.Icon.Extra.Enable").GetValue <bool>() && ultimate.ManaCost > v.Mana)
                            {
                                ultimateCd =
                                    ((int)Math.Min(Math.Abs(v.Mana - ultimate.ManaCost), 999)).ToString(
                                        CultureInfo.InvariantCulture);
                                textSize = Drawing.MeasureText(ultimateCd, "Arial",
                                                               new Vector2((float)(size.Y * .50), size.Y / 2), FontFlags.AntiAlias);
                                textPos = startPos + new Vector2(size.X - textSize.X, 0);
                                Drawing.DrawRect(textPos - new Vector2(0, 0),
                                                 new Vector2(textSize.X, textSize.Y),
                                                 new Color(0, 0, 0, 200));
                                Drawing.DrawText(
                                    ultimateCd,
                                    textPos,
                                    new Vector2(textSize.Y, 0),
                                    Color.White,
                                    FontFlags.AntiAlias | FontFlags.StrikeOut);
                                Drawing.DrawRect(startPos,
                                                 new Vector2(size.X, size.Y),
                                                 new Color(0, 50, 155, 100));
                            }
                            break;

                        case AbilityState.NotEnoughMana:
                            ultimateCd =
                                ((int)Math.Min(Math.Abs(v.Mana - ultimate.ManaCost), 999)).ToString(
                                    CultureInfo.InvariantCulture);
                            textSize = Drawing.MeasureText(ultimateCd, "Arial",
                                                           new Vector2((float)(size.Y * .50), size.Y / 2), FontFlags.AntiAlias);
                            textPos = startPos + new Vector2(size.X - textSize.X, 0);
                            Drawing.DrawRect(textPos - new Vector2(0, 0),
                                             new Vector2(textSize.X, textSize.Y),
                                             new Color(0, 0, 0, 200));
                            Drawing.DrawText(
                                ultimateCd,
                                textPos,
                                new Vector2(textSize.Y, 0),
                                Color.White,
                                FontFlags.AntiAlias | FontFlags.StrikeOut);
                            Drawing.DrawRect(startPos,
                                             new Vector2(size.X, size.Y),
                                             new Color(0, 50, 155, 100));
                            break;
                        }
                    }
                    else if (ultimate.AbilityState == AbilityState.OnCooldown)
                    {
                        pos = Helper.GetTopPanelPosition(v);
                        var startPos  = pos + new Vector2(0, 7 * 4 + size.Y);
                        var cd        = ultimate.Cooldown;
                        var manaDelta = new Vector2(cd * size.X / ultimate.CooldownLength, 0);
                        //size = new Vector2(manaDelta.X, 7);
                        DrawUltimatePanel(startPos, size, manaDelta, (int)cd, Members.Menu.Item("ultimate.Line.Size").GetValue <Slider>().Value);

                        /*Drawing.DrawRect(startPos,
                         *  size, Color.Yellow);*/
                    }
                }
                catch (Exception)
                {
                    Printer.Print("[DrawTopPanel:ultimate] " + v.StoredName() + " Type: " + type);
                }
            }
        }