Files
2025-05-13 03:19:28 +03:00

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;
}
}