Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.12 KB | None | 0 0
  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 npc : npcMap.keySet())
  125. {
  126. int ticksLeft = npcMap.get(npc);
  127. if (ticksLeft > -1) {
  128. if (ticksLeft <= 6) {
  129. Color color = new Color(255, 255,0 ,180);
  130. int outlineWidth = 2;
  131. int outlineAlpha = 150;
  132. renderNpcOverlay(graphics, npc, color, outlineWidth, outlineAlpha, 0);
  133. }
  134. }
  135. }
  136. }
  137. }
  138.  
  139. if (plugin.isRunSotetseg())
  140. {
  141. if (config.SotetsegMaze1())
  142. {
  143. int i = 1;
  144. for (GroundObject o : plugin.getRedTiles().keySet())
  145. {
  146. Polygon poly = o.getCanvasTilePoly();
  147. if (poly != null)
  148. {
  149. graphics.setColor(Color.WHITE);
  150. graphics.setStroke(new BasicStroke(2));
  151. graphics.draw(poly);
  152. }
  153. Point textLocation = o.getCanvasTextLocation(graphics, String.valueOf(i), 0);
  154. if (textLocation != null)
  155. {
  156. OverlayUtil.renderTextLocation(graphics, textLocation, String.valueOf(i), Color.WHITE);
  157. }
  158.  
  159. i++;
  160. }
  161. }
  162.  
  163. if (config.SotetsegMaze2())
  164. {
  165. for (WorldPoint p : plugin.getRedTilesOverworld())
  166. {
  167. drawTile(graphics, p, Color.WHITE, 2, 255, 10);
  168. }
  169. }
  170. }
  171.  
  172.  
  173. if (plugin.isRunXarpus())
  174. {
  175. NPC boss = plugin.getXarpus_NPC();
  176.  
  177. if (boss.getId() == NpcID.XARPUS_8340 && !plugin.isXarpus_Stare() && config.XarpusTick())
  178. {
  179. int tick = plugin.getXarpus_TicksUntilShoot();
  180. if (tick < 1)
  181. {
  182. tick = tick % 4 + 4;
  183. }
  184. final String ticksLeftStr = String.valueOf(tick);
  185. Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftStr, 130);
  186. renderTextLocation(graphics, ticksLeftStr, 12, Font.BOLD, Color.WHITE, canvasPoint);
  187. }
  188. if (boss.getId() == NpcID.XARPUS_8339 && config.XarpusExhumed())
  189. {
  190. for (GroundObject o : plugin.getXarpus_Exhumeds().keySet())
  191. {
  192. Polygon poly = o.getCanvasTilePoly();
  193. if (poly != null)
  194. {
  195. graphics.setColor(new Color(0, 255, 0, 130));
  196. graphics.setStroke(new BasicStroke(1));
  197. graphics.draw(poly);
  198. }
  199. }
  200. }
  201. }
  202.  
  203.  
  204. if (plugin.isRunVerzik())
  205. {
  206. if (config.VerzikCupcakes())
  207. {
  208. for (WorldPoint p : plugin.getVerzik_RangeProjectiles().values())
  209. {
  210. drawTile(graphics, p, Color.RED, 2, 180, 50);
  211. }
  212. }
  213.  
  214. if (config.VerzikYellow())
  215. {
  216. for (WorldPoint p : plugin.getVerzik_YellowTiles())
  217. {
  218. drawTile(graphics, p, Color.YELLOW,3,255,0);
  219.  
  220. Projectile yellowBall = plugin.getVerzik_YellowBall();
  221. if (yellowBall != null)
  222. {
  223. final int ticksToImpact = yellowBall.getRemainingCycles()/30;
  224. final String countdownStr = String.valueOf(ticksToImpact);
  225. Point canvasPoint = Perspective.getCanvasTextLocation(client, graphics, LocalPoint.fromWorld(client, p), countdownStr, 0);
  226. renderTextLocation(graphics, countdownStr, 12, Font.BOLD, Color.WHITE, canvasPoint);
  227. }
  228. }
  229. }
  230. final NPC boss2 = plugin.getVerzik_NPC();
  231. if (boss2.getId() == NpcID.VERZIK_VITUR_8370)
  232. {
  233. if (config.VerzikTick()){
  234. final int ticksLefts = plugin.getP1_TicksUntilAttack();
  235. if (ticksLefts > 0 && ticksLefts < 10)
  236. {
  237. final String ticksLeftsStr = String.valueOf(ticksLefts);
  238. Point canvasPoints = boss2.getCanvasTextLocation(graphics, ticksLeftsStr, 60);
  239. renderTextLocation(graphics, ticksLeftsStr, 15, Font.BOLD, Color.WHITE, canvasPoints);
  240. }
  241. }
  242. }
  243. final NPC boss = plugin.getVerzik_NPC();
  244.  
  245. if (boss.getId() == NpcID.VERZIK_VITUR_8374)
  246. {
  247.  
  248. if (config.VerzikTick())
  249. {
  250. final int yellowticksLeft = plugin.getP3_YellowTicksUntilAttack();
  251. if (yellowticksLeft > 0 && yellowticksLeft < 13);
  252. {
  253. final String Yellowticksleftstr = String.valueOf(yellowticksLeft);
  254. Point CanvasPoint = boss.getCanvasTextLocation(graphics, Yellowticksleftstr, 60);
  255. renderTextLocation(graphics, Yellowticksleftstr, 15, Font.BOLD, Color.WHITE, CanvasPoint);
  256. }
  257. final int ticksLeft = plugin.getP3_TicksUntilAttack();
  258. if (ticksLeft > 0 && ticksLeft < 8)
  259. {
  260. final String ticksLeftStr = String.valueOf(ticksLeft);
  261. Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftStr, 60);
  262. renderTextLocation(graphics, ticksLeftStr, 15, Font.BOLD, Color.WHITE, canvasPoint);
  263.  
  264. }
  265.  
  266. }
  267.  
  268. if (config.VerzikMelee() && boss.getAnimation() != 8127)
  269. {
  270. List<WorldPoint> meleeRange = getHitSquares(boss.getWorldLocation(), 7, 1, false);
  271.  
  272. for (WorldPoint p : meleeRange)
  273. {
  274. drawTile(graphics, p, Color.WHITE, 1,155, 10);
  275. }
  276. }
  277. }
  278.  
  279. }
  280.  
  281. return null;
  282. }
  283.  
  284. private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha) {
  285. WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
  286. if (point.distanceTo(playerLocation) >= 32) {
  287. return;
  288. }
  289. LocalPoint lp = LocalPoint.fromWorld(client, point);
  290. if (lp == null) {
  291. return;
  292. }
  293.  
  294. Polygon poly = Perspective.getCanvasTilePoly(client, lp);
  295. if (poly == null) {
  296. return;
  297. }
  298. //OverlayUtil.renderPolygon(graphics, poly, color);
  299. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  300. graphics.setStroke(new BasicStroke(strokeWidth));
  301. graphics.draw(poly);
  302. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  303. graphics.fill(poly);
  304. }
  305.  
  306. private void renderNpcOverlay(Graphics2D graphics, NPC actor, Color color, int outlineWidth, int outlineAlpha, int fillAlpha)
  307. {
  308. int size = 1;
  309. NPCComposition composition = actor.getTransformedComposition();
  310. if (composition != null)
  311. {
  312. size = composition.getSize();
  313. }
  314. LocalPoint lp = actor.getLocalLocation();
  315. Polygon tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
  316.  
  317. if (tilePoly != null)
  318. {
  319. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  320. graphics.setStroke(new BasicStroke(outlineWidth));
  321. graphics.draw(tilePoly);
  322. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  323. graphics.fill(tilePoly);
  324. }
  325. }
  326.  
  327. private void renderTextLocation(Graphics2D graphics, String txtString, int fontSize, int fontStyle, Color fontColor, Point canvasPoint)
  328. {
  329. graphics.setFont(new Font("Arial", fontStyle, fontSize));
  330. if (canvasPoint != null)
  331. {
  332. final Point canvasCenterPoint = new Point(
  333. canvasPoint.getX(),
  334. canvasPoint.getY());
  335. final Point canvasCenterPoint_shadow = new Point(
  336. canvasPoint.getX() + 1,
  337. canvasPoint.getY() + 1) ;
  338. OverlayUtil.renderTextLocation(graphics, canvasCenterPoint_shadow, txtString, Color.BLACK);
  339. OverlayUtil.renderTextLocation(graphics, canvasCenterPoint, txtString, fontColor);
  340. }
  341. }
  342.  
  343. private List<WorldPoint> getHitSquares(WorldPoint npcLoc, int npcSize, int thickness, boolean includeUnder)
  344. {
  345. List<WorldPoint> little = new WorldArea(npcLoc, npcSize, npcSize).toWorldPointList();
  346. List<WorldPoint> big = new WorldArea(npcLoc.getX()-thickness, npcLoc.getY()-thickness, npcSize + (thickness * 2), npcSize + (thickness * 2), npcLoc.getPlane()).toWorldPointList();
  347. if (!includeUnder)
  348. {
  349. for (Iterator<WorldPoint> it = big.iterator(); it.hasNext();)
  350. {
  351. WorldPoint p = it.next();
  352. if (little.contains(p))
  353. {
  354. it.remove();
  355. }
  356. }
  357. }
  358. return big;
  359. }
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement