package org.andengine.util.algorithm.path;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 23:00:24 - 16.08.2010
*/
public class Path {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final int[] mXs;
private final int[] mYs;
// ===========================================================
// Constructors
// ===========================================================
public Path(final int pLength) {
this.mXs = new int[pLength];
this.mYs = new int[pLength];
}
// ===========================================================
// Getter & Setter
// ===========================================================
public int getLength() {
return this.mXs.length;
}
public int getFromX() {
return this.getX(0);
}
public int getFromY() {
return this.getY(0);
}
public int getToX() {
return this.getX(this.getLength() - 1);
}
public int getToY() {
return this.getY(this.getLength() - 1);
}
public int getX(final int pIndex) {
return this.mXs[pIndex];
}
public int getY(final int pIndex) {
return this.mYs[pIndex];
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public void set(final int pIndex, final int pX, final int pY) {
this.mXs[pIndex] = pX;
this.mYs[pIndex] = pY;
}
public boolean contains(final int pX, final int pY) {
final int[] xs = this.mXs;
final int[] ys = this.mYs;
for(int i = this.getLength() - 1; i >= 0; i--) {
if(xs[i] == pX && ys[i] == pY) {
return true;
}
}
return false;
}
public Direction getDirectionToPreviousStep(final int pIndex) {
if(pIndex == 0) {
return null;
} else {
final int dX = this.getX(pIndex - 1) - this.getX(pIndex);
final int dY = this.getY(pIndex - 1) - this.getY(pIndex);
return Direction.fromDelta(dX, dY);
}
}
public Direction getDirectionToNextStep(final int pIndex) {
if(pIndex == this.getLength() - 1) {
return null;
} else {
final int dX = this.getX(pIndex + 1) - this.getX(pIndex);
final int dY = this.getY(pIndex + 1) - this.getY(pIndex);
return Direction.fromDelta(dX, dY);
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}