Compare commits
3 Commits
558a1eda07
...
b978b821fa
| Author | SHA1 | Date | |
|---|---|---|---|
| b978b821fa | |||
| 562750107a | |||
| 6cb8f716b3 |
@ -117,10 +117,10 @@ public partial class Clutch : PowertrainComponent
|
|||||||
ClutchInput = 1f;
|
ClutchInput = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Controller.SwappedBrakes > 0 )
|
//if ( Controller.SwappedBrakes > 0 )
|
||||||
{
|
//{
|
||||||
ClutchInput = 0;
|
// ClutchInput = 0;
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
if ( Controller.IsClutching > 0 )
|
if ( Controller.IsClutching > 0 )
|
||||||
{
|
{
|
||||||
@ -173,7 +173,7 @@ public partial class Clutch : PowertrainComponent
|
|||||||
OutputInertia = (inertiaSum + halfClutchInertia) * _clutchEngagement + halfClutchInertia;
|
OutputInertia = (inertiaSum + halfClutchInertia) * _clutchEngagement + halfClutchInertia;
|
||||||
|
|
||||||
// Allow the torque output to be only up to the slip torque valu
|
// Allow the torque output to be only up to the slip torque valu
|
||||||
float outputTorqueClamp = SlipTorque * _clutchEngagement;
|
float outputTorqueClamp = Controller.Engine.EstimatedPeakTorque * 1.5f * _clutchEngagement;
|
||||||
|
|
||||||
OutputTorque = InputTorque;
|
OutputTorque = InputTorque;
|
||||||
OutputTorque = Math.Clamp( OutputTorque, 0, outputTorqueClamp );
|
OutputTorque = Math.Clamp( OutputTorque, 0, outputTorqueClamp );
|
||||||
|
|||||||
@ -34,6 +34,8 @@ public abstract partial class VeloXBase
|
|||||||
public float SwappedBrakes => IsInputSwapped ? Throttle : Brakes;
|
public float SwappedBrakes => IsInputSwapped ? Throttle : Brakes;
|
||||||
|
|
||||||
|
|
||||||
|
public bool AnyInput => Throttle > 0 || Brakes > 0;
|
||||||
|
|
||||||
[Sync]
|
[Sync]
|
||||||
public float VerticalInput
|
public float VerticalInput
|
||||||
{
|
{
|
||||||
@ -106,7 +108,11 @@ public abstract partial class VeloXBase
|
|||||||
}
|
}
|
||||||
protected void UpdateInput()
|
protected void UpdateInput()
|
||||||
{
|
{
|
||||||
VerticalInput = Input.AnalogMove.x;
|
//VerticalInput = Input.AnalogMove.x;
|
||||||
|
|
||||||
|
Brakes = Input.Brake;
|
||||||
|
Throttle = Input.Throttle;
|
||||||
|
|
||||||
Handbrake = Input.Down( "Handbrake" ) ? 1 : 0;
|
Handbrake = Input.Down( "Handbrake" ) ? 1 : 0;
|
||||||
|
|
||||||
SteeringAngle = Input.AnalogMove.y;
|
SteeringAngle = Input.AnalogMove.y;
|
||||||
|
|||||||
@ -42,12 +42,12 @@ public abstract partial class VeloXBase
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
v.BrakeTorque = SwappedBrakes * BrakeForce * 0.7f;
|
v.BrakeTorque = SwappedBrakes * BrakeForce * 0.2f;
|
||||||
v.BrakeTorque += Handbrake * HandbrakeForce;
|
v.BrakeTorque += Handbrake * HandbrakeForce;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( TotalSpeed < 1 && Input.AnalogMove.x == 0 )
|
if ( TotalSpeed < 1 && !AnyInput )
|
||||||
{
|
{
|
||||||
v.BrakeTorque = HandbrakeForce;
|
v.BrakeTorque = HandbrakeForce;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -249,11 +249,14 @@ public partial class VeloXWheel
|
|||||||
{
|
{
|
||||||
lowSpeedReferenceIsSet = false;
|
lowSpeedReferenceIsSet = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ForwardFriction.Force = Math.Clamp( ForwardFriction.Force, -peakForwardFrictionForce, peakForwardFrictionForce );
|
ForwardFriction.Force = Math.Clamp( ForwardFriction.Force, -peakForwardFrictionForce, peakForwardFrictionForce );
|
||||||
|
|
||||||
SidewayFriction.Force = Math.Clamp( SidewayFriction.Force, -peakSideFrictionForce, peakSideFrictionForce );
|
SidewayFriction.Force = Math.Clamp( SidewayFriction.Force, -peakSideFrictionForce, peakSideFrictionForce );
|
||||||
|
|
||||||
if ( absForwardSpeed > 2f || absAngularVelocity > 4f )
|
|
||||||
|
if ( absForwardSpeed > 0.01f || absAngularVelocity > 0.01f )
|
||||||
{
|
{
|
||||||
|
|
||||||
float forwardSlipPercent = ForwardFriction.Slip / Tire.GetPeakSlip();
|
float forwardSlipPercent = ForwardFriction.Slip / Tire.GetPeakSlip();
|
||||||
@ -261,7 +264,7 @@ public partial class VeloXWheel
|
|||||||
float slipCircleLimit = MathF.Sqrt( forwardSlipPercent * forwardSlipPercent + sideSlipPercent * sideSlipPercent );
|
float slipCircleLimit = MathF.Sqrt( forwardSlipPercent * forwardSlipPercent + sideSlipPercent * sideSlipPercent );
|
||||||
if ( slipCircleLimit > 1f )
|
if ( slipCircleLimit > 1f )
|
||||||
{
|
{
|
||||||
float beta = MathF.Atan2( sideSlipPercent, forwardSlipPercent * 0.9f );
|
float beta = MathF.Atan2( sideSlipPercent, forwardSlipPercent * 1.05f );
|
||||||
float sinBeta = MathF.Sin( beta );
|
float sinBeta = MathF.Sin( beta );
|
||||||
float cosBeta = MathF.Cos( beta );
|
float cosBeta = MathF.Cos( beta );
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Sandbox;
|
using Sandbox;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace VeloX;
|
namespace VeloX;
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,7 @@ public partial class VeloXWheel : Component
|
|||||||
internal void Update( VeloXBase vehicle, in float dt )
|
internal void Update( VeloXBase vehicle, in float dt )
|
||||||
{
|
{
|
||||||
UpdateVisuals( vehicle, dt );
|
UpdateVisuals( vehicle, dt );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateVisuals( VeloXBase vehicle, in float dt )
|
private void UpdateVisuals( VeloXBase vehicle, in float dt )
|
||||||
|
|||||||
@ -40,7 +40,7 @@ public partial class VeloXCar
|
|||||||
_sideArea = Dimensions.y * Dimensions.z * 0.8f;
|
_sideArea = Dimensions.y * Dimensions.z * 0.8f;
|
||||||
_forwardSpeed = LocalVelocity.x.InchToMeter();
|
_forwardSpeed = LocalVelocity.x.InchToMeter();
|
||||||
_sideSpeed = LocalVelocity.y.InchToMeter();
|
_sideSpeed = LocalVelocity.y.InchToMeter();
|
||||||
longitudinalDragForce = 0.5f * RHO * _frontalArea * FrontalCd * (_forwardSpeed * _forwardSpeed) * (_forwardSpeed > 0 ? -1f : 1f);
|
longitudinalDragForce = 2 * RHO * _frontalArea * FrontalCd * (_forwardSpeed * _forwardSpeed) * (_forwardSpeed > 0 ? -1f : 1f);
|
||||||
lateralDragForce = 0.5f * RHO * _sideArea * SideCd * (_sideSpeed * _sideSpeed) * (_sideSpeed > 0 ? -1f : 1f);
|
lateralDragForce = 0.5f * RHO * _sideArea * SideCd * (_sideSpeed * _sideSpeed) * (_sideSpeed > 0 ? -1f : 1f);
|
||||||
var force = new Vector3( longitudinalDragForce.MeterToInch(), lateralDragForce.MeterToInch(), 0 ).RotateAround( Vector3.Zero, WorldRotation );
|
var force = new Vector3( longitudinalDragForce.MeterToInch(), lateralDragForce.MeterToInch(), 0 ).RotateAround( Vector3.Zero, WorldRotation );
|
||||||
Body.ApplyForce( force );
|
Body.ApplyForce( force );
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using Sandbox;
|
using Sandbox;
|
||||||
|
|
||||||
namespace VeloX;
|
namespace VeloX;
|
||||||
|
|
||||||
public class InputResolver
|
public class InputResolver
|
||||||
{
|
{
|
||||||
public Connection Driver { get; internal set; }
|
public Connection Driver { get; internal set; }
|
||||||
@ -30,6 +31,27 @@ public class InputResolver
|
|||||||
return IsDriverActive && Input.Down( action );
|
return IsDriverActive && Input.Down( action );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float Brake
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( Input.UsingController )
|
||||||
|
return Input.GetAnalog( InputAnalog.LeftTrigger );
|
||||||
|
|
||||||
|
return Input.Down( "Brake" ) ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public float Throttle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( Input.UsingController )
|
||||||
|
return Input.GetAnalog( InputAnalog.RightTrigger );
|
||||||
|
|
||||||
|
return Input.Down( "Throttle" ) ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool Pressed( string action )
|
public bool Pressed( string action )
|
||||||
{
|
{
|
||||||
return IsDriverActive && Input.Pressed( action );
|
return IsDriverActive && Input.Pressed( action );
|
||||||
@ -40,6 +62,11 @@ public class InputResolver
|
|||||||
return IsDriverActive && Input.Released( action );
|
return IsDriverActive && Input.Released( action );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float GetAnalog( InputAnalog analog )
|
||||||
|
{
|
||||||
|
return IsDriverActive ? Input.GetAnalog( analog ) : 0f;
|
||||||
|
}
|
||||||
|
|
||||||
public void TriggerHaptics( float leftMotor, float rightMotor, float leftTrigger = 0f, float rightTrigger = 0f, int duration = 500 )
|
public void TriggerHaptics( float leftMotor, float rightMotor, float leftTrigger = 0f, float rightTrigger = 0f, int duration = 500 )
|
||||||
{
|
{
|
||||||
if ( IsDriverActive )
|
if ( IsDriverActive )
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user