package org.artisanlogiciel.games;

/**
 DirectionPosition 

record direction and position ( direction as defined in LabyModel ).
 **/
public class DirectionPosition
{
    private short direction;
    private Position position;

    // (direction,position)
    DirectionPosition(short d, Position p)
    {
	direction=d;
	position=p;
    }

    short getDirection()
    {
	return direction;
    }

    void setDirection(short d)
    {
	direction = d;
    }

    Position getPosition()
    {
	return position;
    }

    public String toString()
    {
	if (position != null)
	    {
		return position.toString();
	    }
	return "?";
    }

    // create a new DirectionPosition from this using one possible direction.
    DirectionPosition moveToAdjacentDirection()
    {
	short pointingdirection = 0;
	Position p = null;
	if (LabyModel.isFlagSet(direction,LabyModel.RIGHT))
	    {
		p = new Position(position.getX() + 1, position.getY());
		pointingdirection |= LabyModel.LEFT;
	    }
	else if (LabyModel.isFlagSet(direction,LabyModel.LEFT))
	    {
		p = new Position(position.getX() -1 ,position.getY());
		pointingdirection |= LabyModel.RIGHT;
	    }
	else if (LabyModel.isFlagSet(direction,LabyModel.UP))
	    {
		p = new Position(position.getX(),position.getY() -1);
		pointingdirection |= LabyModel.DOWN;	
	    }
	else if (LabyModel.isFlagSet(direction,LabyModel.DOWN))
	    {
		p = new Position(position.getX(),position.getY() + 1);
		pointingdirection |= LabyModel.UP;
	    }
	else
	    {
		p = position;
	    }

	return new DirectionPosition((short) pointingdirection, p);
    }

}
