import $"{AGX_DATA_DIR}/models/openplx/bucket_2.agx" as ExternalBucket.bucket2:
    .discard_rigid_body_positions: true
    .expose_bodies_as_traits: true

Bucket2 is Physics3D.Bodies.RigidBody:
    with ExternalBucket.ShovelBody

ExcavatorAndBucket2External is ExcavatorAndBucketTemplateExternal:
    bucket:
        agx_bucket is Bucket2:
            kinematics.local_transform.position: {0,0,0}
        body: bucket.agx_bucket
        external_drive_connector: bucket.agx_bucket.ShovelAttachment
        external_input_connector: bucket.agx_bucket.ShovelAttachment
        top_edge_begin: bucket.agx_bucket.TopEdgeBegin.position
        top_edge_end: bucket.agx_bucket.TopEdgeEnd.position
        cutting_edge_begin: bucket.agx_bucket.CuttingEdgeBegin.position
        cutting_edge_end: bucket.agx_bucket.CuttingEdgeEnd.position
    stick.snap_guide.position: (stick.agx_stick.Hinge66_mc.position + stick.agx_stick.Hinge67_mc.position) * 0.5
    stick.snap_output.position: (stick.agx_stick.Hinge68_mc.position + stick.agx_stick.Hinge69_mc.position) * 0.5

ExcavatorAndBucket2ExternalFixed is ExcavatorAndBucket2External:
    stick_cylinder.stroke_length: 0.7
    stick_cylinder.max_length: 2.19
    bucket:
        agx_bucket:
            move_axis is Math.Vec3:
                x:  -bucket.agx_bucket.ShovelAttachment.normal.x
                y:  -bucket.agx_bucket.ShovelAttachment.normal.y
                z:  -bucket.agx_bucket.ShovelAttachment.normal.z
            ShovelAttachment2 is Physics3D.Interactions.MateConnector:
                position: bucket.agx_bucket.ShovelAttachment.position + bucket.agx_bucket.move_axis * 0.4
                main_axis: bucket.agx_bucket.ShovelAttachment.main_axis
                normal: bucket.agx_bucket.ShovelAttachment.normal
        external_drive_connector: bucket.agx_bucket.ShovelAttachment2
