Files
StandardSence/StandardScene.Magnetic/Tasking/Fass2TrackFieldReader.cs
T

85 lines
3.0 KiB
C#

using SimpleCore.PropType;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace StandardScene.Magnetic.Tasking
{
internal sealed class Fass2TrackMotionData
{
public float Speed { get; set; } = 0.2f;
public bool Reverse { get; set; }
public float CarDirectionBias { get; set; }
public bool EnableCarAbsoluteDirection { get; set; }
public float CarAbsoluteDirection { get; set; }
public byte? Byroad { get; set; }
public byte? Direction { get; set; }
public byte? Orientation { get; set; }
}
internal static class Fass2TrackFieldReader
{
public static Fass2TrackMotionData Read(Track track)
{
var data = new Fass2TrackMotionData();
if (track?.fields == null)
{
return data;
}
if (track.fields.TryGetValue("Speed", out var speedText) &&
float.TryParse(speedText, NumberStyles.Float, CultureInfo.InvariantCulture, out var speed))
{
data.Speed = speed;
}
if (track.fields.TryGetValue("Reverse", out var reverseText) &&
bool.TryParse(reverseText, out var reverse))
{
data.Reverse = reverse;
}
if (track.fields.TryGetValue("CarDirectionBias", out var biasText) &&
float.TryParse(biasText, NumberStyles.Float, CultureInfo.InvariantCulture, out var bias))
{
data.CarDirectionBias = bias;
}
if (track.fields.TryGetValue("EnableCarAbsoluteDirection", out var enableAbsText) &&
bool.TryParse(enableAbsText, out var enableAbs))
{
data.EnableCarAbsoluteDirection = enableAbs;
}
if (track.fields.TryGetValue("CarAbsoluteDirection", out var absText) &&
float.TryParse(absText, NumberStyles.Float, CultureInfo.InvariantCulture, out var absDir))
{
data.CarAbsoluteDirection = absDir;
}
data.Byroad = TryReadByte(track.fields, "Fass2_Byroad");
if (data.Byroad == null && track.fields.TryGetValue("magSelect", out var magSelect) &&
byte.TryParse(magSelect, NumberStyles.Integer, CultureInfo.InvariantCulture, out var magValue))
{
data.Byroad = magValue;
}
data.Direction = TryReadByte(track.fields, "Fass2_Direction");
data.Orientation = TryReadByte(track.fields, "Fass2_Orientation");
return data;
}
private static byte? TryReadByte(Dictionary<string, string> fields, string key)
{
if (!fields.TryGetValue(key, out var text) || string.IsNullOrWhiteSpace(text))
{
return null;
}
return byte.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out var value)
? value
: (byte?)null;
}
}
}