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    }