fix: clean gitignore for Godot C#
This commit is contained in:
48
Scripts/Components/EngineControlUnit.cs
Normal file
48
Scripts/Components/EngineControlUnit.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
|
||||
public class EngineControlUnit
|
||||
{
|
||||
public double Throttle;
|
||||
public bool IsInNeutral = true;
|
||||
|
||||
private const double _revLimit = 7000;
|
||||
private const double _idleRpm = 800;
|
||||
private const double _idleSensitivity = 1e-2;
|
||||
private const double _throttleSensitivity = 20;
|
||||
private const double _neutralThrottleLimit = 0.2;
|
||||
|
||||
private double _idlePosition = 0;
|
||||
private double _targetThrottle = 0;
|
||||
private double _currentThrottle = 0;
|
||||
|
||||
public EngineControlUnit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Update(double dt, Engine engine)
|
||||
{
|
||||
if (engine.RPM > _revLimit)
|
||||
{
|
||||
engine.ThrottlePosition = 0; return;
|
||||
}
|
||||
|
||||
_targetThrottle = Math.Clamp(GetIdleThrottle(dt, engine.RPM) + Throttle, 0, 1);
|
||||
_currentThrottle = Util.Lerp(_currentThrottle, _targetThrottle, dt * _throttleSensitivity);
|
||||
|
||||
if (IsInNeutral) _currentThrottle = Math.Min(_currentThrottle, _neutralThrottleLimit);
|
||||
|
||||
engine.ThrottlePosition = _currentThrottle;
|
||||
}
|
||||
|
||||
public double GetIdleThrottle(double dt, double rpm)
|
||||
{
|
||||
if (rpm > _idleRpm) return 0;
|
||||
|
||||
double diff = rpm - _idleRpm;
|
||||
|
||||
_idlePosition = Math.Clamp(_idlePosition - (diff * _idleSensitivity * dt), 0, 1.0);
|
||||
|
||||
return _idlePosition;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user