001 package net.minecraft.src;
002
003 public class PathEntity
004 {
005 /** The actual points in the path */
006 private final PathPoint[] points;
007
008 /** PathEntity Array Index the Entity is currently targeting */
009 private int currentPathIndex;
010
011 /** The total length of the path */
012 private int pathLength;
013
014 public PathEntity(PathPoint[] par1ArrayOfPathPoint)
015 {
016 this.points = par1ArrayOfPathPoint;
017 this.pathLength = par1ArrayOfPathPoint.length;
018 }
019
020 /**
021 * Directs this path to the next point in its array
022 */
023 public void incrementPathIndex()
024 {
025 ++this.currentPathIndex;
026 }
027
028 /**
029 * Returns true if this path has reached the end
030 */
031 public boolean isFinished()
032 {
033 return this.currentPathIndex >= this.pathLength;
034 }
035
036 /**
037 * returns the last PathPoint of the Array
038 */
039 public PathPoint getFinalPathPoint()
040 {
041 return this.pathLength > 0 ? this.points[this.pathLength - 1] : null;
042 }
043
044 /**
045 * return the PathPoint located at the specified PathIndex, usually the current one
046 */
047 public PathPoint getPathPointFromIndex(int par1)
048 {
049 return this.points[par1];
050 }
051
052 public int getCurrentPathLength()
053 {
054 return this.pathLength;
055 }
056
057 public void setCurrentPathLength(int par1)
058 {
059 this.pathLength = par1;
060 }
061
062 public int getCurrentPathIndex()
063 {
064 return this.currentPathIndex;
065 }
066
067 public void setCurrentPathIndex(int par1)
068 {
069 this.currentPathIndex = par1;
070 }
071
072 /**
073 * Gets the vector of the PathPoint associated with the given index.
074 */
075 public Vec3 getVectorFromIndex(Entity par1Entity, int par2)
076 {
077 double var3 = (double)this.points[par2].xCoord + (double)((int)(par1Entity.width + 1.0F)) * 0.5D;
078 double var5 = (double)this.points[par2].yCoord;
079 double var7 = (double)this.points[par2].zCoord + (double)((int)(par1Entity.width + 1.0F)) * 0.5D;
080 return Vec3.getVec3Pool().getVecFromPool(var3, var5, var7);
081 }
082
083 /**
084 * returns the current PathEntity target node as Vec3D
085 */
086 public Vec3 getPosition(Entity par1Entity)
087 {
088 return this.getVectorFromIndex(par1Entity, this.currentPathIndex);
089 }
090
091 /**
092 * Returns true if the EntityPath are the same. Non instance related equals.
093 */
094 public boolean isSamePath(PathEntity par1PathEntity)
095 {
096 if (par1PathEntity == null)
097 {
098 return false;
099 }
100 else if (par1PathEntity.points.length != this.points.length)
101 {
102 return false;
103 }
104 else
105 {
106 for (int var2 = 0; var2 < this.points.length; ++var2)
107 {
108 if (this.points[var2].xCoord != par1PathEntity.points[var2].xCoord || this.points[var2].yCoord != par1PathEntity.points[var2].yCoord || this.points[var2].zCoord != par1PathEntity.points[var2].zCoord)
109 {
110 return false;
111 }
112 }
113
114 return true;
115 }
116 }
117
118 /**
119 * Returns true if the final PathPoint in the PathEntity is equal to Vec3D coords.
120 */
121 public boolean isDestinationSame(Vec3 par1Vec3)
122 {
123 PathPoint var2 = this.getFinalPathPoint();
124 return var2 == null ? false : var2.xCoord == (int)par1Vec3.xCoord && var2.zCoord == (int)par1Vec3.zCoord;
125 }
126 }