Skip to content

Commit

Permalink
代码优化 兼容地平线5
Browse files Browse the repository at this point in the history
  • Loading branch information
Ning committed Nov 18, 2021
1 parent 106eb68 commit d49e212
Show file tree
Hide file tree
Showing 15 changed files with 679 additions and 275 deletions.
110 changes: 110 additions & 0 deletions WpfApp1/DataHandle/DataAdapter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
using System;

namespace F1Tools
{
internal static class DataAdapter
{
public static LocalData AsLocalData(this Codemasters.F1_2019.Packet packet)
{
if (packet == null)
return null;

var result = new LocalData();
if (packet.PacketType == Codemasters.F1_2019.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2019.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

result.Brake = data.Brake;
result.Throttle = data.Throttle;
result.SpeedKph = data.SpeedKph;
result.EngineRpm = data.EngineRpm;
result.Gear = data.Gear;
result.DrsActive = data.DrsActive;
}
else if (packet.PacketType == Codemasters.F1_2019.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2019.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

result.DrsAllowed = data.DrsAllowed;
}
return result;
}

public static LocalData AsLocalData(this Codemasters.F1_2020.Packet packet)
{
if (packet == null)
return null;

var result = new LocalData();
if (packet.PacketType == Codemasters.F1_2020.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2020.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

result.Brake = data.Brake;
result.Throttle = data.Throttle;
result.SpeedKph = data.SpeedKph;
result.EngineRpm = data.EngineRpm;
result.Gear = data.Gear;
result.DrsActive = data.DrsActive;
}
else if (packet.PacketType == Codemasters.F1_2020.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2020.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

result.DrsAllowed = data.DrsAllowed;
result.DrsFailure = data.DrsFailure;
}
return result;
}

public static LocalData AsLocalData(this Codemasters.F1_2021.Packet packet)
{
if (packet == null)
return null;

var result = new LocalData();
if (packet.PacketType == Codemasters.F1_2021.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2021.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

result.Brake = data.Brake;
result.Throttle = data.Throttle;
result.SpeedKph = data.SpeedKph;
result.EngineRpm = data.EngineRpm;
result.Gear = data.Gear;
result.DrsActive = data.DrsActive;
}
else if (packet.PacketType == Codemasters.F1_2021.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2021.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

result.DrsAllowed = data.DrsAllowed;
}
return result;
}

public static LocalData AsLocalData(this float[] fh5Data)
{
var result = new LocalData
{
Throttle = fh5Data[80] / 255F,
Brake = fh5Data[81] / 255F,
Clutch = fh5Data[82] / 255F,
Gear = (int)fh5Data[84],
EngineRpm = fh5Data[4],
SpeedKph = fh5Data[64] * 3.6F,
};
if (result.Gear == 0)
result.Gear = -1;
else if (result.Gear == 11)
result.Gear = 0;
return result;
}
}
}
12 changes: 7 additions & 5 deletions WpfApp1/DataHandle/DataReciver.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Net;
using System;
using System.Net;
using System.Net.Sockets;
using static F1Tools.TypeFactory;

Expand Down Expand Up @@ -28,10 +29,11 @@ private static void MicroTimer_OnRunningCallback(int id, int msg, int user, int
var bytes = UDP.Receive(ref IP);
if (bytes.Length > 0)
{
var packet = GetPacket(bytes, _version, out _version);
if (_version == GameVersion.Unkonwn)
var data = GetData(bytes, _version, out _version);
if (_version == GameVersion.Unkonwn || data == null)
return;
ReciveEvent?.Invoke(packet);
ReciveEvent?.Invoke(data);
//Console.WriteLine($"{data.Throttle} {data.Brake}");
}
}

Expand All @@ -56,7 +58,7 @@ public static void Dispose()
UDP.Dispose();
}

public delegate void ReciverHandler(object packet);
public delegate void ReciverHandler(LocalData localData);
public static event ReciverHandler ReciveEvent;
}
}
109 changes: 19 additions & 90 deletions WpfApp1/DataHandle/ShowDataHandle.cs
Original file line number Diff line number Diff line change
@@ -1,98 +1,27 @@
using static F1Tools.TypeFactory;

namespace F1Tools
namespace F1Tools
{
public static class ShowDataHandle
{
public static void F1Handle(F1Instrument f1, dynamic packet)
public static void F1Handle(F1Instrument f1, LocalData data)
{
if (packet == null)
if (data == null)
return;

switch (DataReciver.Version)
{
case GameVersion.F1_2019:
Handle19(f1, packet);
break;
case GameVersion.F1_2020:
Handle20(f1, packet);
break;
case GameVersion.F1_2021:
Handle21(f1, packet);
break;
default:
break;
}
}

private static void Handle19(F1Instrument f1, Codemasters.F1_2019.Packet packet)
{
if (packet.PacketType == Codemasters.F1_2019.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2019.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

f1.SetBrake(data.Brake);
f1.SetThrottle(data.Throttle);
f1.SetSpeed(data.SpeedKph);
f1.SetRPM(data.EngineRpm);
f1.SetGear(data.Gear);
f1.SetDRS(data.DrsActive);
}
else if (packet.PacketType == Codemasters.F1_2019.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2019.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

f1.DRSEnable(data.DrsAllowed);
}
}

private static void Handle20(F1Instrument f1, Codemasters.F1_2020.Packet packet)
{
if (packet.PacketType == Codemasters.F1_2020.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2020.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

f1.SetBrake(data.Brake);
f1.SetThrottle(data.Throttle);
f1.SetSpeed(data.SpeedKph);
f1.SetRPM(data.EngineRpm);
f1.SetGear(data.Gear);
f1.SetDRS(data.DrsActive);
}
else if (packet.PacketType == Codemasters.F1_2020.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2020.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

f1.DRSEnable(data.DrsAllowed);
f1.DRSNegative(data.DrsFailure);
}
}

private static void Handle21(F1Instrument f1, Codemasters.F1_2021.Packet packet)
{
if (packet.PacketType == Codemasters.F1_2021.PacketType.CarTelemetry)
{
var curPack = packet as Codemasters.F1_2021.TelemetryPacket;
var data = curPack.FieldTelemetryData[curPack.PlayerCarIndex];

f1.SetBrake(data.Brake);
f1.SetThrottle(data.Throttle);
f1.SetSpeed(data.SpeedKph);
f1.SetRPM(data.EngineRpm);
f1.SetGear(data.Gear);
f1.SetDRS(data.DrsActive);
}
else if (packet.PacketType == Codemasters.F1_2021.PacketType.CarStatus)
{
var curPack = packet as Codemasters.F1_2021.CarStatusPacket;
var data = curPack.FieldCarStatusData[0];

f1.DRSEnable(data.DrsAllowed);
}
if (data.Brake.HasValue)
f1.SetBrake(data.Brake.Value);
if (data.Throttle.HasValue)
f1.SetThrottle(data.Throttle.Value);
if (data.SpeedKph.HasValue)
f1.SetSpeed((int)data.SpeedKph.Value);
if (data.EngineRpm.HasValue)
f1.SetRPM((int)data.EngineRpm.Value);
if (data.Gear.HasValue)
f1.SetGear(data.Gear.Value);
if (data.DrsActive.HasValue)
f1.SetDRS(data.DrsActive.Value);
if (data.DrsAllowed.HasValue)
f1.DRSEnable(data.DrsAllowed.Value);
if (data.DrsFailure.HasValue)
f1.DRSNegative(data.DrsFailure.Value);
}
}
}
Loading

0 comments on commit d49e212

Please sign in to comment.