    001    package net.minecraft.pathfinding;
    002
    003    import net.minecraft.util.MathHelper;
    004
    005    public 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    }