OldBlueWater/BlueWater/Assets/NWH/Common/Scripts/Vehicle/WheelUAPI.cs
2023-12-19 11:31:29 +09:00

120 lines
3.8 KiB
C#

using UnityEngine;
using UnityEngine.Events;
namespace NWH.Common.Vehicles
{
public abstract class WheelUAPI : MonoBehaviour
{
// INPUTS
public abstract float MotorTorque { get; set; }
public abstract float BrakeTorque { get; set; }
public abstract float CounterTorque { get; }
public abstract float RollingResistanceTorque { get; set; }
public abstract float SteerAngle { get; set; }
// PHYSICAL PROPERTIES
public abstract float Mass { get; set; }
public abstract float Radius { get; set; }
public abstract float Width { get; set; }
public abstract float Inertia { get; set; }
public abstract float RPM { get; }
public abstract float AngularVelocity { get; }
public abstract Vector3 WheelPosition { get; }
public abstract float Load { get; }
public abstract float MaxLoad { get; set; }
public abstract bool IsGrounded { get; }
public abstract float Damage { get; set; }
public abstract float Camber { get; set; }
// SPRING
public abstract float SpringMaxLength { get; set; }
public abstract float SpringMaxForce { get; set; }
public abstract float SpringForce { get; }
public abstract float SpringLength { get; }
public abstract float SpringCompression { get; }
// DAMPER
public abstract float DamperBumpRate { get; set; }
public abstract float DamperReboundRate { get; set; }
public abstract float DamperForce { get; }
// FRICTION
public abstract FrictionPreset FrictionPreset { get; set; }
public abstract float LongitudinalFrictionGrip { get; set; }
public abstract float LongitudinalFrictionStiffness { get; set; }
public abstract float LateralFrictionGrip { get; set; }
public abstract float LateralFrictionStiffness { get; set; }
public abstract float ForceApplicationPointDistance { get; set; }
// LONGITUDINAL FRICTION
public abstract float LongitudinalSlip { get; }
public abstract float LongitudinalSpeed { get; }
public virtual bool IsSkiddingLongitudinally
{
get { return NormalizedLongitudinalSlip > 0.35f; }
}
public virtual float NormalizedLongitudinalSlip
{
get
{
float lngSlip = LongitudinalSlip;
float absLngSlip = lngSlip < 0f ? -lngSlip : lngSlip;
return absLngSlip < 0f ? 0f : absLngSlip > 1f ? 1f : absLngSlip;
}
}
// LATERAL FRICTION
public abstract float LateralSlip { get; }
public abstract float LateralSpeed { get; }
public virtual bool IsSkiddingLaterally
{
get { return NormalizedLateralSlip > 0.35f; }
}
public virtual float NormalizedLateralSlip
{
get
{
float latSlip = LateralSlip;
float absLatSlip = latSlip < 0f ? -latSlip : latSlip;
return absLatSlip < 0f ? 0f : absLatSlip > 1f ? 1f : absLatSlip;
}
}
// FRICTION CIRCLE
public abstract float FrictionCircleShape { get; set; }
public abstract float FrictionCircleStrength { get; set; }
// COLLISION
public abstract Vector3 HitPoint { get; }
public abstract Vector3 HitNormal { get; }
public abstract Collider HitCollider { get; }
// VISUAL
public abstract GameObject WheelVisual { get; set; }
public abstract GameObject NonRotatingVisual { get; set; }
// GENERAL
public abstract Rigidbody ParentRigidbody { get; }
public abstract bool AutoSimulate { get; set; }
public abstract void Step();
public abstract void Validate();
}
}