Package com.mmoscene.h4j.habbohotel.pathfinding

Examples of com.mmoscene.h4j.habbohotel.pathfinding.Position


                    actor.getGoalPosition().setY(0);

                    actor.removeStatus("mv");
                    actor.sendRoomActorStatusMessageComposer();
                } else {
                    Position p = H4J.getHabboHotel().getPathfinder().getNextNode(
                            actor.getCurrentPosition(), actor.getGoalPosition(), actor.getCurrentRoom());

                    int rotation = actor.getCurrentPosition().calculateRotation(p.getX(), p.getY());

                    actor.addStatus("mv", p.getX() + "," + p.getY() + "," + Double.toString(0.0));

                    actor.getCurrentPosition().setRotation(rotation);
                    actor.sendRoomActorStatusMessageComposer();

                    actor.getCurrentPosition().setX(p.getX());
                    actor.getCurrentPosition().setY(p.getY());
                }
                try {
                    Thread.sleep(500);
                } catch(Exception ex) { }
            }
View Full Code Here


                 addAllNeighbors(end, v, room);
             } catch(Exception ignored) {}
         }

        while(v.getX()[v.getParent()[v.location]] != start.getX() || v.getY()[v.getParent()[v.location]] != start.getY()) {
            path.add(new Position(v.getX()[v.location], v.getY()[v.location], 0, 0));
            v.location = v.getParent()[v.location];
        }

        path.add(new Position(v.getX()[v.location], v.getY()[v.location], 0, 0));

        Collections.reverse(path);

        return path;
    }
View Full Code Here

        return path;
    }

    private void addNeighbor(Position start, Position end, Values v, Room r) {
        Position n = new Position(
                v.getX()[v.location] + start.getX(),
                v.getY()[v.location] + start.getY(), 0, 0);

        if (n.getX() < 0 || n.getY() < 0) {
            return;
        }

        short p = v.location;

        if (n.getX() >= r.getModel().getLimitX() || n.getY() >= r.getModel().getLimitY()) { //out of bounds
            return;
        }

        if (r.getModel().getSquareStates()[n.getX()][n.getY()] == 2) { //someone is there?? o.o
            return;
        }

        if (r.getModel().getSquares()[n.getX()][n.getY()] == SquareState.CLOSED ||
                (n.getY() != end.getY() && n.getX() != end.getX())) {
            return;
        }

        if (p > 0) {
            if (v.getX()[p] != n.getX() && v.getY()[p] != n.getY()) {
                if (r.getModel().getSquares()[n.getX()][v.getY()[p]] == SquareState.CLOSED ||
                        r.getModel().getSquares()[v.getX()[p]][n.getY()] == SquareState.CLOSED) {
                    //return;
                }
            }
        }

        if (v.getTiles()[n.getX()][n.getY()] == 1) {
            short i = 1;

            for (; i <= v.count; i++) {
                if  (v.getX()[i] == n.getX() && v.getY()[i] == n.getY()) {
                    break;
                }
            }

            if (v.getX()[i] == end.getX() || v.getY()[i] == end.getY()) {
                if (10 + v.getG()[p] < v.getG()[i]) {
                    v.getParent()[i] = p;
                } else if(14 + v.getG()[p] < v.getG()[i]) {
                    v.getParent()[i] = p;
                    return;
                }
            }

            v.lastID++;
            v.count++;
            v.getBinaryHeap()[v.count] = v.lastID;
            v.getX()[v.lastID] = n.getX();
            v.getY()[v.lastID] = n.getY();
            v.getH()[v.lastID] = (short) n.distanceFrom(end);
            v.getParent()[v.lastID] = p;

            if (n.getX() == v.getX()[p] || n.getY() == v.getY()[p]) {
                v.getG()[v.lastID] = (short) (10 + v.getG()[p]);
            } else {
                v.getG()[v.lastID] = (short) (14 + v.getG()[p]);
            }

            v.getF()[v.lastID] = (short) (v.getG()[v.lastID] + v.getH()[v.lastID]);

            for(short s = v.count; s != 1; s /= 2) {
                if (v.getF()[v.getBinaryHeap()[s]] > v.getF()[v.getBinaryHeap()[s / 2]]) { //what the fuk D:
                    break;
                }

                /*
                    Invert the values..
                 */
                short t = v.getBinaryHeap()[s / 2];

                v.getBinaryHeap()[s / 2] = v.getBinaryHeap()[s];
                v.getBinaryHeap()[s] = t;
            }

            v.getTiles()[n.getX()][n.getY()] = 1;
        }
    }
View Full Code Here

                    while(set.next()) {
                        Model m = new Model();

                        m.setName(set.getString("id"));

                        m.setDoor(new Position(
                                set.getInt("door_x"),
                                set.getInt("door_y"),
                                set.getInt("door_z"),
                                set.getInt("door_dir")));
View Full Code Here

        }
    }

    private void addAllNeighbors(Position end, Values v, Room r) {
        for(Point p : proximity) {
            addNeighbor(new Position(p.x, p.y, 0, 0), end, v, r);
        }
    }
View Full Code Here

        new Point(1, 1),
        new Point(-1, -1)
    };

    public Position getNextNode(Position current, Position end, Room room) {
        Position p = new Position(0, 0, 0, 0);

        double pointer = current.distanceFrom(end);

        for(Point c : proximity) {
            Position n = new Position(c.x + current.getX(), c.y + current.getY(), current.getZ(), 0);

            if (n.getX() < 0 && n.getY() < 0) { //it isn't a real tile..
                continue;
            }

            if (n.getX() > room.getModel().getLimitX() || n.getY() > room.getModel().getLimitY()) { //it's above the limits
                continue;
            }

            if (room.getModel().getSquares()[n.getX()][n.getY()] == SquareState.CLOSED) { //it's a closed tile anyways
                continue;
            }

            if (pointer > n.distanceFrom(end)) {
                pointer = n.distanceFrom(end);
                p = n;
            }
        }

        return p;
View Full Code Here

        LinkedList<Position> path = new LinkedList<>();

        double limit = start.distanceFrom(end);
        H4J.getLogger("a").info("Le limit: " + limit);
        double distancePointer = limit;
        Position current = start;
        Position lastCurrent = current;

        while(true) {
            for(Point p : proximity) {
                Position n = new Position(p.x + current.getX(), p.y + current.getY(), 0, 0); //TODO: Z

                if (n.getX() < 0 && n.getY() < 0) { //it isn't a real tile..
                    continue;
                }

                if (n.getX() > room.getModel().getLimitX() || n.getY() > room.getModel().getLimitY()) { //it's above the limits
                    continue;
                }

                if (room.getModel().getSquares()[n.getX()][n.getY()] == SquareState.CLOSED) { //it's a closed tile anyways
                    continue;
                }

                if (distancePointer > n.distanceFrom(end)) {  //it's out of bounds
                    distancePointer = n.distanceFrom(end);
                    H4J.getLogger("a").info(limit + " => " + n.getX() + "|" + n.getY());
                    current = n;
                }
            }

            path.add(current);
View Full Code Here

TOP

Related Classes of com.mmoscene.h4j.habbohotel.pathfinding.Position

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.