<?xml version="1.0"?>
<root main_tree_to_execute="actorTree">
    <!-- ////////// -->
    <BehaviorTree ID="actorTree">
        <Fallback>
            <ReactiveSequence>
                <Inverter>
                    <Condition ID="IsCalled"/>
                </Inverter>

                <Sequence>
                    <Control ID="WeightedRandom" weights="100,5,2">
                        <Action ID="GenerateXYPose" area="{safeArea}" pose="{actorTarget}"/>
                        <Action ID="GenerateXYPose" area="{warningArea}" pose="{actorTarget}"/>
                        <Action ID="GenerateXYPose" area="{unsafeArea}" pose="{actorTarget}"/>
                    </Control>
                    <Action ID="ActorMovement" animation="walk" target="{actorTarget}"/>
                </Sequence>
            </ReactiveSequence>
            <Sequence>
                <Action ID="GenerateXYPose" area="{unsafeArea}" pose="{actorTarget}"/>
                <Action ID="ActorMovement" animation="walk" target="{actorTarget}"/>
                <Action ID="SetCalledTo" state="false"/>
            </Sequence>
        </Fallback>
    </BehaviorTree>
    <!-- ////////// -->
    <TreeNodesModel>
        <Action ID="ActorAnimation">
            <input_port name="animation">Name of animation to play</input_port>
        </Action>
        <Action ID="ActorMovement">
            <input_port name="animation">Name of animation to play</input_port>
            <input_port name="target">Pose to move to</input_port>
        </Action>
        <Condition ID="IsCalled"/>
        <Action ID="SetCalledTo">
            <input_port name="state">state to set called to</input_port>
        </Action>
        <Action ID="GenerateXYPose">
            <input_port name="area">Area to generate pose in</input_port>
            <output_port name="pose">Generated pose in area</output_port>
        </Action>
        <Condition ID="InAreaTest">
            <input_port name="area">Bounds to check in</input_port>
            <input_port name="pose">Position of object</input_port>
        </Condition>
        <Action ID="MoveActorToTarget">
            <input_port name="current">Current actor position</input_port>
            <input_port name="target">Target to move actor to</input_port>
        </Action>
        <Action ID="PositionToPose">
            <input_port name="offset">offset as a Point</input_port>
            <input_port name="orientation">rotation of resulting pose as Quaternion</input_port>
            <input_port name="output">generated new pose</input_port>
            <input_port name="position">initial position as Position2D</input_port>
        </Action>
        <Action ID="SetRobotVelocity">
            <input_port name="velocity">Target velocity of robot</input_port>
        </Action>
        <Action ID="RandomFailure">
            <input_port name="failureChance">Chance to fail from 0 to 1</input_port>
        </Action>
        <Action ID="RobotMove">
            <input_port name="target">Target pose of robot.</input_port>
        </Action>
        <Control ID="WeightedRandom">
            <input_port name="weights">Weights for the children, separated by semicolon.</input_port>
        </Control>
    </TreeNodesModel>
    <!-- ////////// -->
</root>

