Advertisement
RNNCode

WormHolePlugin

Apr 15th, 2019 (edited)
832
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.25 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using Turbo.Plugins.Default;
  5. using SharpDX;
  6. using SharpDX.Direct2D1;
  7.  
  8. namespace Turbo.Plugins.RNN
  9. {
  10.     public class WormHolePlugin : BasePlugin, INewAreaHandler, IInGameTopPainter
  11.     {
  12.         private Dictionary<uint,int> WormHole { get;set; } = new Dictionary<uint,int>();
  13.         private IBrush BrushBorder { get; set; }
  14.         private IBrush BrushFill { get; set; }
  15.         private IBrush BrushCounter { get; set; }
  16.         private IBrush TimeLeftClockBrush { get; set; }
  17.         private IFont FontText { get; set; }
  18.         private const int duration = 6;
  19.         private const int radius = 8;
  20.         public int radius_countdown { get; set; } = 25;
  21.  
  22.         public WormHolePlugin()
  23.         {
  24.             Enabled = true;
  25.         }
  26.  
  27.         private void DrawTimeLeftClock(RectangleF rect, double elapsed, double timeLeft)   // plugins\Default\BuffLists\Painter\BuffPainter.cs
  28.         {
  29.             if ((timeLeft > 0) && (elapsed >= 0) && (TimeLeftClockBrush != null))
  30.             {
  31.                 var endAngle = Convert.ToInt32(360.0d / (timeLeft + elapsed) * elapsed);
  32.                 var startAngle = 0;
  33.                 TimeLeftClockBrush.Opacity = 1 - (float)(0.5f / (timeLeft + elapsed) * elapsed);
  34.                 var rad = rect.Width; // * 0.45f;
  35.                 using (var pg = Hud.Render.CreateGeometry())
  36.                 {
  37.                     using (var gs = pg.Open())
  38.                     {
  39.                         gs.BeginFigure(rect.Center, FigureBegin.Filled);
  40.                         for (var angle = startAngle; angle <= endAngle; angle++)
  41.                         {
  42.                             var mx = rad * (float)Math.Cos((angle - 90) * Math.PI / 180.0f);
  43.                             var my = rad * (float)Math.Sin((angle - 90) * Math.PI / 180.0f);
  44.                             var vec = new Vector2(rect.Center.X + mx, rect.Center.Y + my);
  45.                             gs.AddLine(vec);
  46.                         }
  47.                         gs.EndFigure(FigureEnd.Closed);
  48.                         gs.Close();
  49.                     }
  50.                     TimeLeftClockBrush.DrawGeometry(pg);
  51.                 }
  52.             }
  53.         }
  54.  
  55.         public override void Load(IController hud)
  56.         {
  57.             base.Load(hud);
  58.             Order = 30949;
  59.  
  60.             BrushBorder = hud.Render.CreateBrush(250, 255, 0, 255, 2);
  61.             BrushFill = hud.Render.CreateBrush(30, 255, 0, 255, 0);
  62.             BrushCounter = hud.Render.CreateBrush(230, 255, 150, 255, 0);
  63.             TimeLeftClockBrush = Hud.Render.CreateBrush(220, 0, 0, 0, 0);
  64.  
  65.             FontText = Hud.Render.CreateFont("tahoma", 9f, 255, 100, 255, 150, true, false, 128, 0, 0, 0, true);
  66.         }
  67.  
  68.         public void OnNewArea(bool newGame, ISnoArea area)
  69.         {
  70.             if (newGame) WormHole.Clear();
  71.         }
  72.  
  73.         public void PaintTopInGame(ClipState clipState)
  74.         {
  75.             if (Hud.Game.IsInTown) return;
  76.             if (clipState != ClipState.BeforeClip) return;
  77.             var actors = Hud.Game.Actors.Where(a => a.SnoActor.Sno == ActorSnoEnum._x1_monsteraffix_teleportmines); // 337109
  78.             foreach (var actor in actors)
  79.             {
  80.                 if (!WormHole.ContainsKey(actor.AnnId)) { WormHole[actor.AnnId] = actor.CreatedAtInGameTick; }
  81.                 BrushBorder.DrawWorldEllipse(radius, -1, actor.FloorCoordinate);
  82.                 BrushFill.DrawWorldEllipse(radius, -1, actor.FloorCoordinate);
  83.                 Hud.Render.GetMinimapCoordinates(actor.FloorCoordinate.X, actor.FloorCoordinate.Y, out var mapX, out var mapY);
  84.                 var r = radius * Hud.Render.MinimapScale;
  85.                 BrushBorder.DrawEllipse(mapX,mapY,r ,r );
  86.  
  87.                 if (actor.IsOnScreen)
  88.                 {
  89.                     var elapsed = (Hud.Game.CurrentGameTick - WormHole[actor.AnnId])/60d;   var timeleft = duration - elapsed;
  90.                     var x = actor.FloorCoordinate.ToScreenCoordinate().X; var y = actor.FloorCoordinate.ToScreenCoordinate().Y;
  91.                     var radiusc = radius_countdown / 1200.0f * Hud.Window.Size.Height;
  92.  
  93.                     BrushCounter.DrawEllipse(x , y , radiusc , radiusc);
  94.                     DrawTimeLeftClock(new RectangleF(x - radiusc/2, y - radiusc/2 , radiusc, radiusc), elapsed , timeleft );
  95.                     var layout = FontText.GetTextLayout( (timeleft < 0)?"0.0":timeleft.ToString((timeleft > 1)?"F0":"F1") );
  96.                     FontText.DrawText(layout, x - layout.Metrics.Width/2 , y - layout.Metrics.Height/2 - 1);
  97.                 }
  98.             }
  99.         }
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement