    001package net.minecraft.pathfinding;
    002
    003import net.minecraft.util.MathHelper;
    004
    005public class PathPoint
    006{
    007    /** The x coordinate of this point */
    008    public final int xCoord;
    009
    010    /** The y coordinate of this point */
    011    public final int yCoord;
    012
    013    /** The z coordinate of this point */
    014    public final int zCoord;
    015
    016    /** A hash of the coordinates used to identify this point */
    017    private final int hash;
    018
    019    /** The index of this point in its assigned path */
    020    int index = -1;
    021
    022    /** The distance along the path to this point */
    023    float totalPathDistance;
    024
    025    /** The linear distance to the next point */
    026    float distanceToNext;
    027
    028    /** The distance to the target */
    029    float distanceToTarget;
    030
    031    /** The point preceding this in its assigned path */
    032    PathPoint previous;
    033
    034    /** Indicates this is the origin */
    035    public boolean isFirst = false;
    036
    037    public PathPoint(int par1, int par2, int par3)
    038    {
    039        this.xCoord = par1;
    040        this.yCoord = par2;
    041        this.zCoord = par3;
    042        this.hash = makeHash(par1, par2, par3);
    043    }
    044
    045    public static int makeHash(int par0, int par1, int par2)
    046    {
    047        return par1 & 255 | (par0 & 32767) << 8 | (par2 & 32767) << 24 | (par0 < 0 ? Integer.MIN_VALUE : 0) | (par2 < 0 ? 32768 : 0);
    048    }
    049
    050    /**
    051     * Returns the linear distance to another path point
    052     */
    053    public float distanceTo(PathPoint par1PathPoint)
    054    {
    055        float var2 = (float)(par1PathPoint.xCoord - this.xCoord);
    056        float var3 = (float)(par1PathPoint.yCoord - this.yCoord);
    057        float var4 = (float)(par1PathPoint.zCoord - this.zCoord);
    058        return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4);
    059    }
    060
    061    public float func_75832_b(PathPoint par1PathPoint)
    062    {
    063        float var2 = (float)(par1PathPoint.xCoord - this.xCoord);
    064        float var3 = (float)(par1PathPoint.yCoord - this.yCoord);
    065        float var4 = (float)(par1PathPoint.zCoord - this.zCoord);
    066        return var2 * var2 + var3 * var3 + var4 * var4;
    067    }
    068
    069    public boolean equals(Object par1Obj)
    070    {
    071        if (!(par1Obj instanceof PathPoint))
    072        {
    073            return false;
    074        }
    075        else
    076        {
    077            PathPoint var2 = (PathPoint)par1Obj;
    078            return this.hash == var2.hash && this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord;
    079        }
    080    }
    081
    082    public int hashCode()
    083    {
    084        return this.hash;
    085    }
    086
    087    /**
    088     * Returns true if this point has already been assigned to a path
    089     */
    090    public boolean isAssigned()
    091    {
    092        return this.index >= 0;
    093    }
    094
    095    public String toString()
    096    {
    097        return this.xCoord + ", " + this.yCoord + ", " + this.zCoord;
    098    }
    099}