RearSuspension is Physics3D.System:
    .doc: """
    The rear suspension of the beach buggy.
    """
    chassis_body is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.chassiBody reference

    bl_tarm is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.bl_tarmBody
    br_tarm is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.br_tarmBody
	bl_armu is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.bl_armuBody
    br_armu is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.br_armuBody
	bl_rodl is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.bl_rodlBody
	bl_rodu is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.bl_roduBody
	br_rodl is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.br_rodlBody
	br_rodu is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.br_roduBody
    br_arml is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.br_armlBody
    bl_arml is Physics3D.Bodies.RigidBody with BeachBuggy.Assets.RigidBodyDefinitions.bl_armlBody
    
    # Clearance for the hinges
    bl_chassi_tarm_c_hinge is Physics3D.Interactions.Hinge:
        connectors: [bl_tarm.bl_chassi_tarm_c_connector, chassis_body.bl_chassi_tarm_c_connector]
        clearance becomes Physics3D.Interactions.Clearance.ConstantHingeClearance:
            along_main.distance: 0
            along_normal.distance: 0
            along_cross.distance: 0
            around_all_axes.angle: 0.1
    br_chassi_tarm_c_hinge is Physics3D.Interactions.Hinge:
        connectors: [br_tarm.br_chassi_tarm_c_connector, chassis_body.br_chassi_tarm_c_connector]
        clearance becomes Physics3D.Interactions.Clearance.ConstantHingeClearance:
            along_main.distance: 0
            along_normal.distance: 0
            along_cross.distance: 0
            around_all_axes.angle: 0.1
    bl_chassi_armu_c is Physics3D.Interactions.Hinge:
        connectors: [bl_armu.bl_chassi_armu_c_connector, chassis_body.bl_chassi_armu_c_connector]
    bl_tarm_armu_c is Physics3D.Interactions.Ball:
        connectors: [bl_armu.bl_tarm_armu_c_connector, bl_tarm.bl_tarm_armu_c_connector]
    br_chassi_armu_c is Physics3D.Interactions.Hinge:
        connectors: [br_armu.br_chassi_armu_c_connector, chassis_body.br_chassi_armu_c_connector]
    br_tarm_armu_c is Physics3D.Interactions.Ball:
        connectors: [br_armu.br_tarm_armu_c_connector, br_tarm.br_tarm_armu_c_connector]
    bl_rodu_rodl_c is Physics3D.Interactions.Prismatic:
        connectors: [bl_rodl.bl_rodu_rodl_c_connector, bl_rodu.bl_rodu_rodl_c_connector]
        initial_position: 0
    bl_tarm_rodl_c is Physics3D.Interactions.Ball:
        connectors: [bl_tarm.bl_tarm_rodl_c_connector, bl_rodl.bl_tarm_rodl_c_connector]
    br_rodu_rodl_c is Physics3D.Interactions.Prismatic:
        connectors: [br_rodl.br_rodu_rodl_c_connector, br_rodu.br_rodu_rodl_c_connector]
        initial_position: 0
    br_tarm_rodl_c is Physics3D.Interactions.Ball:
        connectors: [br_tarm.br_tarm_rodl_c_connector, br_rodl.br_tarm_rodl_c_connector]
    br_chassi_arml_c is Physics3D.Interactions.Hinge:
        connectors: [br_arml.br_chassi_arml_c_connector, chassis_body.br_chassi_arml_c_connector]
    br_chassi_rodu_c is Physics3D.Interactions.Hinge:
        connectors: [br_rodu.br_chassi_rodu_c_connector, chassis_body.br_chassi_rodu_c_connector]
    bl_chassi_arml_c is Physics3D.Interactions.Hinge:
        connectors: [bl_arml.bl_chassi_arml_c_connector, chassis_body.bl_chassi_arml_c_connector]
    bl_chassi_rodu_c is Physics3D.Interactions.Hinge:
        connectors: [bl_rodu.bl_chassi_rodu_c_connector, chassis_body.bl_chassi_rodu_c_connector]
    bl_tarm_arml_c is Physics3D.Interactions.Ball:
        connectors: [bl_tarm.bl_tarm_arml_c_connector, bl_arml.bl_tarm_arml_c_connector]
    br_tarm_arml_c is Physics3D.Interactions.Ball:
        connectors: [br_arml.br_tarm_arml_c_connector, br_tarm.br_tarm_arml_c_connector]

    bl_chassi_arml_c_range is Physics3D.Interactions.RotationalRange:
        connectors: bl_chassi_arml_c.connectors
        start: -Math.PI / 4
        end: Math.PI / 4
    br_chassi_arml_c_range is Physics3D.Interactions.RotationalRange:
        connectors: br_chassi_arml_c.connectors
        start: -Math.PI / 4
        end: Math.PI / 4

    bl_rodu_rodl_range is Physics3D.Interactions.LinearRange:
        connectors: bl_rodu_rodl_c.connectors
        start: 0.15
        end: -0.15
    br_rodu_rodl_range is Physics3D.Interactions.LinearRange:
        connectors: br_rodu_rodl_c.connectors
        start: 0.15
        end: -0.15
