using Sandbox; using System; namespace VeloX; [Group( "VeloX" )] [Title( "VeloX - Car" )] public partial class VeloXCar : VeloXBase { protected override void OnFixedUpdate() { base.OnFixedUpdate(); if ( IsProxy ) return; UpdateABS(); UpdateESC(); UpdateTCS(); var dt = Time.Delta; //EngineThink( dt ); SimulateAerodinamics( dt ); //WheelThink( dt ); UpdateSteering( dt ); UpdateUnflip( dt ); UpdateDrift( dt ); } private void UpdateUnflip( float dt ) { if ( Math.Abs( SteeringAngle ) < 0.1f ) return; if ( IsOnGround || Math.Abs( WorldRotation.Roll() ) < 60 ) return; var angVel = Body.WorldTransform.PointToLocal( WorldPosition + Body.AngularVelocity ); float maxAngularVelocity = 2.0f; float velocityFactor = 1.0f - Math.Clamp( Math.Abs( angVel.x ) / maxAngularVelocity, 0f, 1f ); if ( velocityFactor <= 0.01f ) return; var force = SteeringAngle * velocityFactor * 150; Body.AngularVelocity -= Body.WorldRotation.Forward * force * dt; } }