package org.rev317.api.wrappers; import org.rev317.api.interfaces.Locatable; import org.rev317.api.interfaces.TileFlags; import org.rev317.api.methods.Calculations; import org.rev317.api.methods.Game; import org.rev317.api.methods.Players; import org.rev317.api.methods.Walking; /** * * Class which holds a world location * * @author Everel * */ public final class Tile implements TileFlags, Locatable { private int x; private int y; private int z; public Tile(int x, int y) { this.x = x; this.y = y; } public Tile(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } /** * Gets x * * @return x */ public final int getX() { return x; } /** * Gets y * * @return y */ public final int getY() { return y; } /** * Gets region x * @return region x */ public final int getRegionX() { return x - Game.getBaseX(); } /** * Gets region y * @return region y */ public final int getRegionY() { return y - Game.getBaseY(); } /** * Gets z/plane * * @return plane */ public final int getPlane() { return z; } /** * {@inheritDoc} */ @Override public final int distanceTo() { return (int) Calculations.distanceTo(this); } /** * Determines if this tile is on minimap * * @return whether this tile is on minimap */ public final boolean isOnMinimap() { return distanceTo() < 16; } @Override public String toString() { return "Tile: [" + getX() + ", " + getY() + "]"; } @Override public boolean equals(Object obj) { if (obj == null || obj.getClass() != this.getClass()) { return false; } if (obj == this) { return true; } final Tile t = (Tile) obj; return t.getX() == this.getX() && t.getY() == this.getY() && t.getPlane() == this.getPlane(); } @Override public int hashCode() { int hash = 7; hash = 31 * hash + this.x; hash = 31 * hash + this.y; hash = 31 * hash + this.z; return hash; } /** * Walks to this tile */ public void walkTo() { Walking.walkTo(Players.getMyPlayer().getLocation(), this); } /** * Determines if this tile is walkable * @return true if this tile is walkable, otherwise false */ public boolean isWalkable() { return (Game.getCollisionFlags()[getRegionX()][getRegionY()] & 256) == 0; } /** * Determines if this tile is reachable * @param isObject whether this tile is an object tile * @return true if this tile is reachable, otherwise false */ public boolean isReachable(boolean isObject) { Tile current = Players.getMyPlayer().getLocation(); return Calculations.dijkstraDist(current.getRegionX(), current.getRegionY(), getRegionX(), getRegionY(), isObjectTile()) > -1; } /** * Determines if this tile is reachable * @return true if this tile is reachable, otherwise false */ public boolean isReachable() { return isReachable(isObjectTile()); } /** * Determines if this tile is an object tile * @return true if this tile is an object tile, otherwise false */ public boolean isObjectTile() { return (Game.getCollisionFlags()[getRegionX()][getRegionY()] & OBJECT_TILE) != 0; } /** * {@inheritDoc} */ @Override public Tile getLocation() { return this; } }