SimulatorFans/Client/source/Simulator.AssettoCorsa.pas

115 lines
2.1 KiB
ObjectPascal

unit Simulator.AssettoCorsa;
// #ToDo1 -oMvR: 2-9-2017: configurable speed for full fan power
interface
uses
System.Classes,
Vcl.Controls,
Vcl.ExtCtrls,
Vcl.Forms,
Vcl.StdCtrls,
Simulator.Base,
Simulator.Registry, Vcl.Samples.Spin;
type
TAssettoCorsaFrame = class(TSimulatorBaseFrame)
SimTimer: TTimer;
StatusCaptionLabel: TLabel;
StatusLabel: TLabel;
CurrentSpeedCaptionLabel: TLabel;
FanFullSpeedCaptionLabel: TLabel;
FanFullSpeedUnitsLabel: TLabel;
FanFullSpeedEdit: TSpinEdit;
CurrentSpeedLabel: TLabel;
procedure SimTimerTimer(Sender: TObject);
public
procedure Initialize; override;
procedure Start; override;
procedure Stop; override;
end;
implementation
uses
System.SysUtils,
AssettoCorsa.SharedMemory;
{$R *.dfm}
{ TAssettoCorsaFrame }
procedure TAssettoCorsaFrame.Initialize;
begin
inherited Initialize;
CurrentSpeedLabel.Caption := '';
end;
procedure TAssettoCorsaFrame.SimTimerTimer(Sender: TObject);
var
gameState: IAssettoCorsaSharedMemory;
physics: TACSMPhysics;
fanValue: Integer;
begin
gameState := GetAssettoCorsaSharedMemory;
if gameState.GetPhysics(physics) then
begin
StatusLabel.Caption := 'Connected';
CurrentSpeedLabel.Caption := Format('%.0f km/h', [physics.speedKmh]);
if Fans.Ready then
begin
fanValue := Trunc((physics.speedKmh / FanFullSpeedEdit.Value) * 255);
if fanValue > 255 then
fanValue := 255;
Fans.SetAll(fanValue);
end;
SimTimer.Interval := 250;
end else
begin
StatusLabel.Caption := 'Assetto Corsa not running';
CurrentSpeedLabel.Caption := '';
SimTimer.Interval := 3000;
if Fans.IsRunning then
Fans.SetAll(0);
end;
end;
procedure TAssettoCorsaFrame.Start;
begin
inherited Start;
SimTimer.Enabled := True;
end;
procedure TAssettoCorsaFrame.Stop;
begin
SimTimer.Enabled := False;
inherited Stop;
end;
initialization
RegisterSimulator('AssettoCorsa', 'Assetto Corsa',
function(AFans: ISimulatorFans): ISimulator
begin
Result := TSimulatorFrame<TAssettoCorsaFrame>.Create(AFans);
end);
end.