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); } } }