Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void atDoorWalkTo(int doorX, int doorY, int atDoorX, int atDoorY, int walkX, int walkY, int random, boolean useDoor) {
- if(reachable(walkX, walkY)) {
- myWalkTo(walkX + ((random(0,1) == 1 ? -1 : 1) * random(0, random)), walkY + ((random(0,1) == 1 ? -1 : 1) * random(0, random)));
- waitWhileMoving(walkX, walkY, 1, random(800, 1250));
- } else if(reachable(atDoorX, atDoorY)) {
- if(distanceTo(getX(), getY(), atDoorX, atDoorY) < 5){
- if(useDoor) {
- useDoor(doorX, doorY);
- }
- else {
- useObject(doorX, doorY);
- }
- }
- else myWalkTo(atDoorX, atDoorY);
- waitWhileMoving(atDoorX, atDoorY, 0, 1500);
- wait(random(1000, 2000));
- } else {
- stop("Somethings wrong... cannot reach the door.");
- }
- }
- public boolean waitWhileMoving(int destinationX, int destinationY, int killDistance, int killTime) {
- long start = System.currentTimeMillis();
- int curX = getX();
- int curY = getY();
- while(System.currentTimeMillis() - start < killTime) {
- if(distanceTo(getX(), getY(), destinationX, destinationY) <= killDistance) {
- return true;
- } else {
- if(getX() != curX || getY() != curY) {
- start = System.currentTimeMillis();
- curX = getX();
- curY = getY();
- }
- }
- wait(random(100, 250));
- }
- return false;
- }
- public void myWalkTo(int x, int y) {
- if(areaAroundReachable(x, y)) {
- if(distanceTo(getX(), getY(), x, y) < 4)
- walkTo(x, y);
- else {
- int tempX = x + ((random(0,1) == 1 ? -1 : 1) * random(0, (distanceTo(getX(), getY(), x, y) > 4 ? 2 : 1)));
- int tempY = y + ((random(0,1) == 1 ? -1 : 1) * random(0, (distanceTo(getX(), getY(), x, y) > 4 ? 2 : 1)));
- if(reachable(tempX, tempY)) {
- walkTo(tempX, tempY);
- } else {
- int[] reachableCoords = getAreaAroundReachable(x, y);
- if(reachableCoords[0] != -1)
- walkTo(reachableCoords[0], reachableCoords[1]);
- else stop("I am so stinking lost...");
- }
- }
- } else {
- stop("unreachable walking point (" + x + "," + y + ")");
- }
- }
- public boolean areaAroundReachable(int x, int y) {
- if(reachable(x, y))
- return true;
- else if(reachable(x + 1, y)) {
- return true;
- }
- else if(reachable(x - 1, y)) {
- return true;
- }
- else if(reachable(x, y + 1)) {
- return true;
- }
- else if(reachable(x, y - 1)) {
- return true;
- }
- else if(reachable(x + 1, y + 1)) {
- return true;
- }
- else if(reachable(x - 1, y - 1)) {
- return true;
- }
- else if(reachable(x + 1, y - 1)) {
- return true;
- }
- else if(reachable(x - 1, y + 1)) {
- return true;
- }
- else return false;
- }
- public int[] getAreaAroundReachable(int x, int y) {
- int[] temp = new int[2];
- temp[0] = -1;
- temp[1] = -1;
- int c = 0;
- int random = random(0, 8);
- while(c < 8) {
- switch (random) {
- case 0:
- if(reachable(x, y)) {
- temp[0] = x;
- temp[1] = y;
- }
- break;
- case 1:
- if(reachable(x + 1, y)) {
- temp[0] = x + 1;
- temp[1] = y;
- }
- break;
- case 2:
- if(reachable(x - 1, y)) {
- temp[0] = x - 1;
- temp[1] = y;
- }
- break;
- case 3:
- if(reachable(x, y + 1)) {
- temp[0] = x;
- temp[1] = y + 1;
- }
- break;
- case 4:
- if(reachable(x, y - 1)) {
- temp[0] = x;
- temp[1] = y - 1;
- }
- break;
- case 5:
- if(reachable(x + 1, y + 1)) {
- temp[0] = x + 1;
- temp[1] = y + 1;
- }
- break;
- case 6:
- if(reachable(x - 1, y - 1)) {
- temp[0] = x - 1;
- temp[1] = y - 1;
- }
- break;
- case 7:
- if(reachable(x + 1, y - 1)) {
- temp[0] = x + 1;
- temp[1] = y - 1;
- }
- break;
- case 8:
- if(reachable(x - 1, y + 1)) {
- temp[0] = x - 1;
- temp[1] = y + 1;
- }
- break;
- }
- random++;
- if(random > 8)
- random = 0;
- c++;
- }
- return temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement