package rabbitescape.engine.behaviours;
import static rabbitescape.engine.ChangeDescription.State.*;
import rabbitescape.engine.*;
import rabbitescape.engine.ChangeDescription.State;
public class Exiting extends Behaviour
{
@Override
public void cancel()
{
}
@Override
public boolean checkTriggered( Rabbit rabbit, World world )
{
for ( Thing thing : world.things )
{
if (
( thing instanceof Exit )
&& ( thing.x == rabbit.x && thing.y == rabbit.y )
)
{
return true;
}
}
return false;
}
@Override
public State newState( BehaviourTools t, boolean triggered )
{
if ( triggered )
{
if ( t.rabbit.state == RABBIT_CLIMBING_LEFT_CONTINUE_2 )
{
return RABBIT_ENTERING_EXIT_CLIMBING_LEFT;
}
if ( t.rabbit.state == RABBIT_CLIMBING_RIGHT_CONTINUE_2 )
{
return RABBIT_ENTERING_EXIT_CLIMBING_RIGHT;
}
return RABBIT_ENTERING_EXIT;
}
return null;
}
@Override
public boolean behave( World world, Rabbit rabbit, State state )
{
if (
state == RABBIT_ENTERING_EXIT
|| state == RABBIT_ENTERING_EXIT_CLIMBING_RIGHT
|| state == RABBIT_ENTERING_EXIT_CLIMBING_LEFT
)
{
world.changes.saveRabbit( rabbit );
return true;
}
else
{
return false;
}
}
}