/// <summary> /// Конструктор класса MainWindow. /// </summary> public MainWindow() { InitializeComponent(); drawingClass = new DrawingClass(this, splineCollection); openSaveDialogs = new OpenSaveDialogs(this, drawingClass, splineCollection); splineMaker = new SplineMaker(splineCollection); pointsListDialogs = new PointsListDialogs(this) { splineCollection = splineCollection }; // Установка минимальных размеров окна - размер монитора. DeBoorsSplinesAppWindow.MinHeight = SystemParameters.PrimaryScreenHeight; DeBoorsSplinesAppWindow.MinWidth = SystemParameters.PrimaryScreenWidth; MessageBox.Show("Не рекомендуется вводить больше 50 опорных точек.\n" + "Если Вам всё же это понадобится в ходе работы, не гарантируется" + " быстрая работа программы в силу ограниченных " + "возможностей центрального процессора.", "Предупреждение перед" + " началом работы", MessageBoxButton.OK, MessageBoxImage.Information); }
static void Main(string[] args) { int x = 100; int y = 100; int percentageLiving = 75; grid MyGrid = new grid(x, y); MyGrid.initiateGrid(percentageLiving); DrawingClass drawing = new DrawingClass(); Image gif = drawing.DrawGrid(MyGrid); int iteration = 0; while (iteration < 1000) { MyGrid.UpdateGrid(); iteration++; Console.WriteLine(iteration); Image newImage = drawing.DrawGrid(MyGrid); gif.Frames.InsertFrame(iteration, newImage.Frames.RootFrame); } gif.Save("result.gif"); }
/// <summary> /// Конструктор класса взаимодействия с диалоговыми окнами. /// </summary> /// <param name="mainWindow"> /// Экземпляр класса <see cref="MainWindow"/>. /// </param> /// <param name="drawingClass"> /// Экземпляр класса <see cref="DrawingClass"/>. /// </param> /// <param name="splineCollection"> /// Экземпляр класса <see cref="SplineCollection"/>. /// </param> public OpenSaveDialogs(MainWindow mainWindow, DrawingClass drawingClass, SplineCollection splineCollection) { this.mainWindow = mainWindow; this.drawingClass = drawingClass; this.splineCollection = splineCollection; pointsListDialogs = new PointsListDialogs(mainWindow); }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.Q.Range, 30, Color.LightGreen); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready && MenuClass.Drawings["e"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.E.Range, 30, Color.Cyan); } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready) { if (MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } if (MenuClass.Drawings["rmm"].As <MenuBool>().Enabled) { Vector2Geometry.DrawCircleOnMinimap(UtilityClass.Player.Position, SpellClass.R.Range, Color.White); } } /// <summary> /// Loads the R damage to healthbar. /// </summary> if (MenuClass.Drawings["rdmg"].As <MenuBool>().Enabled) { foreach (var hero in Extensions.GetEnemyHeroesTargetsInRange(SpellClass.R.Range).Where(h => !Invulnerable.Check(h) && h.FloatingHealthBarPosition.OnScreen())) { var width = DrawingClass.SWidth; var height = DrawingClass.SHeight; var xOffset = DrawingClass.SxOffset(hero); var yOffset = DrawingClass.SyOffset(hero); var barPos = hero.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var unitHealth = hero.GetRealHealth(); var totalDamage = UtilityClass.Player.GetSpellDamage(hero, SpellSlot.R); var barLength = 0; if (unitHealth > totalDamage) { barLength = (int)(width * ((unitHealth - totalDamage) / hero.MaxHealth * 100 / 100)); } var drawEndXPos = barPos.X + width * (hero.HealthPercent() / 100); var drawStartXPos = barPos.X + barLength; Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unitHealth < totalDamage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); } } }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.LightGreen, SpellClass.Q.Range, UtilityClass.Player); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Yellow, SpellClass.W.Range, UtilityClass.Player); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready && MenuClass.Drawings["e"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Cyan, SpellClass.E.Range, UtilityClass.Player); } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready) { if (MenuClass.Drawings["r"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Red, SpellClass.R.Range, UtilityClass.Player); } /// <summary> /// Loads the R damage to healthbar. /// </summary> if (MenuClass.Drawings["rdmg"].As <MenuBool>().Enabled) { foreach (var hero in Extensions.GetEnemyHeroesTargetsInRange(SpellClass.R.Range).Where(h => !Invulnerable.Check(h, DamageType.Magical, false) && h.InfoBarPosition.OnScreen())) { var width = DrawingClass.SWidth; var height = DrawingClass.SHeight; var xOffset = DrawingClass.SxOffset(hero); var yOffset = DrawingClass.SyOffset(hero); var barPos = hero.InfoBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var unitHealth = hero.GetRealHealth(); var totalDamage = GetTotalUnleashedPowerDamage(hero); var barLength = 0; if (unitHealth > totalDamage) { barLength = (int)(width * ((unitHealth - totalDamage) / hero.MaxHP * 100 / 100)); } var drawEndXPos = barPos.X + width * (hero.HPPercent() / 100); var drawStartXPos = barPos.X + barLength; Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unitHealth < totalDamage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); } } } if (DarkSpheres.Any()) { foreach (var sphere in DarkSpheres) { /// <summary> /// Loads the DarkSpheres drawing. /// </summary> if (MenuClass.Drawings["spheres"].As <MenuBool>().Enabled) { Render.Circle(sphere.Value, SpellClass.Q.Width, 30, Color.Blue); } /// <summary> /// Loads the Sphere scatter drawing. /// </summary> if (UtilityClass.Player.Distance(sphere.Value) < SpellClass.E.Range && MenuClass.Drawings["scatter"].As <MenuBool>().Enabled&& !UtilityClass.Player.Spellbook.GetSpell(SpellSlot.E).State.HasFlag(SpellState.Cooldown)) { var hitbox = DarkSphereScatterRectangle(sphere); hitbox.Draw( GameObjects.EnemyHeroes.Any(h => h.IsValidTarget() && hitbox.IsInside((Vector2)h.Position)) ? Color.Blue : Color.OrangeRed); } } } }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the Q duration drawing. /// </summary> if (!UtilityClass.Player.Spellbook.GetSpell(SpellSlot.Q).State.HasFlag(SpellState.NotLearned) && MenuClass.Drawings["qduration"].As <MenuBool>().Enabled) { var buff = UtilityClass.Player.GetBuff("TwitchHideInShadows"); if (buff != null) { Render.Circle(UtilityClass.Player.Position, (buff.EndTime - Game.ClockTime) * UtilityClass.Player.MoveSpeed, 30, Color.Green); } else { var qDuration = new[] { 10, 11, 12, 13, 14 }[UtilityClass.Player.Spellbook.GetSpell(SpellSlot.Q).Level - 1]; Render.Circle(UtilityClass.Player.Position, qDuration * UtilityClass.Player.MoveSpeed, 30, Color.Green); Vector2Geometry.DrawCircleOnMinimap(UtilityClass.Player.Position, qDuration * UtilityClass.Player.MoveSpeed, Color.White); } } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Yellow, SpellClass.W.Range, UtilityClass.Player); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready) { if (MenuClass.Drawings["e"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Cyan, SpellClass.E.Range, UtilityClass.Player); } /// <summary> /// Loads the E damage to healthbar. /// </summary> if (MenuClass.Drawings["edmg"].As <MenuBool>().Enabled) { foreach (var unit in ObjectManager.Get <AIBaseClient>().Where(h => IsPerfectExpungeTarget(h) && (h is AIHeroClient || UtilityClass.JungleList.Contains(h.CharName)) && h.InfoBarPosition.OnScreen())) { var heroUnit = unit as AIHeroClient; var jungleList = UtilityClass.JungleList; var mobOffset = DrawingClass.JungleHpBarOffsetList.FirstOrDefault(x => x.CharName.Equals(unit.CharName)); int width; if (jungleList.Contains(unit.CharName)) { width = mobOffset?.Width ?? DrawingClass.SWidth; } else { width = DrawingClass.SWidth; } int height; if (jungleList.Contains(unit.CharName)) { height = mobOffset?.Height ?? DrawingClass.SHeight; } else { height = DrawingClass.SHeight; } int xOffset; if (jungleList.Contains(unit.CharName)) { xOffset = mobOffset?.XOffset ?? DrawingClass.SxOffset(heroUnit); } else { xOffset = DrawingClass.SxOffset(heroUnit); } int yOffset; if (jungleList.Contains(unit.CharName)) { yOffset = mobOffset?.YOffset ?? DrawingClass.SyOffset(heroUnit); } else { yOffset = DrawingClass.SyOffset(heroUnit); } var barPos = unit.InfoBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var unitHealth = unit.GetRealHealth(); var totalDamage = GetTotalExpungeDamage(unit); var barLength = 0; if (unitHealth > totalDamage) { barLength = (int)(width * ((unitHealth - totalDamage) / unit.MaxHP * 100 / 100)); } var drawEndXPos = barPos.X + width * (unit.HPPercent() / 100); var drawStartXPos = barPos.X + barLength; Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unitHealth < totalDamage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); } } } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready && MenuClass.Drawings["r"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Red, SpellClass.R.Range, UtilityClass.Player); } }
/// <summary> /// Initializes the menus. /// </summary> public void Drawings() { /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E damage to healthbar. /// </summary> if (MenuClass.Drawings["edmg"].As <MenuBool>().Enabled) { ObjectManager.Get <Obj_AI_Base>() .Where(h => IsCharged(h) && (h is Obj_AI_Hero && !Invulnerable.Check((Obj_AI_Hero)h) || UtilityClass.JungleList.Contains(h.UnitSkinName))) .ToList() .ForEach( unit => { var heroUnit = unit as Obj_AI_Hero; var jungleList = UtilityClass.JungleList; var mobOffset = DrawingClass.JungleHpBarOffsetList.FirstOrDefault(x => x.UnitSkinName.Equals(unit.UnitSkinName)); int width; if (jungleList.Contains(unit.UnitSkinName)) { width = mobOffset?.Width ?? DrawingClass.SWidth; } else { width = DrawingClass.SWidth; } int height; if (jungleList.Contains(unit.UnitSkinName)) { height = mobOffset?.Height ?? DrawingClass.SHeight; } else { height = DrawingClass.SHeight; } int xOffset; if (jungleList.Contains(unit.UnitSkinName)) { xOffset = mobOffset?.XOffset ?? DrawingClass.SxOffset(heroUnit); } else { xOffset = DrawingClass.SxOffset(heroUnit); } int yOffset; if (jungleList.Contains(unit.UnitSkinName)) { yOffset = mobOffset?.YOffset ?? DrawingClass.SyOffset(heroUnit); } else { yOffset = DrawingClass.SyOffset(heroUnit); } var barPos = unit.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var drawEndXPos = barPos.X + width * (unit.HealthPercent() / 100); var drawStartXPos = (float)(barPos.X + (unit.GetRealHealth() > GetTotalExplosionDamage(unit) ? width * ((unit.GetRealHealth() - GetTotalExplosionDamage(unit)) / unit.MaxHealth * 100 / 100) : 0)); Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unit.GetRealHealth() < GetTotalExplosionDamage(unit) ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); }); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E damage to healthbar. /// </summary> if (MenuClass.Drawings["edmg"].As <MenuBool>().Enabled) { foreach (var unit in ObjectManager.Get <Obj_AI_Base>().Where(h => IsPerfectChargeTarget(h) && (h is Obj_AI_Hero || UtilityClass.JungleList.Contains(h.UnitSkinName)) && h.FloatingHealthBarPosition.OnScreen())) { var heroUnit = unit as Obj_AI_Hero; var jungleList = UtilityClass.JungleList; var mobOffset = DrawingClass.JungleHpBarOffsetList.FirstOrDefault(x => x.UnitSkinName.Equals(unit.UnitSkinName)); int width; if (jungleList.Contains(unit.UnitSkinName)) { width = mobOffset?.Width ?? DrawingClass.SWidth; } else { width = DrawingClass.SWidth; } int height; if (jungleList.Contains(unit.UnitSkinName)) { height = mobOffset?.Height ?? DrawingClass.SHeight; } else { height = DrawingClass.SHeight; } int xOffset; if (jungleList.Contains(unit.UnitSkinName)) { xOffset = mobOffset?.XOffset ?? DrawingClass.SxOffset(heroUnit); } else { xOffset = DrawingClass.SxOffset(heroUnit); } int yOffset; if (jungleList.Contains(unit.UnitSkinName)) { yOffset = mobOffset?.YOffset ?? DrawingClass.SyOffset(heroUnit); } else { yOffset = DrawingClass.SyOffset(heroUnit); } var barPos = unit.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var unitHealth = unit.GetRealHealth(); var totalDamage = GetTotalExplosionDamage(unit); var barLength = 0; if (unitHealth > totalDamage) { barLength = (int)(width * ((unitHealth - totalDamage) / unit.MaxHealth * 100 / 100)); } var drawEndXPos = barPos.X + width * (unit.HealthPercent() / 100); var drawStartXPos = barPos.X + barLength; Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unitHealth < totalDamage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); } } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } }
/// <summary> /// Initializes the menus. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.Q.Range, 30, Color.LightGreen); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready && MenuClass.Drawings["e"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.E.Range, 30, Color.Cyan); } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready) { if (MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } if (MenuClass.Drawings["rmm"].As <MenuBool>().Enabled) { Geometry.DrawCircleOnMinimap(UtilityClass.Player.Position, SpellClass.R.Range, Color.White); } } /// <summary> /// Loads the R damage to healthbar. /// </summary> if (MenuClass.Drawings["rdmg"].As <MenuBool>().Enabled) { GameObjects.EnemyHeroes .Where(h => h.IsValidSpellTarget(SpellClass.R.Range)) .ToList() .ForEach( hero => { var width = DrawingClass.SWidth; var height = DrawingClass.SHeight; var xOffset = DrawingClass.SxOffset(hero); var yOffset = DrawingClass.SyOffset(hero); var barPos = hero.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var drawEndXPos = barPos.X + width * (hero.HealthPercent() / 100); var damage = UtilityClass.Player.GetSpellDamage(hero, SpellSlot.R); var drawStartXPos = (float)(barPos.X + (hero.GetRealHealth() > damage ? width * ((hero.GetRealHealth() - damage) / hero.MaxHealth * 100 / 100) : 0)); Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, hero.GetRealHealth() < damage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); }); } }
/// <summary> /// Initializes the menus. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.Q.Range, 30, Color.LightGreen); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready && MenuClass.Drawings["e"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.E.Range, 30, Color.Cyan); } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready) { if (MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } /// <summary> /// Loads the R damage to healthbar. /// </summary> if (MenuClass.Drawings["rdmg"].As <MenuBool>().Enabled) { Extensions.GetEnemyHeroesTargetsInRange(SpellClass.R.Range) .Where(h => h.IsValidTarget() && !Invulnerable.Check(h, DamageType.Magical, false)) .ToList() .ForEach( target => { var width = DrawingClass.SWidth; var height = DrawingClass.SHeight; var xOffset = DrawingClass.SxOffset(target); var yOffset = DrawingClass.SyOffset(target); var barPos = target.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var drawEndXPos = barPos.X + width * (target.HealthPercent() / 100); var drawStartXPos = (float)(barPos.X + (target.GetRealHealth() > GetPerfectUnleashedPowerDamage(target) ? width * ((target.GetRealHealth() - GetPerfectUnleashedPowerDamage(target)) / target.MaxHealth * 100 / 100) : 0)); Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, target.GetRealHealth() < GetPerfectUnleashedPowerDamage(target) ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); }); } } if (DarkSpheres.Any()) { foreach (var sphere in DarkSpheres) { /// <summary> /// Loads the DarkSpheres drawing. /// </summary> if (MenuClass.Drawings["spheres"].As <MenuBool>().Enabled) { Render.Circle(sphere.Value, SpellClass.Q.Width, 30, Color.Blue); } /// <summary> /// Loads the Sphere scatter drawing. /// </summary> if (UtilityClass.Player.Distance(sphere.Value) < SpellClass.E.Range && MenuClass.Drawings["scatter"].As <MenuBool>().Enabled&& !UtilityClass.Player.SpellBook.GetSpell(SpellSlot.E).State.HasFlag(SpellState.Cooldown)) { var hitbox = DarkSphereScatterRectangle(sphere); hitbox.Draw( GameObjects.EnemyHeroes.Any(h => h.IsValidTarget() && hitbox.IsInside((Vector2)h.ServerPosition)) ? Color.Blue : Color.OrangeRed); } } } }
/// <summary> /// Initializes the menus. /// </summary> public void Drawings() { /// <summary> /// Loads the Q duration drawing. /// </summary> if (!UtilityClass.Player.SpellBook.GetSpell(SpellSlot.Q).State.HasFlag(SpellState.NotLearned) && MenuClass.Drawings["qduration"].As <MenuBool>().Enabled) { var buff = UtilityClass.Player.GetBuff("TwitchHideInShadows"); if (buff != null) { Render.Circle(UtilityClass.Player.Position, (buff.EndTime - Game.ClockTime) * UtilityClass.Player.MoveSpeed, 30, Color.Green); } else { var qDuration = new[] { 10, 11, 12, 13, 14 }[UtilityClass.Player.SpellBook.GetSpell(SpellSlot.Q).Level - 1]; Render.Circle(UtilityClass.Player.Position, qDuration * UtilityClass.Player.MoveSpeed, 30, Color.Green); Geometry.DrawCircleOnMinimap(UtilityClass.Player.Position, qDuration * UtilityClass.Player.MoveSpeed, Color.White); } } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready) { if (MenuClass.Drawings["e"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.E.Range, 30, Color.Cyan); } /// <summary> /// Loads the E damage to healthbar. /// </summary> if (MenuClass.Drawings["edmg"].As <MenuBool>().Enabled) { ObjectManager.Get <Obj_AI_Base>() .Where(h => IsPerfectExpungeTarget(h) && (h is Obj_AI_Hero || UtilityClass.JungleList.Contains(h.UnitSkinName))) .ToList() .ForEach( unit => { var heroUnit = unit as Obj_AI_Hero; var jungleList = UtilityClass.JungleList; var mobOffset = DrawingClass.JungleHpBarOffsetList.FirstOrDefault(x => x.UnitSkinName.Equals(unit.UnitSkinName)); int width; if (jungleList.Contains(unit.UnitSkinName)) { width = mobOffset?.Width ?? DrawingClass.SWidth; } else { width = DrawingClass.SWidth; } int height; if (jungleList.Contains(unit.UnitSkinName)) { height = mobOffset?.Height ?? DrawingClass.SHeight; } else { height = DrawingClass.SHeight; } int xOffset; if (jungleList.Contains(unit.UnitSkinName)) { xOffset = mobOffset?.XOffset ?? DrawingClass.SxOffset(heroUnit); } else { xOffset = DrawingClass.SxOffset(heroUnit); } int yOffset; if (jungleList.Contains(unit.UnitSkinName)) { yOffset = mobOffset?.YOffset ?? DrawingClass.SyOffset(heroUnit); } else { yOffset = DrawingClass.SyOffset(heroUnit); } var barPos = unit.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var drawEndXPos = barPos.X + width * (unit.HealthPercent() / 100); var drawStartXPos = (float)(barPos.X + (unit.GetRealHealth() > GetTotalExpungeDamage(unit) ? width * ((unit.GetRealHealth() - GetTotalExpungeDamage(unit)) / unit.MaxHealth * 100 / 100) : 0)); Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unit.GetRealHealth() < GetTotalExpungeDamage(unit) ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); }); } } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready && MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } }
/// <summary> /// Initializes the menus. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.Q.Range, 30, Color.LightGreen); } /// <summary> /// Loads the W drawing. /// </summary> if (SpellClass.W.Ready && MenuClass.Drawings["w"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.W.Range, 30, Color.Yellow); } /// <summary> /// Loads the E drawings. /// </summary> if (SpellClass.E.Ready) { /// <summary> /// Loads the E Range. /// </summary> if (MenuClass.Drawings["e"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.E.Range, 30, Color.Cyan); } /// <summary> /// Loads the E damage to healthbar. /// </summary> if (MenuClass.Drawings["edmg"].As <MenuBool>().Enabled) { ObjectManager.Get <Obj_AI_Base>() .Where(h => IsPerfectRendTarget(h) && (h is Obj_AI_Hero || UtilityClass.JungleList.Contains(h.UnitSkinName))) .ToList() .ForEach( unit => { var heroUnit = unit as Obj_AI_Hero; var jungleList = UtilityClass.JungleList; var mobOffset = DrawingClass.JungleHpBarOffsetList.FirstOrDefault(x => x.UnitSkinName.Equals(unit.UnitSkinName)); int width; if (jungleList.Contains(unit.UnitSkinName)) { width = mobOffset?.Width ?? DrawingClass.SWidth; } else { width = DrawingClass.SWidth; } int height; if (jungleList.Contains(unit.UnitSkinName)) { height = mobOffset?.Height ?? DrawingClass.SHeight; } else { height = DrawingClass.SHeight; } int xOffset; if (jungleList.Contains(unit.UnitSkinName)) { xOffset = mobOffset?.XOffset ?? DrawingClass.SxOffset(heroUnit); } else { xOffset = DrawingClass.SxOffset(heroUnit); } int yOffset; if (jungleList.Contains(unit.UnitSkinName)) { yOffset = mobOffset?.YOffset ?? DrawingClass.SyOffset(heroUnit); } else { yOffset = DrawingClass.SyOffset(heroUnit); } var barPos = unit.FloatingHealthBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var drawEndXPos = barPos.X + width * (unit.HealthPercent() / 100); var drawStartXPos = (float)(barPos.X + (unit.GetRealHealth() > GetTotalRendDamage(unit) ? width * ((unit.GetRealHealth() - GetTotalRendDamage(unit)) / unit.MaxHealth * 100 / 100) : 0)); Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unit.GetRealHealth() < GetTotalRendDamage(unit) ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); }); } } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready && MenuClass.Drawings["r"].As <MenuBool>().Enabled) { Render.Circle(UtilityClass.Player.Position, SpellClass.R.Range, 30, Color.Red); } /// <summary> /// Loads the Soulbound drawing. /// </summary> if (SoulBound != null && MenuClass.Drawings["soulbound"].As <MenuSliderBool>().Enabled) { for (var i = 0; i < MenuClass.Drawings["soulbound"].As <MenuSliderBool>().Value; i++) { Render.Circle(SoulBound.Position, (uint)(60 + i * 5), 30, Color.Black); } } }
/// <summary> /// Initializes the drawings. /// </summary> public void Drawings() { /// <summary> /// Loads the Q drawing. /// </summary> if (SpellClass.Q.Ready && MenuClass.Drawings["q"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.LightGreen, SpellClass.Q.Range, UtilityClass.Player); } /// <summary> /// Loads the E drawing. /// </summary> if (SpellClass.E.Ready && MenuClass.Drawings["e"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Cyan, SpellClass.E.Range, UtilityClass.Player); } /// <summary> /// Loads the R drawing. /// </summary> if (SpellClass.R.Ready) { if (MenuClass.Drawings["r"].As <MenuBool>().Enabled) { CircleRendering.Render(Color.Red, SpellClass.R.Range, UtilityClass.Player); } /// <summary> /// Loads the R damage to healthbar. /// </summary> if (MenuClass.Drawings["rdmg"].As <MenuBool>().Enabled) { foreach (var hero in Extensions.GetEnemyHeroesTargetsInRange(SpellClass.R.Range).Where(h => !Invulnerable.Check(h) && h.InfoBarPosition.OnScreen())) { var width = DrawingClass.SWidth; var height = DrawingClass.SHeight; var xOffset = DrawingClass.SxOffset(hero); var yOffset = DrawingClass.SyOffset(hero); var barPos = hero.InfoBarPosition; barPos.X += xOffset; barPos.Y += yOffset; var unitHealth = hero.GetRealHealth(); var totalDamage = GetTotalNoxianGuillotineDamage(hero); var barLength = 0; if (unitHealth > totalDamage) { barLength = (int)(width * ((unitHealth - totalDamage) / hero.MaxHP * 100 / 100)); } var drawEndXPos = barPos.X + width * (hero.HPPercent() / 100); var drawStartXPos = barPos.X + barLength; Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, height, true, unitHealth < totalDamage ? Color.Blue : Color.Orange); Render.Line(drawStartXPos, barPos.Y, drawStartXPos, barPos.Y + height + 1, 1, true, Color.Lime); } } } }