SHARE
TWEET

Untitled

a guest Mar 24th, 2019 111 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * THIS SOFTWARE WRITTEN BY A KEYBOARD-WIELDING MONKEY BOI
  3.  * No rights reserved. Use, redistribute, and modify at your own discretion,
  4.  * and in accordance with Yagex and RuneLite guidelines.
  5.  * However, aforementioned monkey would prefer if you don't sell this plugin for profit.
  6.  * Good luck on your raids!
  7.  */
  8.  
  9. package net.runelite.client.plugins.ztob;
  10.  
  11. import java.awt.BasicStroke;
  12. import java.awt.Color;
  13. import java.awt.Font;
  14. import java.awt.Polygon;
  15. import java.awt.Dimension;
  16. import java.awt.Graphics2D;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.Iterator;
  20. import javax.inject.Inject;
  21. import net.runelite.api.Point;
  22. import net.runelite.api.coords.LocalPoint;
  23. import net.runelite.api.coords.WorldArea;
  24. import net.runelite.api.coords.WorldPoint;
  25. import net.runelite.api.NPC;
  26. import net.runelite.api.NpcID;
  27. import net.runelite.api.NPCComposition;
  28. import net.runelite.api.Projectile;
  29. import net.runelite.api.Client;
  30. import net.runelite.api.GroundObject;
  31. import net.runelite.api.Perspective;
  32. import net.runelite.client.ui.overlay.Overlay;
  33. import net.runelite.client.ui.overlay.OverlayLayer;
  34. import net.runelite.client.ui.overlay.OverlayPosition;
  35. import net.runelite.client.ui.overlay.OverlayPriority;
  36. import net.runelite.client.ui.overlay.OverlayUtil;
  37.  
  38. public class TheatreOverlay extends Overlay {
  39.     private final Client client;
  40.     private final TheatrePlugin plugin;
  41.     private final TheatreConfig config;
  42.  
  43.     @Inject
  44.     private TheatreOverlay(Client client, TheatrePlugin plugin, TheatreConfig config) {
  45.         this.client = client;
  46.         this.plugin = plugin;
  47.         this.config = config;
  48.         setPosition(OverlayPosition.DYNAMIC);
  49.         setPriority(OverlayPriority.HIGH);
  50.         setLayer(OverlayLayer.ABOVE_SCENE);
  51.     }
  52.  
  53.     @Override
  54.     public Dimension render(Graphics2D graphics)
  55.     {
  56.         if (plugin.isRunMaiden())
  57.         {
  58.             if (config.MaidenBlood())
  59.             {
  60.                 for (WorldPoint point : plugin.getMaiden_BloodSpatters())
  61.                 {
  62.                     drawTile(graphics, point, new Color(0,150,200), 2, 150, 10);
  63.                 }
  64.             }
  65.  
  66.             if (config.MaidenSpawns())
  67.             {
  68.                 for (WorldPoint point : plugin.getMaiden_SpawnLocations())
  69.                 {
  70.                     drawTile(graphics, point, new Color(0,150,200), 2, 180, 20);
  71.                 }
  72.                 for (WorldPoint point : plugin.getMaiden_SpawnLocations2())
  73.                 {
  74.                     drawTile(graphics, point, new Color(0,150,200), 1,120, 10);
  75.                 }
  76.             }
  77.         }
  78.  
  79.         if (plugin.isRunBloat() && config.BloatIndicator())
  80.         {
  81.             NPC bloat = plugin.getBloat_NPC();
  82.             int state = plugin.getBloat_State();
  83.             if (bloat == null)
  84.             {
  85.                 return null;
  86.             }
  87.             switch (state)
  88.             {
  89.                 case 2:
  90.                     renderNpcOverlay(graphics, bloat, Color.GREEN, 3, 150, 0);
  91.                     break;
  92.                 case 3:
  93.                     renderNpcOverlay(graphics, bloat, Color.YELLOW, 3, 150, 0);
  94.                     break;
  95.                 default:
  96.                     renderNpcOverlay(graphics, bloat, new Color(223, 109, 255), 3, 150, 0);
  97.                     break;
  98.             }
  99.         }
  100.  
  101.         if (plugin.isRunNylocas())
  102.         {
  103.             if (config.NyloPillars())
  104.             {
  105.                 Map<NPC, Integer> pillars = plugin.getNylocas_Pillars();
  106.                 for (NPC npc : pillars.keySet()) {
  107.                     final int health = pillars.get(npc);
  108.                     final String healthStr = String.valueOf(health) + "%";
  109.                     WorldPoint p = npc.getWorldLocation();
  110.                     LocalPoint lp = LocalPoint.fromWorld(client, p.getX() + 1, p.getY() + 1);
  111.                     final double rMod = 130.0 * health / 100.0;
  112.                     final double gMod = 255.0 * health / 100.0;
  113.                     final double bMod = 125.0 * health / 100.0;
  114.                     final Color c = new Color((int) (255 - rMod), (int) (0 + gMod), (int) (0 + bMod));
  115.                     Point canvasPoint = Perspective.localToCanvas(client, lp, client.getPlane(),
  116.                             65);
  117.                     renderTextLocation(graphics, healthStr, 13, Font.BOLD, c, canvasPoint);
  118.                 }
  119.             }
  120.  
  121.             if (config.NyloBlasts())
  122.             {
  123.                 final Map<NPC, Integer> npcMap = plugin.getNylocas_Map();
  124.                 for (NPC RangeCrab : client.getNpcs()) {
  125.                     if (RangeCrab.getId() == 8343 || RangeCrab.getId() == 8346) {
  126.                         if (plugin.getHighlightRangeCrabcolor() == "range") {
  127.                             Color color = new Color(0, 255, 0, 180);
  128.                             int outlineWidth = 2;
  129.                             int outlineAlpha = 150;
  130.                             renderNpcOverlay(graphics, RangeCrab, color, outlineWidth, outlineAlpha, 5);
  131.                         }
  132.                     }
  133.                 }
  134.                 for (NPC MageCrab : client.getNpcs()) {
  135.                     if (MageCrab.getId() == 8344 || MageCrab.getId() == 8347) {
  136.                         if (plugin.getHighlightMageCrabcolor() == "mage") {
  137.                             Color color = new Color(0, 0, 255, 180);
  138.                             int outlineWidth = 2;
  139.                             int outlineAlpha = 150;
  140.                             renderNpcOverlay(graphics, MageCrab, color, outlineWidth, outlineAlpha, 5);
  141.                         }
  142.                     }
  143.                 }
  144.                 for (NPC MeleeCrab : client.getNpcs()) {
  145.                     if (MeleeCrab.getId() == 8342 || MeleeCrab.getId() == 8345 || MeleeCrab.getId() == 8351 ){
  146.                         if (plugin.getHighlightMeleeCrabcolor() == "melee") {
  147.                             Color color = new Color(255, 0, 0, 180);
  148.                             int outlineWidth = 2;
  149.                             int outlineAlpha = 150;
  150.                             renderNpcOverlay(graphics, MeleeCrab, color, outlineWidth, outlineAlpha, 5);
  151.                         }
  152.                     }
  153.                 }
  154.  
  155.  
  156.                 for (NPC npc : npcMap.keySet())
  157.                 {
  158.                     int ticksLeft = npcMap.get(npc);
  159.                     if (ticksLeft > -1) {
  160.                         if (ticksLeft <= 6) {
  161.                             Color color = new Color(255, 255,0 ,180);
  162.                             int outlineWidth = 2;
  163.                             int outlineAlpha = 150;
  164.                             renderNpcOverlay(graphics, npc, color, outlineWidth, outlineAlpha, 0);
  165.                         }
  166.                     }
  167.                 }
  168.             }
  169.         }
  170.  
  171.         if (plugin.isRunSotetseg())
  172.         {
  173.             if (config.SotetsegMaze1())
  174.             {
  175.                 int i = 1;
  176.                 for (GroundObject o : plugin.getRedTiles().keySet())
  177.                 {
  178.                     Polygon poly = o.getCanvasTilePoly();
  179.                     if (poly != null)
  180.                     {
  181.                         graphics.setColor(Color.WHITE);
  182.                         graphics.setStroke(new BasicStroke(2));
  183.                         graphics.draw(poly);
  184.                     }
  185.                     Point textLocation = o.getCanvasTextLocation(graphics, String.valueOf(i), 0);
  186.                     if (textLocation != null)
  187.                     {
  188.                         OverlayUtil.renderTextLocation(graphics, textLocation, String.valueOf(i), Color.WHITE);
  189.                     }
  190.  
  191.                     i++;
  192.                 }
  193.             }
  194.  
  195.             if (config.SotetsegMaze2())
  196.             {
  197.                 for (WorldPoint p : plugin.getRedTilesOverworld())
  198.                 {
  199.                     drawTile(graphics, p, Color.WHITE, 2, 255, 10);
  200.                 }
  201.             }
  202.         }
  203.  
  204.  
  205.         if (plugin.isRunXarpus())
  206.         {
  207.             NPC boss = plugin.getXarpus_NPC();
  208.  
  209.             if (boss.getId() == NpcID.XARPUS_8340 && !plugin.isXarpus_Stare() && config.XarpusTick())
  210.             {
  211.                 int tick = plugin.getXarpus_TicksUntilShoot();
  212.                 if (tick < 1)
  213.                 {
  214.                     tick = tick % 4 + 4;
  215.                 }
  216.                 final String ticksLeftStr = String.valueOf(tick);
  217.                 Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftStr, 130);
  218.                 renderTextLocation(graphics, ticksLeftStr, 12, Font.BOLD, Color.WHITE, canvasPoint);
  219.             }
  220.             if (boss.getId() == NpcID.XARPUS_8339 && config.XarpusExhumed())
  221.             {
  222.                 for (GroundObject o : plugin.getXarpus_Exhumeds().keySet())
  223.                 {
  224.                     Polygon poly = o.getCanvasTilePoly();
  225.                     if (poly != null)
  226.                     {
  227.                         graphics.setColor(new Color(0, 255, 0, 130));
  228.                         graphics.setStroke(new BasicStroke(1));
  229.                         graphics.draw(poly);
  230.                     }
  231.                 }
  232.             }
  233.         }
  234.        
  235.  
  236.         if (plugin.isRunVerzik())
  237.         {
  238.             if (config.VerzikCupcakes())
  239.             {
  240.                 for (WorldPoint p : plugin.getVerzik_RangeProjectiles().values())
  241.                 {
  242.                     drawTile(graphics, p, Color.RED, 2, 180, 50);
  243.                 }
  244.             }
  245.  
  246.             if (config.VerzikYellow())
  247.             {
  248.                 for (WorldPoint p : plugin.getVerzik_YellowTiles())
  249.                 {
  250.                     drawTile(graphics, p, Color.YELLOW,3,255,0);
  251.  
  252.                     Projectile yellowBall = plugin.getVerzik_YellowBall();
  253.                     final int yellowticksLeft = plugin.getP3_YellowTicksUntilAttack();
  254.  
  255.                     if (yellowticksLeft != -1)
  256.                     {
  257.                         final String Yellowticksleftstr = String.valueOf(yellowticksLeft);
  258.                         Point canvasPoint = Perspective.getCanvasTextLocation(client, graphics, LocalPoint.fromWorld(client, p), Yellowticksleftstr, 0);
  259.                         renderTextLocation(graphics, Yellowticksleftstr, 12, Font.BOLD, Color.WHITE, canvasPoint);
  260.                     }
  261.                 }
  262.             }
  263.             final NPC boss2 = plugin.getVerzik_NPC();
  264.             if (boss2.getId() == NpcID.VERZIK_VITUR_8370)
  265.             {
  266.                 if (config.VerzikTick()){
  267.                     final int ticksLefts = plugin.getP1_TicksUntilAttack();
  268.                     if (ticksLefts > 0 && ticksLefts < 10)
  269.                     {
  270.                         final String ticksLeftsStr = String.valueOf(ticksLefts);
  271.                         Point canvasPoints = boss2.getCanvasTextLocation(graphics, ticksLeftsStr,  60);
  272.                         renderTextLocation(graphics, ticksLeftsStr, 15, Font.BOLD, Color.WHITE, canvasPoints);
  273.                     }
  274.                 }
  275.             }
  276.             final NPC boss = plugin.getVerzik_NPC();
  277.  
  278.             if (boss.getId() == NpcID.VERZIK_VITUR_8374)
  279.             {
  280.  
  281.                 if (config.VerzikTick())
  282.                 {
  283.                     final int yellowticksLeft = plugin.getP3_YellowTicksUntilAttack();
  284.                     if (yellowticksLeft > 0 && yellowticksLeft < 13);
  285.                     {
  286.                         final String Yellowticksleftstr = String.valueOf(yellowticksLeft);
  287.                     }
  288.                     final int ticksLeft = plugin.getP3_TicksUntilAttack();
  289.                     if (ticksLeft > 0 && ticksLeft < 8)
  290.                     {
  291.                         final String ticksLeftStr = String.valueOf(ticksLeft);
  292.                         Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftStr, 60);
  293.                         renderTextLocation(graphics, ticksLeftStr, 15, Font.BOLD, Color.WHITE, canvasPoint);
  294.  
  295.                     }
  296.  
  297.                 }
  298.  
  299.                 if (config.VerzikMelee() && boss.getAnimation() != 8127)
  300.                 {
  301.                     List<WorldPoint> meleeRange = getHitSquares(boss.getWorldLocation(), 7, 1, false);
  302.  
  303.                     for (WorldPoint p : meleeRange)
  304.                     {
  305.                         drawTile(graphics, p, Color.WHITE, 1,155, 10);
  306.                     }
  307.                 }
  308.             }
  309.  
  310.         }
  311.  
  312.         return null;
  313.     }
  314.  
  315.     private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha) {
  316.         WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
  317.         if (point.distanceTo(playerLocation) >= 32) {
  318.             return;
  319.         }
  320.         LocalPoint lp = LocalPoint.fromWorld(client, point);
  321.         if (lp == null) {
  322.             return;
  323.         }
  324.  
  325.         Polygon poly = Perspective.getCanvasTilePoly(client, lp);
  326.         if (poly == null) {
  327.             return;
  328.         }
  329.         //OverlayUtil.renderPolygon(graphics, poly, color);
  330.         graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  331.         graphics.setStroke(new BasicStroke(strokeWidth));
  332.         graphics.draw(poly);
  333.         graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  334.         graphics.fill(poly);
  335.     }
  336.  
  337.     private void renderNpcOverlay(Graphics2D graphics, NPC actor, Color color, int outlineWidth, int outlineAlpha, int fillAlpha)
  338.     {
  339.         int size = 1;
  340.         NPCComposition composition = actor.getTransformedComposition();
  341.         if (composition != null)
  342.         {
  343.             size = composition.getSize();
  344.         }
  345.         LocalPoint lp = actor.getLocalLocation();
  346.         Polygon tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
  347.  
  348.         if (tilePoly != null)
  349.         {
  350.             graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  351.             graphics.setStroke(new BasicStroke(outlineWidth));
  352.             graphics.draw(tilePoly);
  353.             graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  354.             graphics.fill(tilePoly);
  355.         }
  356.     }
  357.  
  358.     private void renderTextLocation(Graphics2D graphics, String txtString, int fontSize, int fontStyle, Color fontColor, Point canvasPoint)
  359.     {
  360.         graphics.setFont(new Font("Arial", fontStyle, fontSize));
  361.         if (canvasPoint != null)
  362.         {
  363.             final Point canvasCenterPoint = new Point(
  364.                     canvasPoint.getX(),
  365.                     canvasPoint.getY());
  366.             final Point canvasCenterPoint_shadow = new Point(
  367.                     canvasPoint.getX() + 1,
  368.                     canvasPoint.getY() + 1) ;
  369.             OverlayUtil.renderTextLocation(graphics, canvasCenterPoint_shadow, txtString, Color.BLACK);
  370.             OverlayUtil.renderTextLocation(graphics, canvasCenterPoint, txtString, fontColor);
  371.         }
  372.     }
  373.  
  374.     private List<WorldPoint> getHitSquares(WorldPoint npcLoc, int npcSize, int thickness, boolean includeUnder)
  375.     {
  376.         List<WorldPoint> little = new WorldArea(npcLoc, npcSize, npcSize).toWorldPointList();
  377.         List<WorldPoint> big = new WorldArea(npcLoc.getX()-thickness, npcLoc.getY()-thickness, npcSize + (thickness * 2), npcSize + (thickness * 2), npcLoc.getPlane()).toWorldPointList();
  378.         if (!includeUnder)
  379.         {
  380.             for (Iterator<WorldPoint> it = big.iterator(); it.hasNext();)
  381.             {
  382.                 WorldPoint p = it.next();
  383.                 if (little.contains(p))
  384.                 {
  385.                     it.remove();
  386.                 }
  387.             }
  388.         }
  389.         return big;
  390.     }
  391. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top