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