import $"{AGX_DATA_DIR}/models/openplx/chassis.obj" as ChassisOBJ.Visual

Chassis is Physics3D.Bodies.RigidBody:
    visual is ChassisOBJ.Visual with Visuals.Materials.VisualMaterialOverrideTrait:
        material_override: BoxTruck.Properties.ChassisVisualMaterial
        local_transform.position: { 0, 0, -0.72 } # Offset the visual to match the collision geometry
    geometry is Physics3D.Geometries.Box:
        size:
            x: 3.25
            y: 1.2
            z: 1.5
    inertia.mass: 1000  # Set chassis mass for physics interactions

    # Connector offsets to position each wheel connector relative to chassis geometry
    connector_offsets is Math.Vec3:
        x: geometry.size.x * 0.31
        y: geometry.size.y * 0.44
        z: geometry.size.z * 0.48

    # Define connectors for each wheel, specifying positions and orientations
    front_left_connector is Physics3D.Interactions.MateConnector:
        .agx_debug_render_frame: true
        position:
            x: -connector_offsets.x
            y: -connector_offsets.y
            z: -connector_offsets.z
        main_axis: { 0, -1, 0 }
        normal: { 1, 0, 0 }

    front_right_connector is Physics3D.Interactions.MateConnector:
        .agx_debug_render_frame: true
        position:
            x: -connector_offsets.x
            y: connector_offsets.y
            z: -connector_offsets.z
        main_axis: { 0, 1, 0 }
        normal: { 1, 0, 0 }

    rear_left_connector is Physics3D.Interactions.MateConnector:
        .agx_debug_render_frame: true
        position:
            x: connector_offsets.x
            y: -connector_offsets.y
            z: -connector_offsets.z
        main_axis: { 0, -1, 0 }
        normal: { 1, 0, 0 }

    rear_right_connector is Physics3D.Interactions.MateConnector:
        .agx_debug_render_frame: true
        position:
            x: connector_offsets.x
            y: connector_offsets.y
            z: -connector_offsets.z
        main_axis: { 0, 1, 0 }
        normal: {1, 0, 0 }
