trait RipperLiftCylinder:
    ripper_lift_max_length is Real: 1.25
    stroke_length: 0.25
    min_length: ripper_lift_max_length - stroke_length
    source:
        min_effort: Math.NEG_INF
        max_effort: Math.INF
        connectors: [barrel.body.internal_connector, rod.body.internal_connector]
    barrel.local_transform.position: {0,0,0}
    barrel.body.diameter: 0.280
    rod.body.diameter: 0.140

    barrel.body.visual is Visuals.Geometries.Cylinder:
        height: barrel.body.length
        radius: barrel.body.diameter * 0.5
        local_transform: barrel.body.cylinder.local_transform

    rod.body.visual is Visuals.Geometries.Cylinder:
        height: rod.body.length
        radius: rod.body.diameter * 0.5
        local_transform: rod.body.cylinder.local_transform
