Other blocks #

These are not used by VPVehicleController, but they're still available for custom vehicle controllers.

Learn more about the Block protocol

DirectDrive #

Ideal motor that applies a torque and reaches up to the given rpm. This block exposes one output, no inputs.

namespace VehiclePhysics
{

public class DirectDrive : Block
    {
    // Motor input (0..1)
    public float motorInput = 0.0f;

    // Settings. Torque is Nm.
    public float maxMotorTorque = 100.0f;
    public float maxRpm = 500.0f;

    // Drive state
    public float angularVelocity { get; }
    public float torque { get; }
    public float sensorLoad { get; }

    // Numerical damping helps preventing resonances, but also reduces the precision of the values.
    public float damping = 0.95f;
    }

}

SynchronousDrive #

A direct drive motor that enforces a RPM value using the given torque amount.

namespace VehiclePhysics
{

public class SynchronousDrive : Block
    {
    // Rpm to enforce
    public float targetRpm = 0.0f;

    // Max allowed torque (Nm)
    public float maxTorque = 100.0f;

    // Drive state
    public float angularVelocity { get { return m_output.L / m_output.I; } }
    public float torque { get { return m_output.outTd; } }

    // Numerical damping helps preventing resonances, but also reduces the precision of the values.
    public float damping = 0.95f;
    }

}

Gear #

A single gear ratio imposed between the input and output blocks.

Ratio can be negative but cannot be zero or close to zero.

namespace VehiclePhysics
{

public class Gear : Block
    {
    public float ratio = 1.0f;
    }
}

Gearset #

Block providing a set of gears to select from.

Imposes the selected gear ratio between input and output. Simple implementation. Provides immediate shifting and no neutral.

namespace VehiclePhysics
{

public class Gearset : Block
    {
    // Selected gear
    public int gearInput = 0;

    // Settings with the gear ratios
    public Settings settings = new Settings();

    public class Settings
        {
        public float[] ratios = { 1.0f, 2.0f };
        }
    }

}

TorqueInjector #

Injects the specific amount of torque to the output block

namespace VehiclePhysics
{

public class TorqueInjector : Block
    {
    // Torque in Nm
    public float torque = 0.0f;
    }

}

Clutch #

A simple lock-ratio based clutch that may be inserted anywhere in the drivetrain. Intended for disengaging parts of the transmission (i.e. as in a bulldozer).

The Engine block includes its own, more complete, clutch implementation.

namespace VehiclePhysics
{

public class Clutch : Block
    {
    // Lock ratio of the clutch. 0 = fully disconnected, 1 = hard connection

    public float lockRatio = 1.0f;

    // Proportion of the input inertia to be preserved when the cluch disengages the input.
    // Best value: the smallest value that preserves the numerical stability.
    //
    // A value too low may cause numerical blow up if the clutch is placed after a differential.

    public float inertiaRatio = 0.1f;
    }
}

Brake #

Block providing a brake between the input and the wheel. Requires its output to be connected directly to a Wheel block.

For most vehicles it's better to Use the Brakes helper class instead, which controls all brakes once providing brake balancing, handbrake and ABS as well.

namespace VehiclePhysics
{

public class Brake : Block
    {
    // Brake input (0..1)
    public float brakeInput = 0.0f;

    // Maximum brake torque (Nm)
    public float maxBrakeTorque = 500.0f;
    }
}