Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static boolean canReach(final int startX, final int startY,
- final int destX, final int destY, final boolean isObject) {
- // Documentation part:
- // The blocks info
- // When you can walk freely it's 0, also used to create a noclip
- final int[][] via = new int[104][104];
- final int[][] cost = new int[104][104];
- final int[] tileQueueX = new int[4000];
- final int[] tileQueueY = new int[4000];
- for (int xx = 0; xx < 104; xx++) {
- for (int yy = 0; yy < 104; yy++) {
- via[xx][yy] = 0;
- cost[xx][yy] = 99999999;
- }
- }
- int curX = startX;
- int curY = startY;
- via[startX][startY] = 99;
- cost[startX][startY] = 0;
- int head = 0;
- int tail = 0;
- tileQueueX[head] = startX;
- tileQueueY[head] = startY;
- head++;
- final int pathLength = tileQueueX.length;
- final int blocks[][] = Bot.getClient().getGroundDataArray()[Bot
- .getClient().getPlane()].getBlocks();
- while (tail != head) {
- curX = tileQueueX[tail];
- curY = tileQueueY[tail];
- if (!isObject && curX == destX && curY == destY) {
- return true;
- } else if (isObject) {
- if (curX == destX && curY == destY + 1 || curX == destX
- && curY == destY - 1 || curX == destX + 1
- && curY == destY || curX == destX - 1 && curY == destY) {
- return true;
- }
- }
- tail = (tail + 1) % pathLength;
- // Big and ugly block of code
- final int thisCost = cost[curX][curY] + 1;
- // Can go south (by determining, whether the north side of the
- // south tile is blocked :P)
- if (curY > 0 && via[curX][curY - 1] == 0
- && (blocks[curX][curY - 1] & 0x1280102) == 0) {
- tileQueueX[head] = curX;
- tileQueueY[head] = curY - 1;
- head = (head + 1) % pathLength;
- via[curX][curY - 1] = 1;
- cost[curX][curY - 1] = thisCost;
- }
- // Can go west
- if (curX > 0 && via[curX - 1][curY] == 0
- && (blocks[curX - 1][curY] & 0x1280108) == 0) {
- tileQueueX[head] = curX - 1;
- tileQueueY[head] = curY;
- head = (head + 1) % pathLength;
- via[curX - 1][curY] = 2;
- cost[curX - 1][curY] = thisCost;
- }
- // Can go north
- if (curY < 104 - 1 && via[curX][curY + 1] == 0
- && (blocks[curX][curY + 1] & 0x1280120) == 0) {
- tileQueueX[head] = curX;
- tileQueueY[head] = curY + 1;
- head = (head + 1) % pathLength;
- via[curX][curY + 1] = 4;
- cost[curX][curY + 1] = thisCost;
- }
- // Can go east
- if (curX < 104 - 1 && via[curX + 1][curY] == 0
- && (blocks[curX + 1][curY] & 0x1280180) == 0) {
- tileQueueX[head] = curX + 1;
- tileQueueY[head] = curY;
- head = (head + 1) % pathLength;
- via[curX + 1][curY] = 8;
- cost[curX + 1][curY] = thisCost;
- }
- // Can go southwest
- if (curX > 0 && curY > 0 && via[curX - 1][curY - 1] == 0
- && (blocks[curX - 1][curY - 1] & 0x128010e) == 0
- && (blocks[curX - 1][curY] & 0x1280108) == 0
- && (blocks[curX][curY - 1] & 0x1280102) == 0) {
- tileQueueX[head] = curX - 1;
- tileQueueY[head] = curY - 1;
- head = (head + 1) % pathLength;
- via[curX - 1][curY - 1] = 3;
- cost[curX - 1][curY - 1] = thisCost;
- }
- // Can go northwest
- if (curX > 0 && curY < 104 - 1 && via[curX - 1][curY + 1] == 0
- && (blocks[curX - 1][curY + 1] & 0x1280138) == 0
- && (blocks[curX - 1][curY] & 0x1280108) == 0
- && (blocks[curX][curY + 1] & 0x1280120) == 0) {
- tileQueueX[head] = curX - 1;
- tileQueueY[head] = curY + 1;
- head = (head + 1) % pathLength;
- via[curX - 1][curY + 1] = 6;
- cost[curX - 1][curY + 1] = thisCost;
- }
- // Can go southeast
- if (curX < 104 - 1 && curY > 0 && via[curX + 1][curY - 1] == 0
- && (blocks[curX + 1][curY - 1] & 0x1280183) == 0
- && (blocks[curX + 1][curY] & 0x1280180) == 0
- && (blocks[curX][curY - 1] & 0x1280102) == 0) {
- tileQueueX[head] = curX + 1;
- tileQueueY[head] = curY - 1;
- head = (head + 1) % pathLength;
- via[curX + 1][curY - 1] = 9;
- cost[curX + 1][curY - 1] = thisCost;
- }
- // can go northeast
- if (curX < 104 - 1 && curY < 104 - 1
- && via[curX + 1][curY + 1] == 0
- && (blocks[curX + 1][curY + 1] & 0x12801e0) == 0
- && (blocks[curX + 1][curY] & 0x1280180) == 0
- && (blocks[curX][curY + 1] & 0x1280120) == 0) {
- tileQueueX[head] = curX + 1;
- tileQueueY[head] = curY + 1;
- head = (head + 1) % pathLength;
- via[curX + 1][curY + 1] = 12;
- cost[curX + 1][curY + 1] = thisCost;
- }
- }
- return false;
- }
Add Comment
Please, Sign In to add comment