It is rendered using the same cabview control that was used for the CircularSpeedGauge, just for testing.
A quick way to test it is using the default MSTS script, which I have modified to show the new DMI features.
Regarding the API, I have created a dedicated ETCSStatus class accessible from the TCS, but this can be changed if there's a more convenient way to do it.
public class ETCSStatus { // General status public bool DMIActive = true; ... // Speed and distance monitoring ... // Planning information public bool PlanningAreaShown = true; public List<PlanningTarget> SpeedTargets = new List<PlanningTarget>(); public PlanningTarget? IndicationMarkerTarget; public float? IndicationMarkerDistanceM; public List<GradientProfileElement> GradientProfile = new List<GradientProfileElement>(); public ETCSStatus Clone() { // Clone all elements and lists so they can be accessed safely by RenderProcess } } public struct PlanningTarget { public float DistanceToTrainM; public readonly float TargetSpeedMpS; public PlanningTarget(float distanceToTrainM, float targetSpeedMpS) { DistanceToTrainM = distanceToTrainM; TargetSpeedMpS = targetSpeedMpS; } } public struct GradientProfileElement { public float DistanceToTrainM; public int GradientPerMille; }
I have found some issues due to floating point to integer round errors when downscaling the components, so bad-looking areas will appear with low resolution screens or small DMI area in cab.