45 lines
1.2 KiB
C#
45 lines
1.2 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
public class Brake : MonoBehaviour {
|
|
public float _friction = 100;
|
|
public float _radius = 0.2f;
|
|
public float _area = 0.2f;
|
|
public float _max_pressure = 10;
|
|
public float _bias = 1;
|
|
private float _threshold = 4.0e-4f;
|
|
private bool _is_locked;
|
|
|
|
public Brake() {
|
|
|
|
}
|
|
|
|
public Brake (float sliding, float radius, float area, float max_pressure, float bias) {
|
|
_friction = sliding;
|
|
_radius = radius;
|
|
_area = area;
|
|
_max_pressure = max_pressure * bias;
|
|
_bias = bias;
|
|
}
|
|
|
|
public float GetTorque(float factor, float rotational_speed) {
|
|
// `factor' is the fraction of maximum pressure applied.
|
|
float pressure = factor * _bias * _max_pressure;
|
|
float normal = pressure * _area;
|
|
float torque = _friction * normal * _radius;
|
|
float velocity = _radius * rotational_speed;
|
|
if(velocity < 0.0f)
|
|
torque *= -1;
|
|
|
|
// See if the brake is locked.
|
|
if(Mathf.Abs(velocity) < (_threshold * normal)) {
|
|
_is_locked = true;
|
|
torque = 0.0f;
|
|
} else {
|
|
_is_locked = false;
|
|
}
|
|
|
|
return torque;
|
|
}
|
|
}
|