import $"{AGX_DATA_DIR}/models/excavator_autonomous_E85.agx" as AgxExcavatorSystem.excavator:
    .discard_rigid_body_positions: true
    .expose_bodies_as_traits: true

BoomSwing is Physics3D.Bodies.RigidBody:
    with AgxExcavatorSystem.boom_rotaty
Boom is Physics3D.Bodies.RigidBody:
    with AgxExcavatorSystem.Arm
Cabin is Physics3D.Bodies.RigidBody:
    with AgxExcavatorSystem.ChassieBody
Stick is Physics3D.Bodies.RigidBody:
    with AgxExcavatorSystem.Stick

ExcavatorExternal is ExcavatorTemplate:
    boom_cylinder.stroke_length: 1.0
    boom_cylinder.max_length: 2.4

    stick_cylinder.stroke_length: 1.0
    stick_cylinder.max_length: 2.4

    reference_body: cabin
    cabin is Cabin:
        kinematics.local_transform.position: {0,0,0}
        kinematics.local_transform.rotation: Math.Quat.from_xyzw(1,0,0,0)
        is_dynamic: false

    swing_hinge is Physics3D.Interactions.Hinge:
        initial_angle: 0
        connectors: [cabin.Hinge92_mc, boom_swing.agx_boom_swing.Hinge92_mc]

    boom_swing_motor is Physics3D.Interactions.RotationalVelocityMotor:
        connectors: swing_hinge.connectors
        min_effort: -2000000.0
        max_effort: 200000.0

    boom_swing becomes ExternalCraneSystemComponent:
        agx_boom_swing is BoomSwing:
            Solid1_0.enable_collisions: true
            kinematics.local_transform.position: {0,0,0}
        body: boom_swing.agx_boom_swing
        local_model_plane_normal: boom_swing.main_axis_sign * boom_swing.external_output_connector.main_axis
        local_along_normal: boom_swing.external_output_connector.normal

        external_input_connector: boom_swing.agx_boom_swing.Hinge1_mc
        external_ground_connector: boom_swing.agx_boom_swing.Hinge47_mc
        external_output_connector: boom_swing.agx_boom_swing.Hinge53_mc
    boom becomes ExternalCraneSystemComponent:
        agx_boom is Boom:
            kinematics.local_transform.position: {0,0,0}
        body: boom.agx_boom
        external_ground_connector: boom.agx_boom.Hinge50_mc
        external_drive_connector: boom.agx_boom.Hinge48_mc
        external_input_connector: boom.agx_boom.Hinge53_mc
        external_output_connector: boom.agx_boom.Hinge54_mc

    stick becomes ExternalCraneSystemComponent:
        agx_stick is Stick:
            kinematics.local_transform.position: {0,0,0}
        body: stick.agx_stick
        external_ground_connector: stick.agx_stick.Hinge55_mc
        external_drive_connector: stick.agx_stick.Hinge51_mc
        external_input_connector: stick.agx_stick.Hinge54_mc
        external_output_connector: stick.agx_stick.Hinge68_mc
        external_guide_connector: stick.agx_stick.Hinge66_mc

    swing_boom_connection.boom_1_boom_2_connection.snap_hinge.initial_angle: 0.0
    boom_stick_connection.boom_1_boom_2_connection.snap_hinge.initial_angle: 0.0
