Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.55 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 boss = plugin.getVerzik_NPC();
  231. if (boss.getId() == NpcID.VERZIK_VITUR_8370)
  232. {
  233. if (config.VerzikTick()){
  234. final int ticksLefts = plugin.getP1_TicksUntilAttack();
  235. if (ticksLefts > 0 && ticksLefts < 0)
  236. {
  237. final String ticksLeftsStr = String.valueOf(ticksLefts);
  238. Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftsStr, 60);
  239. renderTextLocation(graphics, ticksLeftsStr, 15, Font.BOLD, Color.WHITE, canvasPoint);
  240. }
  241. }
  242. }
  243. if (boss.getId() == NpcID.VERZIK_VITUR_8374)
  244. {
  245.  
  246. if (config.VerzikTick())
  247. {
  248. final int ticksLeft = plugin.getP3_TicksUntilAttack();
  249. if (ticksLeft > 0 && ticksLeft < 8)
  250. {
  251. final String ticksLeftStr = String.valueOf(ticksLeft);
  252. Point canvasPoint = boss.getCanvasTextLocation(graphics, ticksLeftStr, 60);
  253. renderTextLocation(graphics, ticksLeftStr, 15, Font.BOLD, Color.WHITE, canvasPoint);
  254.  
  255. }
  256.  
  257. }
  258.  
  259. if (config.VerzikMelee() && boss.getAnimation() != 8127)
  260. {
  261. List<WorldPoint> meleeRange = getHitSquares(boss.getWorldLocation(), 7, 1, false);
  262.  
  263. for (WorldPoint p : meleeRange)
  264. {
  265. drawTile(graphics, p, Color.WHITE, 1,155, 10);
  266. }
  267. }
  268. }
  269.  
  270. }
  271.  
  272. return null;
  273. }
  274.  
  275. private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha) {
  276. WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
  277. if (point.distanceTo(playerLocation) >= 32) {
  278. return;
  279. }
  280. LocalPoint lp = LocalPoint.fromWorld(client, point);
  281. if (lp == null) {
  282. return;
  283. }
  284.  
  285. Polygon poly = Perspective.getCanvasTilePoly(client, lp);
  286. if (poly == null) {
  287. return;
  288. }
  289. //OverlayUtil.renderPolygon(graphics, poly, color);
  290. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  291. graphics.setStroke(new BasicStroke(strokeWidth));
  292. graphics.draw(poly);
  293. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  294. graphics.fill(poly);
  295. }
  296.  
  297. private void renderNpcOverlay(Graphics2D graphics, NPC actor, Color color, int outlineWidth, int outlineAlpha, int fillAlpha)
  298. {
  299. int size = 1;
  300. NPCComposition composition = actor.getTransformedComposition();
  301. if (composition != null)
  302. {
  303. size = composition.getSize();
  304. }
  305. LocalPoint lp = actor.getLocalLocation();
  306. Polygon tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
  307.  
  308. if (tilePoly != null)
  309. {
  310. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
  311. graphics.setStroke(new BasicStroke(outlineWidth));
  312. graphics.draw(tilePoly);
  313. graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
  314. graphics.fill(tilePoly);
  315. }
  316. }
  317.  
  318. private void renderTextLocation(Graphics2D graphics, String txtString, int fontSize, int fontStyle, Color fontColor, Point canvasPoint)
  319. {
  320. graphics.setFont(new Font("Arial", fontStyle, fontSize));
  321. if (canvasPoint != null)
  322. {
  323. final Point canvasCenterPoint = new Point(
  324. canvasPoint.getX(),
  325. canvasPoint.getY());
  326. final Point canvasCenterPoint_shadow = new Point(
  327. canvasPoint.getX() + 1,
  328. canvasPoint.getY() + 1) ;
  329. OverlayUtil.renderTextLocation(graphics, canvasCenterPoint_shadow, txtString, Color.BLACK);
  330. OverlayUtil.renderTextLocation(graphics, canvasCenterPoint, txtString, fontColor);
  331. }
  332. }
  333.  
  334. private List<WorldPoint> getHitSquares(WorldPoint npcLoc, int npcSize, int thickness, boolean includeUnder)
  335. {
  336. List<WorldPoint> little = new WorldArea(npcLoc, npcSize, npcSize).toWorldPointList();
  337. List<WorldPoint> big = new WorldArea(npcLoc.getX()-thickness, npcLoc.getY()-thickness, npcSize + (thickness * 2), npcSize + (thickness * 2), npcLoc.getPlane()).toWorldPointList();
  338. if (!includeUnder)
  339. {
  340. for (Iterator<WorldPoint> it = big.iterator(); it.hasNext();)
  341. {
  342. WorldPoint p = it.next();
  343. if (little.contains(p))
  344. {
  345. it.remove();
  346. }
  347. }
  348. }
  349. return big;
  350. }
  351. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement