# Option vlc2-border Parameters of that option:
Parameter | Measure | Range | Description
vlc2-border.destination-angle |  |  | for the ball to shoot
vlc2-border.left-right-border |  |  |
## State Machine ## State at-border
If that state is active,
> | The basic behavior do-nothing is executed.
The decision tree:
Pseudo code of the decision tree:
if ( | abs( robot-pose.y ) > abs( ball.known-or-near.y ) | ) | //
{
if ( | robot-pose.x > ball.known-or-near.x | ) | //
{
transition-to-state(A);
}
else
{
transition-to-state(B);
}
}
else
{
if ( | robot-pose.x > ball.known-or-near.x | ) | //
{
transition-to-state(D);
}
else
{
transition-to-state(C);
}
}
## State C
If that state is active,
> | The basic behavior turn-around-point is executed. Parameters:
| turn-around-point.x | = | ball.known-or-near.x ;
| turn-around-point.y | = | ball.known-or-near.y ;
| turn-around-point.radius | = | 450 ;
| turn-around-point.left-right | = | ::vlc2-border.left-right-border ;
| turn-around-point.forward-component | = | 1 ;
The decision tree:
Pseudo code of the decision tree:
if ( | abs( robot-pose.y ) > (abs( ball.known-or-near.y ) + 100) | ) | //
{
transition-to-state(B);
}
else
{
transition-to-state(C);
}
## State D
If that state is active,
> | The basic behavior turn-around-point is executed. Parameters:
| turn-around-point.x | = | ball.known-or-near.x ;
| turn-around-point.y | = | ball.known-or-near.y ;
| turn-around-point.radius | = | 450 ;
| turn-around-point.left-right | = | (-1 * ::vlc2-border.left-right-border) ;
| turn-around-point.forward-component | = | 1 ;
The decision tree:
Pseudo code of the decision tree:
if ( | abs( robot-pose.y ) > (abs( ball.known-or-near.y ) + 100) | ) | //
{
transition-to-state(A);
}
else
{
transition-to-state(D);
}
## State A
If that state is active,
> | The option grab-ball-with-head is executed.
The decision tree:
Pseudo code of the decision tree:
if ( | subsequent-option-reached-target-state | ) | //
{
transition-to-state(turn-left);
}
else
{
transition-to-state(A);
}
## State B
If that state is active,
> | The basic behavior do-nothing is executed.
The decision tree:
Pseudo code of the decision tree:
transition-to-state(finished);

## State finished

This state is a target state.
If that state is active,
> | The option dribble-ball-vlc2 is executed. Parameters:
| dribble-ball-vlc2.destination-angle | = | angle.best-angle-to-opponent-goal ;
The decision tree:
Pseudo code of the decision tree:
transition-to-state(finished);

## State turn-left

If that state is active,
> | The basic behavior walk is executed. Parameters:
| walk.type | = | walk-type.walk-with-ball ;
| walk.speed-x | = | 0 ;
| walk.speed-y | = | 0 ;
| walk.rotation-speed | = | (120 * ::vlc2-border.left-right-border) ;
> | These output symbols are set:
| head-control-mode | = | head-control-mode.hold-ball
The decision tree:
Pseudo code of the decision tree:
if ( | abs( angle.best-angle-to-opponent-goal ) < 20 | ) | //
{
transition-to-state(finished);
}
else
{
transition-to-state(turn-left);
}

## State turn-right

If that state is active,
> | The basic behavior walk is executed. Parameters:
| walk.type | = | walk-type.walk-with-ball ;
| walk.speed-x | = | 0 ;
| walk.speed-y | = | 0 ;
| walk.rotation-speed | = | (-120 * ::vlc2-border.left-right-border) ;
> | These output symbols are set:
| head-control-mode | = | head-control-mode.hold-ball
The decision tree:
Pseudo code of the decision tree:
if ( | abs( angle.best-angle-to-opponent-goal ) < 20 | ) | //
{
transition-to-state(finished);
}
else
{
transition-to-state(turn-right);
}