public override void PrepareFrame(ETCSStatus status) { if (Visible != status.PlanningAreaShown) { Visible = status.PlanningAreaShown; if (Visible) { ButtonScaleUp.Enabled = MaxViewingDistanceM > MinZoomDistanceM; ButtonScaleDown.Enabled = MaxViewingDistanceM < MaxZoomDistanceM; ButtonScaleUp.Visible = true; ButtonScaleDown.Visible = true; } else { ButtonScaleDown.Enabled = false; ButtonScaleUp.Enabled = false; ButtonScaleUp.Visible = false; ButtonScaleDown.Visible = false; } } if (Visible) { IndicationMarkerTarget = status.IndicationMarkerTarget; IndicationMarkerDistanceM = status.IndicationMarkerDistanceM; CreateTrackConditions(status.PlanningTrackConditions); CreatePASP(status.SpeedTargets); CreateTargetSpeeds(status.SpeedTargets); CreateGradient(status.GradientProfile); } }
public override void PrepareFrame(ETCSStatus status) { if (Visible != status.TextMessageAreaShown) { Visible = status.TextMessageAreaShown; ButtonScrollUp.Visible = Visible; ButtonScrollDown.Visible = Visible; } MessageList = status.TextMessages; if (!Visible) { return; } if (AcknowledgingMessage.HasValue) { if (MessageList.Contains(AcknowledgingMessage.Value)) { return; } AcknowledgingMessage = null; } MessageList.Sort(CompareMessages); SetMessages(); ButtonScrollDown.Enabled = CurrentPage < NumPages - 1; ButtonScrollUp.Enabled = CurrentPage > 0; Enabled = AcknowledgingMessage != null; }
public override void PrepareFrame(ETCSStatus status) { base.PrepareFrame(status); foreach (var text in CaptionText) { text.Color = Enabled ? ColorGrey : ColorDarkGrey; } }
public override void PrepareFrame(ETCSStatus status) { if (!Visible) { return; } base.PrepareFrame(status); foreach (var area in SubAreas) { area.PrepareFrame(status); } }
public override void PrepareFrame(ETCSStatus status) { TTIWidth = 0; float?tti = null; if (status.TimeToIndicationS.HasValue) { TTIColor = Color.White; tti = status.TimeToIndicationS; } if (status.TimeToPermittedS.HasValue) { switch (status.CurrentSupervisionStatus) { case SupervisionStatus.Intervention: TTIColor = ColorRed; break; case SupervisionStatus.Warning: case SupervisionStatus.Overspeed: TTIColor = ColorOrange; break; default: TTIColor = ColorYellow; break; } tti = status.TimeToPermittedS; } if (tti.HasValue) { foreach (int n in Enumerable.Range(1, 10)) { if (T_dispTTI * (10 - n) / 10f <= tti && tti < T_dispTTI * (10 - (n - 1)) / 10f) { TTIWidth = 5 * n; break; } } } }
public void PrepareFrame(float elapsedSeconds) { ETCSStatus currentStatus = Locomotive.TrainControlSystem.ETCSStatus; ETCSStatus = currentStatus; Active = currentStatus != null && currentStatus.DMIActive; if (!Active) { return; } BlinkerTime += elapsedSeconds; BlinkerTime -= (int)BlinkerTime; Blinker2Hz = BlinkerTime < 0.5; Blinker4Hz = BlinkerTime < 0.25 || (BlinkerTime > 0.5 && BlinkerTime < 0.75); foreach (var area in Windows) { area.PrepareFrame(currentStatus); } }
public override void PrepareFrame(ETCSStatus status) { DisplayDistanceBar = DisplayDistanceText = false; if (!status.TargetDistanceM.HasValue) { return; } if (status.CurrentMode == Mode.OS || status.CurrentMode == Mode.SR) { return; } float dist = status.TargetDistanceM.Value; var text = (((int)(dist / 10)) * 10).ToString(); var fontSize = TargetDistanceFont.MeasureString(text) / Scale; TargetDistanceText = new TextPrimitive(new Point((int)(54 - fontSize), (int)(30 - FontHeightTargetDistance) / 2), ColorGrey, text, TargetDistanceFont); if (dist > 1000) { dist = 1000; } double h; if (dist < 100) { h = dist / 100 * (185 - 152); } else { h = 185 - 152; h += (Math.Log10(dist) - 2) * (152 + 1); } DistanceBar = new Vector4(29, 186 - (float)h, 10, (float)h); DisplayDistanceText = true; DisplayDistanceBar = status.CurrentMode != Mode.SR; }
public override void PrepareFrame(ETCSStatus status) { SetData(status); }
private void SetData(ETCSStatus status) { if (!Active || !status.SpeedAreaShown) { return; } float currentSpeed = Math.Abs(SpeedFromMpS(DMI.Locomotive.SpeedMpS)); int permittedSpeed = (int)SpeedFromMpS(status.AllowedSpeedMpS); int targetSpeed = status.TargetSpeedMpS < status.AllowedSpeedMpS ? (int)SpeedFromMpS(status.TargetSpeedMpS.Value) : permittedSpeed; int releaseSpeed = (int)SpeedFromMpS(status.ReleaseSpeedMpS ?? 0); float interventionSpeed = SpeedFromMpS(status.InterventionSpeedMpS); if (interventionSpeed < permittedSpeed && interventionSpeed < releaseSpeed) { interventionSpeed = Math.Max(permittedSpeed, releaseSpeed); } if (currentSpeed > permittedSpeed && currentSpeed > interventionSpeed) { interventionSpeed = Math.Max(currentSpeed - 1, releaseSpeed); } switch (status.CurrentMode) { case Mode.SB: case Mode.NL: case Mode.PT: NeedleColor = ColorGrey; break; case Mode.TR: NeedleColor = ColorRed; break; case Mode.SH: case Mode.RV: if (currentSpeed <= permittedSpeed) { NeedleColor = ColorGrey; } else { NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange; } break; case Mode.SR: case Mode.UN: if (currentSpeed > permittedSpeed) { NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange; } else if (status.CurrentMonitor == Monitor.TargetSpeed) { NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow; } else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed) { NeedleColor = Color.White; } else { NeedleColor = ColorGrey; } break; case Mode.LS: if (currentSpeed > permittedSpeed) { NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange; } else if (status.CurrentMonitor == Monitor.ReleaseSpeed) { NeedleColor = ColorYellow; } else { NeedleColor = ColorGrey; } break; case Mode.FS: case Mode.OS: if (currentSpeed > permittedSpeed) { NeedleColor = status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange; } else if (status.CurrentMonitor == Monitor.TargetSpeed || status.CurrentMonitor == Monitor.ReleaseSpeed) { NeedleColor = currentSpeed < targetSpeed ? ColorGrey : ColorYellow; } else if (targetSpeed < permittedSpeed && currentSpeed >= targetSpeed) { NeedleColor = Color.White; } else { NeedleColor = ColorGrey; } break; case Mode.SN: // TODO: Allow direct management of colors from STM break; } SpeedColor = NeedleColor == ColorRed ? Color.White : Color.Black; if (status.CurrentMode == Mode.FS) { GaugeColor = status.CurrentMonitor == Monitor.TargetSpeed || status.CurrentMonitor == Monitor.ReleaseSpeed ? ColorYellow : Color.White; if (status.CurrentSupervisionStatus != SupervisionStatus.Overspeed && status.CurrentSupervisionStatus != SupervisionStatus.Warning && status.CurrentSupervisionStatus != SupervisionStatus.Intervention) { interventionSpeed = Math.Max(releaseSpeed, permittedSpeed); } var shaderAngles = new Vector4(Speed2Angle(targetSpeed), Speed2Angle(permittedSpeed), Speed2Angle(interventionSpeed), Speed2Angle(releaseSpeed)); DMI.Shader.SetData(shaderAngles, GaugeColor, NeedleColor, status.CurrentSupervisionStatus == SupervisionStatus.Intervention ? ColorRed : ColorOrange); } else { // CSG not shown var shaderAngles = new Vector4(NoGaugeAngle, NoGaugeAngle, NoGaugeAngle, NoGaugeAngle); DMI.Shader.SetData(shaderAngles, GaugeColor, NeedleColor, GaugeColor); } CurrentSpeedAngle = Speed2Angle(currentSpeed); SpeedText = (int)(currentSpeed + (currentSpeed < 1f || currentSpeed < (float)SpeedText ? 0.99999f : 0.49999f)); for (int i = 0, d = 1; i < CurrentSpeed.Length; i++, d *= 10) { CurrentSpeed[i].Color = SpeedColor; CurrentSpeed[i].Text = (SpeedText >= d || SpeedText == 0 && d == 1) ? (SpeedText / d % 10).ToString() : String.Empty; } ReleaseSpeed.Text = releaseSpeed > 0 ? releaseSpeed.ToString() : String.Empty; }
public override void PrepareFrame(ETCSStatus status) { base.PrepareFrame(status); Fields[ActiveField].UpdateCursor(); }
public override void PrepareFrame(ETCSStatus status) { base.PrepareFrame(status); // TODO: TCS menu interface to be defined }
public virtual void PrepareFrame(ETCSStatus status) { }