# We use this shaft to be able to have same inertia set to all shafts
CruiserShaft is DriveTrain.Shaft:
    inertia.inertia: 1.0

# Drive train for 6-wheeled cruiser. Containing a velocity motor and differentials
DriveTrain is Physics3D.System:
    front_left_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper
    front_right_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper
    rear_left_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper
    rear_right_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper
    mid_left_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper
    mid_right_suspension is Vehicles.Suspensions.SingleMate.LinearSpringDamper

    motor_shaft is CruiserShaft
    diff_front_shaft is CruiserShaft
    diff_rear_shaft is CruiserShaft
    diff_front_left_shaft is CruiserShaft
    diff_front_right_shaft is CruiserShaft
    diff_rear_left_shaft is CruiserShaft
    diff_rear_right_shaft is CruiserShaft

    diff_rear_center_shaft is CruiserShaft
    diff_mid_shaft is CruiserShaft
    diff_mid_left_shaft is CruiserShaft
    diff_mid_right_shaft is CruiserShaft

    motor is Physics1D.Interactions.RotationalVelocityMotor:
        connectors: [motor_shaft.input]
        target_speed: 0.0
        min_effort: -6000
        max_effort: 6000

    differential_center is DriveTrain.Differential:
        drive_shaft: motor_shaft
        left_axle_shaft: diff_front_shaft
        right_axle_shaft: diff_rear_center_shaft
        locked_up: true

    differential_front is DriveTrain.Differential:
        drive_shaft: diff_front_shaft
        left_axle_shaft: diff_front_left_shaft
        right_axle_shaft: diff_front_right_shaft

    differential_rear is DriveTrain.Differential:
        drive_shaft: diff_rear_shaft
        left_axle_shaft: diff_rear_left_shaft
        right_axle_shaft: diff_rear_right_shaft

    front_left_actuator is Vehicles.Wheels.Actuator:
        mate_3d: front_left_suspension.mate
        connector_1d: diff_front_left_shaft.output

    front_right_actuator is Vehicles.Wheels.Actuator:
        mate_3d: front_right_suspension.mate
        connector_1d: diff_front_right_shaft.output

    differential_rear_center is DriveTrain.Differential:
        drive_shaft: diff_rear_center_shaft
        left_axle_shaft: diff_mid_shaft
        right_axle_shaft: diff_rear_shaft
        locked_up: true

    differential_mid is DriveTrain.Differential:
        drive_shaft: diff_mid_shaft
        left_axle_shaft: diff_mid_left_shaft
        right_axle_shaft: diff_mid_right_shaft

    mid_left_actuator is Vehicles.Wheels.Actuator:
        mate_3d: mid_left_suspension.mate
        connector_1d: diff_mid_left_shaft.output

    mid_right_actuator is Vehicles.Wheels.Actuator:
        mate_3d: mid_right_suspension.mate
        connector_1d: diff_mid_right_shaft.output

    rear_left_actuator is Vehicles.Wheels.Actuator:
        mate_3d: rear_left_suspension.mate
        connector_1d: diff_rear_left_shaft.output

    rear_right_actuator is Vehicles.Wheels.Actuator:
        mate_3d: rear_right_suspension.mate
        connector_1d: diff_rear_right_shaft.output
