
:MAIN
    SET:walk:0
    SET:rest:0
    SET:Wait:0
    SET:Clock:0
    SET:Back_ON:0
    SET:Tail_U_ON:0
    CALL:STARTUP_STAND
    SET:actions:1

:SEARCH_BALL
    SET:Eye_L2:0
    SET:Eye_R2:0
    SET:pan:Head_Pan
    RND:Context:1:2
    CSET:pan:>:+15:1
    CSET:pan:<:-15:2
    SET:leftright:Context

:SEARCH_BALL_HEAD
    SWITCH:leftright
    CASE:1:PLAY:ACTION:MOVE.HEAD.SLOW:+60:0
    CASE:2:PLAY:ACTION:MOVE.HEAD.SLOW:-60:0

:SEARCH_BALL_LOOP
    CALL:ATTENTION
    IF:rest:<>:0:SHUTDOWN
    IF:Pink_Ball:<>:0:SEARCH_BALL_TRACK
    IF:Wait:>=:actions:SEARCH_BALL_LOOP

    SWITCH:leftright
    CASE:1:SET:leftright:2
    CASE:2:SET:leftright:1
    GO:SEARCH_BALL_HEAD

:SEARCH_BALL_TRACK
    PLAY:ACTION:MOVE.HEAD.NORMAL:Head_Pan:Head_Tilt
    WAIT:MOTION_HEAD
    GO:TRACK_BALL

////////////////////////////////////////////////////////

:TRACK_BALL
    PLAY:ACTION:TRACK_HEAD:PINK_BALL
    SET:Eye_L2:1
    SET:Eye_R2:1

:TRACK_BALL_LOOP
    CALL:ATTENTION
    CALL:TRACK_BALL_HANDLER
    IF:rest:<>:0:SHUTDOWN
    IF:Wait:>=:actions:TRACK_BALL_LOOP

    GO:SEARCH_BALL

////////////////////////////////////////////////////////

:TRACK_BALL_HANDLER
    SET:pan:Head_Pan
    IF:pan:>:+30:TURN_LEFT_TRACK
    IF:pan:<:-30:TURN_RIGHT_TRACK
    IF:walk:<>:0:THEN
        IF:Distance:>:200:WALK_FORWARD_TRACK
        IF:Pink_Ball:<>:0:TRACK_BALL_FOUND
    ENDIF
    RETURN

////////////////////////////////////////////////////////

:TRACK_BALL_FOUND
    SET:walk:0
    RETURN

////////////////////////////////////////////////////////

:TURN_LEFT_TRACK
    ADD:actions:1
    PLAY:ACTION:TURN:pan

:TURN_LEFT_TRACK_LOOP
    CALL:ATTENTION
    IF:stop:<>:0:TURN_STOP
    IF:Wait:<:actions:TURN_STOP
    IF:Pink_Ball:==:0:TURN_STOP
    IF:Head_Pan:<=:0:TURN_STOP
    GO:TURN_LEFT_TRACK_LOOP

////////////////////////////////////////////////////////

:TURN_RIGHT_TRACK
    ADD:actions:1
    PLAY:ACTION:TURN:pan

:TURN_RIGHT_TRACK_LOOP
    CALL:ATTENTION
    IF:stop:<>:0:TURN_STOP
    IF:Wait:<:actions:TURN_STOP
    IF:Pink_Ball:==:0:TURN_STOP
    IF:Head_Pan:>=:0:TURN_STOP
    GO:TURN_RIGHT_TRACK_LOOP

////////////////////////////////////////////////////////

:TURN_STOP
    SUB:actions:1
    PLAY:ACTION:TURN:0
    WAIT:MOTION_LEG
    RETURN

////////////////////////////////////////////////////////

:WALK_FORWARD_TRACK
    ADD:actions:1
    RND:Context:1:2
    CSET:Distance:<:300:2
    CSET:Distance:>:900:2
    CASE:1:PLAY:ACTION:WALK.STYLE3:pan:300
    CASE:ELSE:PLAY:ACTION:WALK:pan:300

:WALK_FORWARD_TRACK_LOOP
    CALL:ATTENTION
    IF:stop:<>:0:WALK_STOP
    IF:Wait:<:actions:WALK_STOP
    IF:Pink_Ball:==:0:WALK_STOP
    IF:Distance:<:200:WALK_STOP
    IF:Head_Pan:>:+45:WALK_STOP
    IF:Head_Pan:<:-45:WALK_STOP
//  IF:Head_Tilt:>:+10:WALK_STOP
    IF:Head_Tilt:<:-65:WALK_STOP
    GO:WALK_FORWARD_TRACK_LOOP

////////////////////////////////////////////////////////

:WALK_STOP
    SUB:actions:1
    PLAY:ACTION:WALK:0:0
    WAIT:MOTION_LEG
    RETURN

////////////////////////////////////////////////////////

:ATTENTION
    SET:stop:0
    CALL:SENSOR
    CALL:REST_CHECK
    RETURN

////////////////////////////////////////////////////////

:SENSOR
    IF:Back_ON:<>:0:SENSOR_Back_ON
    IF:Tail_U_ON:<>:0:SENSOR_Tail_U_ON
    RETURN

:SENSOR_Back_ON
    SET:Back_ON:0
    GO:SENSOR_WALK

:SENSOR_Tail_U_ON
    SET:Tail_U_ON:0
    GO:SENSOR_WALK

:SENSOR_WALK
    SET:walk:1
    RETURN

////////////////////////////////////////////////////////

:REST_CHECK
    IF:Batt_Rest:<:25:REST_CHECK_STOP
    IF:Batt_Temp:>:45:REST_CHECK_STOP
    IF:Body_Temp:>:45:REST_CHECK_STOP
    RETURN

:REST_CHECK_STOP
    SET:stop:1
    SET:rest:1
    RETURN

////////////////////////////////////////////////////////

:WAIT_ACTIONS
:WAIT_ACTIONS_LOOP
    CALL:ATTENTION
    IF:Wait:>:0:WAIT_ACTIONS_LOOP
    RETURN

////////////////////////////////////////////////////////

:STARTUP_STAND
    IF:Status:==:0:THEN
        PLAY:ACTION:LIE
        CALL:WAIT_ACTIONS
    ENDIF
    PLAY:ACTION:STAND
    CALL:WAIT_ACTIONS
    RETURN

////////////////////////////////////////////////////////

:SHUTDOWN
    RND:pan:-25:25
    PLAY:ACTION:LIE
    CALL:WAIT_ACTIONS
    PLAY:ACTION:MOVE.HEAD.NORMAL:pan:-90
    CALL:WAIT_ACTIONS
    HALT

////////////////////////////////////////////////////////
//  Copyright © Jürgen Reule 2008  MADE IN GERMANY


