blob: 4e5256478b53c4c6124f5d886b21e2fc69c6a9ec [file] [log] [blame] [raw]
package appeng.api;
import net.minecraftforge.common.ForgeDirection;
/**
* This is used internally to return a location, in a few places, just use as is...
*/
public class WorldCoord
{
public int x;
public int y;
public int z;
public WorldCoord add(ForgeDirection direction, int length)
{
x += direction.offsetX * length;
y += direction.offsetY * length;
z += direction.offsetZ * length;
return this;
}
public WorldCoord subtract(ForgeDirection direction, int length)
{
x -= direction.offsetX * length;
y -= direction.offsetY * length;
z -= direction.offsetZ * length;
return this;
}
public WorldCoord add(int _x, int _y, int _z)
{
x += _x;
y += _y;
z += _z;
return this;
}
public WorldCoord subtract(int _x, int _y, int _z)
{
x -= _x;
y -= _y;
z -= _z;
return this;
}
public WorldCoord multiple(int _x, int _y, int _z)
{
x *= _x;
y *= _y;
z *= _z;
return this;
}
public WorldCoord divide(int _x, int _y, int _z)
{
x /= _x;
y /= _y;
z /= _z;
return this;
}
public WorldCoord(int _x, int _y, int _z)
{
x = _x;
y = _y;
z = _z;
}
/**
* Will Return NULL if it's at some diagonal!
*/
public ForgeDirection DirectionTo(WorldCoord loc)
{
int ox = x - loc.x;
int oy = y - loc.y;
int oz = z - loc.z;
int xlen = Math.abs( ox );
int ylen = Math.abs( oy );
int zlen = Math.abs( oz );
if ( loc.isEqual( this.copy().add( ForgeDirection.EAST, xlen ) ) )
return ForgeDirection.EAST;
if ( loc.isEqual( this.copy().add( ForgeDirection.WEST, xlen ) ) )
return ForgeDirection.WEST;
if ( loc.isEqual( this.copy().add( ForgeDirection.NORTH, zlen ) ) )
return ForgeDirection.NORTH;
if ( loc.isEqual( this.copy().add( ForgeDirection.SOUTH, zlen ) ) )
return ForgeDirection.SOUTH;
if ( loc.isEqual( this.copy().add( ForgeDirection.UP, ylen ) ) )
return ForgeDirection.UP;
if ( loc.isEqual( this.copy().add( ForgeDirection.DOWN, ylen ) ) )
return ForgeDirection.DOWN;
return null;
}
public boolean isEqual( WorldCoord c )
{
return x == c.x && y == c.y && z == c.z;
}
public WorldCoord copy()
{
return new WorldCoord( x, y, z );
}
@Override
public boolean equals(Object obj)
{
if ( obj instanceof WorldCoord )
return isEqual( (WorldCoord)obj );
return false;
}
@Override
public String toString()
{
return "" + x + "," + y + "," + z;
}
@Override
public int hashCode()
{
return (y << 24) ^ x ^ z;
}
}