Advertisement
HaKache

PlayersArcPlugin

Nov 22nd, 2019
1,131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.18 KB | None | 0 0
  1. // PlayersArcPlugin by HaKache
  2. // Draws Arcs under players to show life, shield and resource values.
  3. // Thanks to S4000 and RNN for code and ideas.
  4.  
  5. using SharpDX;
  6. using SharpDX.Direct2D1;
  7. using System;
  8. using System.Linq;
  9. using System.Globalization;
  10. using System.Collections.Generic;
  11. using Turbo.Plugins.Default;
  12.  
  13. namespace Turbo.Plugins.Extended.Players
  14. {
  15.     public class PlayersArcPlugin : BasePlugin, IInGameWorldPainter
  16.     {
  17.  
  18.     public int Arc_Start { get; set; }
  19.     public int Arc_End { get; set; }
  20.     public float ArcSize { get; set; }
  21.  
  22.     public IBrush Brush_BG { get; set; }
  23.     public IBrush Brush_ShieldBG { get; set; }
  24.     public IBrush Brush_ResBG { get; set; }
  25.     public IBrush Brush_Life { get; set; }
  26.     public IBrush Brush_Shield { get; set; }
  27.  
  28.     public IBrush Brush_Mana { get; set; }
  29.     public IBrush Brush_Fury { get; set; }
  30.     public IBrush Brush_Arcane { get; set; }
  31.     public IBrush Brush_Spirit { get; set; }
  32.     public IBrush Brush_Wrath { get; set; }
  33.     public IBrush Brush_Essence { get; set; }
  34.     public IBrush Brush_Hatred { get; set; }
  35.     public IBrush Brush_Disc { get; set; }
  36.  
  37.         public bool MeResource { get; set; }
  38.         public bool MeLife { get; set; }
  39.         public bool MeShield { get; set; }
  40.  
  41.         public bool PlayersResource { get; set; }
  42.         public bool PlayersLife { get; set; }
  43.         public bool PlayersShield { get; set; }
  44.  
  45.         public IFont HealthFont { get; set; }
  46.  
  47.     public PlayersArcPlugin()
  48.     {
  49.         Enabled = true;
  50.  
  51.         MeLife = true;
  52.         MeShield = true;
  53.         MeResource = true;
  54.  
  55.         PlayersLife = true;
  56.         PlayersShield = true;
  57.         PlayersResource = false;
  58.     }
  59.  
  60.     public void PaintWorld(WorldLayer layer)
  61.     {
  62.         var players = Hud.Game.Players.Where(x => x.CoordinateKnown && Hud.Game.Me.SnoArea.Sno == x.SnoArea.Sno && x.HeadStone == null);
  63.         foreach (var player in players)
  64.         {
  65.             Paint(layer, player, Arc_Start, Arc_End, ArcSize);
  66.         }
  67.     }
  68.  
  69.     public override void Load(IController hud)
  70.     {
  71.         base.Load(hud);
  72.  
  73.         Arc_Start = 0; // -45
  74.         Arc_End = 135; // 180
  75.         ArcSize = 3.3f;
  76.  
  77.         Brush_BG = Hud.Render.CreateBrush(255, 32, 32, 32, 6, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  78.         Brush_ShieldBG = Hud.Render.CreateBrush(255, 20, 130, 60, 5, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  79.         Brush_Life = Hud.Render.CreateBrush(255, 255, 50, 50, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  80.         Brush_Shield = Hud.Render.CreateBrush(255, 100, 200, 150, 3, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  81.  
  82.         Brush_ResBG = Hud.Render.CreateBrush(128, 255, 255, 255, 6, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  83.         Brush_Mana = Hud.Render.CreateBrush(240, 0, 0, 240, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  84.         Brush_Fury = Hud.Render.CreateBrush(200, 255, 170, 0, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  85.         Brush_Arcane = Hud.Render.CreateBrush(200, 100, 0, 205, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  86.         Brush_Spirit = Hud.Render.CreateBrush(200, 255, 255, 200, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  87.         Brush_Wrath = Hud.Render.CreateBrush(200, 255, 255, 225, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  88.         Brush_Essence = Hud.Render.CreateBrush(200, 100, 175, 175, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  89.         Brush_Hatred = Hud.Render.CreateBrush(200, 180, 0, 0, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  90.         Brush_Disc = Hud.Render.CreateBrush(200, 0, 0, 200, 4, DashStyle.Solid, CapStyle.Round, CapStyle.Round);
  91.  
  92.         HealthFont = Hud.Render.CreateFont("tahoma", 7f, 225, 255, 120, 120, true, false, 160, 0, 0, 0, true);
  93.  
  94.     }
  95.  
  96.     public void Paint(WorldLayer layer, IPlayer player, int start, int end, float size)
  97.     {
  98.         if (player.IsMe) {
  99.  
  100.         if (MeResource) {
  101.             if (player.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
  102.             {
  103.             PaintBackgroundArc(player, -45, 40, 2.6f); PaintResArc(player, -45, 40, 2.6f);      // Hatred
  104.             PaintBackgroundArc(player, 50, end, 2.6f); PaintSecResArc(player, 50, end, 2.6f);   // Disc
  105.             }
  106.             else { PaintBackgroundArc(player, -45, end, 2.6f); PaintResArc(player, -45, end, 2.6f); }
  107.         }
  108.  
  109.         if (MeLife) { PaintBackgroundArc(player, -45, end, 3.3f); PaintLifeArc(player, -45, end, 3.3f); }
  110.         if (MeShield) PaintShieldArc(player, -47, end + 2, 3.6f);
  111.         }
  112.  
  113.         else
  114.         {
  115.  
  116.         if (PlayersResource) {
  117.             if (player.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
  118.             {
  119.             PaintBackgroundArc(player, start, 60, 2.6f); PaintResArc(player, start, 60, 2.6f);  // Hatred
  120.             PaintBackgroundArc(player, 70, end, 2.6f); PaintSecResArc(player, 70, end, 2.6f);   // Disc
  121.             }
  122.             else { PaintBackgroundArc(player, start, end, 2.6f); PaintResArc(player, start, end, 2.6f); }
  123.         }
  124.  
  125.         if (PlayersLife) {
  126.             if (Hud.Game.IsInTown && player.IsOnScreen)
  127.             {                  
  128.             var health = ValueToString(player.Defense.HealthMax, ValueFormat.LongNumber);
  129.             HealthFont.DrawText(HealthFont.GetTextLayout(health), player.FloorCoordinate.ToScreenCoordinate().X - HealthFont.GetTextLayout(health).Metrics.Width * 2, player.FloorCoordinate.ToScreenCoordinate().Y + 5);
  130.             }
  131.             PaintBackgroundArc(player, start, end, 3.3f); PaintLifeArc(player, start, end, 3.3f); }
  132.         if (PlayersShield) PaintShieldArc(player, start - 2, end + 2, 3.6f);
  133.  
  134.  
  135.         }
  136.  
  137.     }
  138.  
  139.     public void PaintBackgroundArc(IPlayer player, int Angle_Start, int Angle_End, float ArcSize)
  140.     {
  141.         if (!player.IsOnScreen) return;
  142.  
  143.         var worldCoord = player.FloorCoordinate;
  144.         var lifeArc = (int)(player.Defense.HealthPct * (Angle_End - Angle_Start) / 100f) + Angle_Start;
  145.  
  146.         using (var pg1 = Hud.Render.CreateGeometry()) {
  147.             using (var gs1 = pg1.Open()) {
  148.                 var mx = ArcSize * (float)Math.Cos(Angle_Start * Math.PI / 180f);
  149.                 var my = ArcSize * (float)Math.Sin(Angle_Start * Math.PI / 180f);
  150.  
  151.                 var screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  152.                 var vector = new Vector2(screenCoord.X, screenCoord.Y);
  153.  
  154.                 gs1.BeginFigure(vector, FigureBegin.Filled);
  155.  
  156.                 for (int angle = Angle_Start + 1; angle <= Angle_End; angle++)
  157.                 {
  158.                     mx = ArcSize * (float)Math.Cos(angle * Math.PI / 180f);
  159.                     my = ArcSize * (float)Math.Sin(angle * Math.PI / 180f);
  160.                     screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  161.                     vector = new Vector2(screenCoord.X, screenCoord.Y);
  162.  
  163.                     gs1.AddLine(vector);
  164.                 }
  165.  
  166.                 gs1.EndFigure(FigureEnd.Open);
  167.                 gs1.Close();
  168.             }
  169.  
  170.             Brush_BG.DrawGeometry(pg1);
  171.         }
  172.     }
  173.  
  174.     public void PaintLifeArc(IPlayer player, int Angle_Start, int Angle_End, float ArcSize)
  175.     {
  176.         if (!player.IsOnScreen) return;
  177.  
  178.         var worldCoord = player.FloorCoordinate;
  179.         var lifeArc = (int)(player.Defense.HealthPct * (Angle_End - Angle_Start) / 100f) + Angle_Start;
  180.  
  181.         using (var pg2 = Hud.Render.CreateGeometry()) {
  182.             using (var gs2 = pg2.Open()) {
  183.                 var mx = ArcSize * (float)Math.Cos(Angle_Start * Math.PI / 180f);
  184.                 var my = ArcSize * (float)Math.Sin(Angle_Start * Math.PI / 180f);
  185.  
  186.                 var screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  187.                 var vector = new Vector2(screenCoord.X, screenCoord.Y);
  188.  
  189.                 gs2.BeginFigure(vector, FigureBegin.Filled);
  190.  
  191.                 for (int angle = Angle_Start + 1; angle <= Angle_End; angle++)
  192.                 {
  193.                     mx = ArcSize * (float)Math.Cos(angle * Math.PI / 180f);
  194.                     my = ArcSize * (float)Math.Sin(angle * Math.PI / 180f);
  195.  
  196.                     screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  197.                     vector = new Vector2(screenCoord.X, screenCoord.Y);
  198.  
  199.                     if (angle <= lifeArc) gs2.AddLine(vector);
  200.                 }
  201.  
  202.                 gs2.EndFigure(FigureEnd.Open);
  203.                 gs2.Close();
  204.             }
  205.  
  206.             Brush_Life.DrawGeometry(pg2);
  207.         }
  208.     }
  209.  
  210.     public void PaintShieldArc(IPlayer player, int Angle_Start, int Angle_End, float ArcSize)
  211.     {
  212.         if (!player.IsOnScreen) return;
  213.  
  214.         var worldCoord = player.FloorCoordinate;
  215.         var lifeArc = (int)((player.Defense.CurShield / player.Defense.HealthMax * 100f) * (Angle_End - Angle_Start) / 100f) + Angle_Start;
  216.  
  217.         using (var pg3 = Hud.Render.CreateGeometry()) {
  218.             using (var gs3 = pg3.Open()) {
  219.                 var mx = ArcSize * (float)Math.Cos(Angle_Start * Math.PI / 180f);
  220.                 var my = ArcSize * (float)Math.Sin(Angle_Start * Math.PI / 180f);
  221.  
  222.                 var screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  223.                 var vector = new Vector2(screenCoord.X, screenCoord.Y);
  224.  
  225.                 gs3.BeginFigure(vector, FigureBegin.Filled);
  226.  
  227.                 for (int angle = Angle_Start + 1; angle <= Angle_End; angle++)
  228.                 {
  229.                     mx = ArcSize * (float)Math.Cos(angle * Math.PI / 180f);
  230.                     my = ArcSize * (float)Math.Sin(angle * Math.PI / 180f);
  231.  
  232.                     screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  233.                     vector = new Vector2(screenCoord.X, screenCoord.Y);
  234.  
  235.                     if (angle <= lifeArc) gs3.AddLine(vector);
  236.                 }
  237.  
  238.                 gs3.EndFigure(FigureEnd.Open);
  239.                 gs3.Close();
  240.             }
  241.  
  242.             Brush_ShieldBG.DrawGeometry(pg3); Brush_Shield.DrawGeometry(pg3);
  243.         }
  244.     }
  245.  
  246.     public void PaintResArc(IPlayer player, int Angle_Start, int Angle_End, float ArcSize)
  247.     {
  248.         if (!player.IsOnScreen) return;
  249.  
  250.         var worldCoord = player.FloorCoordinate;
  251.         var resArc = (int)(player.Stats.ResourcePctPri * (Angle_End - Angle_Start) / 100f) + Angle_Start;
  252.  
  253.         using (var pg3 = Hud.Render.CreateGeometry()) {
  254.             using (var gs3 = pg3.Open()) {
  255.                 var mx = ArcSize * (float)Math.Cos(Angle_Start * Math.PI / 180f);
  256.                 var my = ArcSize * (float)Math.Sin(Angle_Start * Math.PI / 180f);
  257.  
  258.                 var screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  259.                 var vector = new Vector2(screenCoord.X, screenCoord.Y);
  260.  
  261.                 gs3.BeginFigure(vector, FigureBegin.Filled);
  262.  
  263.                 for (int angle = Angle_Start + 1; angle <= Angle_End; angle++)
  264.                 {
  265.                     mx = ArcSize * (float)Math.Cos(angle * Math.PI / 180f);
  266.                     my = ArcSize * (float)Math.Sin(angle * Math.PI / 180f);
  267.  
  268.                     screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  269.                     vector = new Vector2(screenCoord.X, screenCoord.Y);
  270.  
  271.                     if (angle <= resArc) gs3.AddLine(vector);
  272.                 }
  273.  
  274.                 gs3.EndFigure(FigureEnd.Open);
  275.                 gs3.Close();
  276.             }
  277.  
  278.             Brush_BG.DrawGeometry(pg3);
  279.  
  280.                     switch (player.HeroClassDefinition.HeroClass)
  281.                     {
  282.             case HeroClass.Wizard:
  283.                 Brush_ResBG.DrawGeometry(pg3); Brush_Arcane.DrawGeometry(pg3);
  284.                             break;
  285.             case HeroClass.WitchDoctor:
  286.                 Brush_ResBG.DrawGeometry(pg3); Brush_Mana.DrawGeometry(pg3);
  287.                             break;
  288.             case HeroClass.Barbarian:
  289.                 Brush_Fury.DrawGeometry(pg3);
  290.                             break;
  291.             case HeroClass.Crusader:
  292.                 Brush_Wrath.DrawGeometry(pg3);
  293.                             break;
  294.             case HeroClass.Monk:
  295.                 Brush_Spirit.DrawGeometry(pg3);
  296.                             break;
  297.             case HeroClass.Necromancer:
  298.                 Brush_Essence.DrawGeometry(pg3);
  299.                             break;
  300.             case HeroClass.DemonHunter:
  301.                 Brush_ResBG.DrawGeometry(pg3); Brush_Hatred.DrawGeometry(pg3);
  302.                             break;
  303.             }
  304.  
  305.         }
  306.     }
  307.  
  308.     public void PaintSecResArc(IPlayer player, int Angle_Start, int Angle_End, float ArcSize)
  309.     {
  310.         if (!player.IsOnScreen) return;
  311.  
  312.         var worldCoord = player.FloorCoordinate;
  313.         var resArc = (int)(player.Stats.ResourcePctSec * (Angle_End - Angle_Start) / 100f) + Angle_Start;
  314.  
  315.         using (var pg3 = Hud.Render.CreateGeometry()) {
  316.             using (var gs3 = pg3.Open()) {
  317.                 var mx = ArcSize * (float)Math.Cos(Angle_Start * Math.PI / 180f);
  318.                 var my = ArcSize * (float)Math.Sin(Angle_Start * Math.PI / 180f);
  319.  
  320.                 var screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  321.                 var vector = new Vector2(screenCoord.X, screenCoord.Y);
  322.  
  323.                 gs3.BeginFigure(vector, FigureBegin.Filled);
  324.  
  325.                 for (int angle = Angle_Start + 1; angle <= Angle_End; angle++)
  326.                 {
  327.                     mx = ArcSize * (float)Math.Cos(angle * Math.PI / 180f);
  328.                     my = ArcSize * (float)Math.Sin(angle * Math.PI / 180f);
  329.  
  330.                     screenCoord = worldCoord.Offset(mx, my, 0).ToScreenCoordinate(true);
  331.                     vector = new Vector2(screenCoord.X, screenCoord.Y);
  332.  
  333.                     if (angle <= resArc) gs3.AddLine(vector);
  334.                 }
  335.  
  336.                 gs3.EndFigure(FigureEnd.Open);
  337.                 gs3.Close();
  338.             }
  339.  
  340.             Brush_BG.DrawGeometry(pg3); Brush_ResBG.DrawGeometry(pg3); Brush_Disc.DrawGeometry(pg3);
  341.  
  342.         }
  343.     }
  344.  
  345.     }
  346. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement