package org.rsbot.event.impl; import org.rsbot.bot.Bot; import org.rsbot.event.listeners.PaintListener; import org.rsbot.script.methods.MethodContext; import org.rsbot.script.wrappers.RSTile; import java.awt.*; public class DrawBoundaries implements PaintListener { private final Point[][] minimapPoints = new Point[105][105]; private final Point[][] screenPoints = new Point[105][105]; private final MethodContext ctx; public DrawBoundaries(final Bot bot) { ctx = bot.getMethodContext(); } public void onRepaint(final Graphics render) { if (!ctx.game.isLoggedIn()) { return; } final int blocks[][] = ctx.client.getRSGroundDataArray()[ctx.client.getPlane()].getBlocks(); final int baseX = ctx.client.getBaseX(); final int baseY = ctx.client.getBaseY(); for (int i = 0; i < screenPoints.length; i++) { for (int j = 0; j < screenPoints[i].length; j++) { final int x = i + baseX - 1; final int y = j + baseY - 1; Point mini = ctx.calc.worldToMinimap(x - 0.5, y - 0.5); if (mini.x == -1 || mini.y == -1) { mini = null; } minimapPoints[i][j] = mini; Point screen = ctx.calc.tileToScreen(new RSTile(x, y), 0, 0, 0); if (screen.x == -1 || screen.y == -1) { screen = null; } screenPoints[i][j] = screen; } } render.setColor(Color.YELLOW); for (int i = 1; i < 104; i++) { for (int j = 1; j < 104; j++) { final int curBlock = blocks[i][j]; final Point miniBL = minimapPoints[i][j]; final Point miniBR = minimapPoints[i][j + 1]; final Point miniTL = minimapPoints[i + 1][j]; final Point miniTR = minimapPoints[i + 1][j + 1]; final Point bl = screenPoints[i][j]; final Point br = screenPoints[i][j + 1]; final Point tl = screenPoints[i + 1][j]; final Point tr = screenPoints[i + 1][j + 1]; if ((curBlock & 0x1280100) != 0) { render.setColor(Color.black); if (tl != null && br != null && tr != null && bl != null) { render.fillPolygon(new int[]{bl.x, br.x, tr.x, tl.x}, new int[]{bl.y, br.y, tr.y, tl.y}, 4); } if (miniBL != null && miniBR != null && miniTR != null && miniTL != null) { render.fillPolygon(new int[]{miniBL.x, miniBR.x, miniTR.x, miniTL.x}, new int[]{miniBL.y, miniBR.y, miniTR.y, miniTL.y}, 4); } } if ((blocks[i][j - 1] & 0x1280102) != 0 || (curBlock & 0x1280120) != 0) { render.setColor(Color.RED); if (tl != null && bl != null) { render.drawLine(bl.x, bl.y, tl.x, tl.y); } if (miniBL != null && miniTL != null) { render.drawLine(miniBL.x, miniBL.y, miniTL.x, miniTL.y); } } if ((blocks[i - 1][j] & 0x1280108) != 0 || (curBlock & 0x1280180) != 0) { render.setColor(Color.RED); if (br != null && bl != null) { render.drawLine(bl.x, bl.y, br.x, br.y); } if (miniBR != null && miniBL != null) { render.drawLine(miniBL.x, miniBL.y, miniBR.x, miniBR.y); } } /* * render.setColor(Color.cyan); if ((curBlock & (1<<20)) != 0) { * if (miniBL != null && miniBR != null && miniTR != null && * miniTL != null) { render.fillPolygon(new * int[]{miniBL.x,miniBR.x,miniTR.x,miniTL.x}, new * int[]{miniBL.y,miniBR.y,miniTR.y,miniTL.y},4); } if (tl != * null && br != null && tr != null && bl != null) { * render.fillPolygon(new int[]{bl.x,br.x,tr.x,tl.x}, new * int[]{bl.y,br.y,tr.y,tl.y},4); } } */ // Point miniCent = Calculations.worldToMinimap(i+ baseX, j+ // baseY); // Point cent = Calculations.tileToScreen(i+ baseX, j+ baseY, // 0.5,0.5, 0); /* * if (cent.x != -1 && cent.y != -1) { * render.setColor(Color.yellow); render.drawString("" + * Calculations.getRealDistanceTo(cur.getX()-baseX, * cur.getY()-baseY, i, j, false), (int)cent.getX(), * (int)cent.getY()); } */ } } final Point mini = ctx.players.getMyPlayer().getMinimapLocation(); render.setColor(Color.red); render.fillRect((int) mini.getX() - 1, (int) mini.getY() - 1, 2, 2); } }