public override float GetDataOf(CabViewControl cvc) { float data = 0; switch (cvc.ControlType) { case CabViewControlType.Gears: if (DieselEngines.HasGearBox) { data = DieselEngines[0].GearBox.CurrentGearIndex + 1; } break; case CabViewControlType.Fuel_Gauge: if (cvc.ControlUnit == CabViewControlUnit.Gallons) { data = (float)Size.LiquidVolume.ToGallonUS(DieselLevelL); } else { data = DieselLevelL; } break; default: data = base.GetDataOf(cvc); break; } return(data); }
public override float GetDataOf(CabViewControl cvc) { float data = 0; switch (cvc.ControlType) { case CABViewControlTypes.GEARS: if (DieselEngines.HasGearBox) { data = DieselEngines[0].GearBox.CurrentGearIndex + 1; } break; case CABViewControlTypes.FUEL_GAUGE: if (cvc.Units == CABViewControlUnits.GALLONS) { data = L.ToGUS(DieselLevelL); } else { data = DieselLevelL; } break; default: data = base.GetDataOf(cvc); break; } return(data); }
public DPDefaultWindow(DistributedPowerInterface dpi, CabViewControl control) : base(dpi, 640, 240) { var param = (control as CVCScreen).CustomParameters; if (param.ContainsKey("fulltable")) { bool.TryParse(param["fulltable"], out FullTable); } if (param.ContainsKey("loadunits")) { string sUnits = param["loadunits"].ToUpper(); sUnits = sUnits.Replace('/', '_'); CABViewControlUnits.TryParse(sUnits, out LoadUnits); } DPITable = new DPITable(FullTable, LoadUnits, fullScreen: true, dpi: dpi); AddToLayout(DPITable, new Point(0, 0)); }
public float GetDataOf(CabViewControl cvc) { float data = 0; switch (cvc.ControlType) { case CABViewControlTypes.ORTS_EOT_ID: data = ID; break; case CABViewControlTypes.ORTS_EOT_STATE_DISPLAY: data = (float)(int)EOTState; break; case CABViewControlTypes.ORTS_EOT_EMERGENCY_BRAKE: data = EOTEmergencyBrakingOn ? 1 : 0; break; } return(data); }
public override float GetDataOf(CabViewControl cvc) { float data = 0; switch (cvc.ControlType) { case CABViewControlTypes.LINE_VOLTAGE: data = PowerSupply.PantographVoltageV; if (cvc.Units == CABViewControlUnits.KILOVOLTS) { data /= 1000; } break; case CABViewControlTypes.PANTO_DISPLAY: data = Pantographs.State == PantographState.Up ? 1 : 0; break; case CABViewControlTypes.PANTOGRAPH: data = Pantographs[1].CommandUp ? 1 : 0; break; case CABViewControlTypes.PANTOGRAPH2: data = Pantographs[2].CommandUp ? 1 : 0; break; case CABViewControlTypes.ORTS_PANTOGRAPH3: data = Pantographs.List.Count > 2 && Pantographs[3].CommandUp ? 1 : 0; break; case CABViewControlTypes.ORTS_PANTOGRAPH4: data = Pantographs.List.Count > 3 && Pantographs[4].CommandUp ? 1 : 0; break; case CABViewControlTypes.PANTOGRAPHS_4: case CABViewControlTypes.PANTOGRAPHS_4C: if (Pantographs[1].CommandUp && Pantographs[2].CommandUp) { data = 2; } else if (Pantographs[1].CommandUp) { data = 1; } else if (Pantographs[2].CommandUp) { data = 3; } else { data = 0; } break; case CABViewControlTypes.PANTOGRAPHS_5: if (Pantographs[1].CommandUp && Pantographs[2].CommandUp) { data = 0; // TODO: Should be 0 if the previous state was Pan2Up, and 4 if that was Pan1Up } else if (Pantographs[2].CommandUp) { data = 1; } else if (Pantographs[1].CommandUp) { data = 3; } else { data = 2; } break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_DRIVER_CLOSING_ORDER: data = PowerSupply.CircuitBreaker.DriverClosingOrder ? 1 : 0; break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_DRIVER_OPENING_ORDER: data = PowerSupply.CircuitBreaker.DriverOpeningOrder ? 1 : 0; break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_DRIVER_CLOSING_AUTHORIZATION: data = PowerSupply.CircuitBreaker.DriverClosingAuthorization ? 1 : 0; break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_STATE: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: data = 0; break; case CircuitBreakerState.Closing: data = 1; break; case CircuitBreakerState.Closed: data = 2; break; } break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_CLOSED: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: case CircuitBreakerState.Closing: data = 0; break; case CircuitBreakerState.Closed: data = 1; break; } break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_OPEN: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: case CircuitBreakerState.Closing: data = 1; break; case CircuitBreakerState.Closed: data = 0; break; } break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_AUTHORIZED: data = PowerSupply.CircuitBreaker.ClosingAuthorization ? 1 : 0; break; case CABViewControlTypes.ORTS_CIRCUIT_BREAKER_OPEN_AND_AUTHORIZED: data = (PowerSupply.CircuitBreaker.State < CircuitBreakerState.Closed && PowerSupply.CircuitBreaker.ClosingAuthorization) ? 1 : 0; break; default: data = base.GetDataOf(cvc); break; } return(data); }
public override float GetDataOf(CabViewControl cvc) { float data = 0; switch (cvc.ControlType) { case CabViewControlType.Line_Voltage: data = PowerSupply.PantographVoltageV; if (cvc.ControlUnit == CabViewControlUnit.KiloVolts) { data /= 1000; } break; case CabViewControlType.Panto_Display: data = Pantographs.State == PantographState.Up ? 1 : 0; break; case CabViewControlType.Pantograph: data = Pantographs[1].CommandUp ? 1 : 0; break; case CabViewControlType.Pantograph2: data = Pantographs[2].CommandUp ? 1 : 0; break; case CabViewControlType.Orts_Pantograph3: data = Pantographs.List.Count > 2 && Pantographs[3].CommandUp ? 1 : 0; break; case CabViewControlType.Orts_Pantograph4: data = Pantographs.List.Count > 3 && Pantographs[4].CommandUp ? 1 : 0; break; case CabViewControlType.Pantographs_4: case CabViewControlType.Pantographs_4C: if (Pantographs[1].CommandUp && Pantographs[2].CommandUp) { data = 2; } else if (Pantographs[1].CommandUp) { data = 1; } else if (Pantographs[2].CommandUp) { data = 3; } else { data = 0; } break; case CabViewControlType.Pantographs_5: if (Pantographs[1].CommandUp && Pantographs[2].CommandUp) { data = 0; // TODO: Should be 0 if the previous state was Pan2Up, and 4 if that was Pan1Up } else if (Pantographs[2].CommandUp) { data = 1; } else if (Pantographs[1].CommandUp) { data = 3; } else { data = 2; } break; case CabViewControlType.Orts_Circuit_Breaker_Driver_Closing_Order: data = PowerSupply.CircuitBreaker.DriverClosingOrder ? 1 : 0; break; case CabViewControlType.Orts_Circuit_Breaker_Driver_Opening_Order: data = PowerSupply.CircuitBreaker.DriverOpeningOrder ? 1 : 0; break; case CabViewControlType.Orts_Circuit_Breaker_Driver_Closing_Authorization: data = PowerSupply.CircuitBreaker.DriverClosingAuthorization ? 1 : 0; break; case CabViewControlType.Orts_Circuit_Breaker_State: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: data = 0; break; case CircuitBreakerState.Closing: data = 1; break; case CircuitBreakerState.Closed: data = 2; break; } break; case CabViewControlType.Orts_Circuit_Breaker_Closed: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: case CircuitBreakerState.Closing: data = 0; break; case CircuitBreakerState.Closed: data = 1; break; } break; case CabViewControlType.Orts_Circuit_Breaker_Open: switch (PowerSupply.CircuitBreaker.State) { case CircuitBreakerState.Open: case CircuitBreakerState.Closing: data = 1; break; case CircuitBreakerState.Closed: data = 0; break; } break; case CabViewControlType.Orts_Circuit_Breaker_Authorized: data = PowerSupply.CircuitBreaker.ClosingAuthorization ? 1 : 0; break; case CabViewControlType.Orts_Circuit_Breaker_Open_And_Authorized: data = (PowerSupply.CircuitBreaker.State < CircuitBreakerState.Closed && PowerSupply.CircuitBreaker.ClosingAuthorization) ? 1 : 0; break; default: data = base.GetDataOf(cvc); break; } return(data); }
public ETCSDefaultWindow(DriverMachineInterface dmi, CabViewControl control) : base(dmi, dmi.Width, dmi.Height) { if (dmi.CurrentDMIMode == DMIMode.GaugeOnly) { var dig = control as CVCDigital; CircularSpeedGauge = new CircularSpeedGauge( (int)dig.MaxValue, dig.Units != CABViewControlUnits.MILES_PER_HOUR, dig.Units != CABViewControlUnits.NONE, dig.MaxValue == 240 || dig.MaxValue == 260, (int)dig.MinValue, DMI); AddToLayout(CircularSpeedGauge, new Point(0, 0)); return; } if (dmi.CurrentDMIMode != DMIMode.PlanningArea) { var param = (control as CVCScreen).CustomParameters; int maxSpeed = 400; if (param.ContainsKey("maxspeed")) { int.TryParse(param["maxspeed"], out maxSpeed); } int maxVisibleSpeed = maxSpeed; if (param.ContainsKey("maxvisiblespeed")) { int.TryParse(param["maxvisiblespeed"], out maxVisibleSpeed); } CircularSpeedGauge = new CircularSpeedGauge( maxSpeed, control.Units != CABViewControlUnits.MILES_PER_HOUR, param.ContainsKey("displayunits") && param["displayunits"] == "1", maxSpeed == 240 || maxSpeed == 260, maxVisibleSpeed, dmi ); TTIandLSSMArea = new TTIandLSSMArea(dmi); TargetDistance = new TargetDistance(dmi); MessageArea = new MessageArea(dmi); CircularSpeedGauge.Layer = -1; TargetDistance.Layer = -1; TTIandLSSMArea.Layer = -1; MessageArea.Layer = -1; AddToLayout(CircularSpeedGauge, new Point(54, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(TTIandLSSMArea, new Point(0, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(TargetDistance, new Point(0, 54 + (DMI.IsSoftLayout ? 0 : 15))); AddToLayout(MessageArea, new Point(54, DMI.IsSoftLayout ? 350 : 365)); AddToLayout(MessageArea.ButtonScrollUp, new Point(54 + 234, DMI.IsSoftLayout ? 350 : 365)); AddToLayout(MessageArea.ButtonScrollDown, new Point(54 + 234, MessageArea.Height / 2 + (DMI.IsSoftLayout ? 350 : 365))); } if (dmi.CurrentDMIMode != DMIMode.SpeedArea) { // Calculate start position of the planning area when a two-screen display is used // Real width of the left area in ETCS specs is 306 px, however in order to have // both screens with the same size I assumed both have 334 px // To be checked int startPos = dmi.CurrentDMIMode == DMIMode.FullSize ? 334 : (334 - 306) / 2; PlanningWindow = new PlanningWindow(dmi); MenuBar = new MenuBar(dmi); AddToLayout(PlanningWindow, new Point(startPos, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(PlanningWindow.ButtonScaleDown, new Point(startPos, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(PlanningWindow.ButtonScaleUp, new Point(startPos, 285 + (DMI.IsSoftLayout ? 0 : 15))); foreach (int i in Enumerable.Range(0, MenuBar.Buttons.Count)) { AddToLayout(MenuBar.Buttons[i], new Point(580, 15 + 50 * i)); } } }
public DriverMachineInterface(float height, float width, MSTSLocomotive locomotive, Viewer viewer, CabViewControl control) { if (control is CVCScreen) { CurrentDMIMode = DMIMode.FullSize; if ((control as CVCScreen).CustomParameters.TryGetValue("mode", out string mode)) { if (mode == "planningarea") { CurrentDMIMode = DMIMode.PlanningArea; } else if (mode == "speedarea") { CurrentDMIMode = DMIMode.SpeedArea; } } } else { CurrentDMIMode = DMIMode.GaugeOnly; } switch (CurrentDMIMode) { case DMIMode.GaugeOnly: Width = 280; Height = 300; break; case DMIMode.FullSize: Width = 640; Height = 480; break; case DMIMode.PlanningArea: case DMIMode.SpeedArea: Width = 334; Height = 480; break; } Viewer = viewer; Locomotive = locomotive; Scale = Math.Min(width / Width, height / Height); if (Scale < 0.5) { MipMapScale = 2; } else { MipMapScale = 1; } Shader = new DriverMachineInterfaceShader(Viewer.GraphicsDevice); ETCSDefaultWindow = new ETCSDefaultWindow(this, control); ETCSDefaultWindow.Visible = true; AddToLayout(ETCSDefaultWindow, Point.Zero); ActiveWindow = ETCSDefaultWindow; }
public ETCSDefaultWindow(DriverMachineInterface dmi, CabViewControl control) : base(dmi, 640, 480) { if (control is CVCDigital) { var dig = control as CVCDigital; CircularSpeedGauge = new CircularSpeedGauge( (int)dig.MaxValue, dig.Units != CABViewControlUnits.MILES_PER_HOUR, dig.Units != CABViewControlUnits.NONE, dig.MaxValue == 240 || dig.MaxValue == 260, (int)dig.MinValue, DMI); } else { var param = (control as CVCScreen).CustomParameters; int maxSpeed = 400; if (param.ContainsKey("maxspeed")) { int.TryParse(param["maxspeed"], out maxSpeed); } int maxVisibleSpeed = maxSpeed; if (param.ContainsKey("maxvisiblespeed")) { int.TryParse(param["maxvisiblespeed"], out maxVisibleSpeed); } CircularSpeedGauge = new CircularSpeedGauge( maxSpeed, control.Units != CABViewControlUnits.MILES_PER_HOUR, param.ContainsKey("displayunits") && param["displayunits"] == "1", maxSpeed == 240 || maxSpeed == 260, maxVisibleSpeed, dmi ); } if (DMI.GaugeOnly) { AddToLayout(CircularSpeedGauge, new Point(0, 0)); return; } PlanningWindow = new PlanningWindow(dmi); TTIandLSSMArea = new TTIandLSSMArea(dmi); TargetDistance = new TargetDistance(dmi); MessageArea = new MessageArea(dmi); MenuBar = new MenuBar(dmi); CircularSpeedGauge.Layer = -1; TargetDistance.Layer = -1; TTIandLSSMArea.Layer = -1; MessageArea.Layer = -1; AddToLayout(CircularSpeedGauge, new Point(54, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(PlanningWindow, new Point(334, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(PlanningWindow.ButtonScaleDown, new Point(334, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(PlanningWindow.ButtonScaleUp, new Point(334, 285 + (DMI.IsSoftLayout ? 0 : 15))); AddToLayout(TTIandLSSMArea, new Point(0, DMI.IsSoftLayout ? 0 : 15)); AddToLayout(TargetDistance, new Point(0, 54 + (DMI.IsSoftLayout ? 0 : 15))); AddToLayout(MessageArea, new Point(54, DMI.IsSoftLayout ? 350 : 365)); AddToLayout(MessageArea.ButtonScrollUp, new Point(54 + 234, DMI.IsSoftLayout ? 350 : 365)); AddToLayout(MessageArea.ButtonScrollDown, new Point(54 + 234, MessageArea.Height / 2 + (DMI.IsSoftLayout ? 350 : 365))); foreach (int i in Enumerable.Range(0, MenuBar.Buttons.Count)) { AddToLayout(MenuBar.Buttons[i], new Point(580, 15 + 50 * i)); } }
public DriverMachineInterface(float height, float width, MSTSLocomotive locomotive, Viewer viewer, CabViewControl control) { Viewer = viewer; Locomotive = locomotive; Scale = Math.Min(width / Width, height / Height); if (Scale < 0.5) { MipMapScale = 2; } else { MipMapScale = 1; } GaugeOnly = control is CVCDigital; Shader = new DriverMachineInterfaceShader(Viewer.GraphicsDevice); ETCSDefaultWindow = new ETCSDefaultWindow(this, control); ETCSDefaultWindow.Visible = true; AddToLayout(ETCSDefaultWindow, Point.Zero); ActiveWindow = ETCSDefaultWindow; }
public override float GetDataOf(CabViewControl cvc) { float data; switch (cvc.ControlType) { case CABViewControlTypes.LINE_VOLTAGE: { if (Pantographs.State == PantographState.Up) { //data = (float)Program.Simulator.TRK.Tr_RouteFile.MaxLineVoltage; data = PowerSupply.FilterVoltageV; if (cvc.Units == CABViewControlUnits.KILOVOLTS) { data /= 1000; } } else { data = 0; } break; } case CABViewControlTypes.PANTOGRAPH: case CABViewControlTypes.PANTO_DISPLAY: { data = Pantographs[1].State == PantographState.Up ? 1 : 0; break; } case CABViewControlTypes.PANTOGRAPH2: { data = Pantographs[2].State == PantographState.Up ? 1 : 0; break; } case CABViewControlTypes.PANTOGRAPHS_4: case CABViewControlTypes.PANTOGRAPHS_4C: { if (Pantographs[1].State == PantographState.Up && Pantographs[2].State == PantographState.Up) { data = 2; } else if (Pantographs[1].State == PantographState.Up) { data = 1; } else if (Pantographs[2].State == PantographState.Up) { data = 3; } else { data = 0; } break; } case CABViewControlTypes.PANTOGRAPHS_5: { if (Pantographs[1].State == PantographState.Up && Pantographs[2].State == PantographState.Up) { data = 0; // TODO: Should be 0 if the previous state was Pan2Up, and 4 if that was Pan1Up } else if (Pantographs[2].State == PantographState.Up) { data = 1; } else if (Pantographs[1].State == PantographState.Up) { data = 3; } else { data = 2; } break; } default: { data = base.GetDataOf(cvc); break; } } return(data); }
public DistributedPowerInterface(float height, float width, MSTSLocomotive locomotive, Viewer viewer, CabViewControl control) { Viewer = viewer; Locomotive = locomotive; Scale = Math.Min(width / Width, height / Height); if (Scale < 0.5) { MipMapScale = 2; } else { MipMapScale = 1; } Shader = new DriverMachineInterfaceShader(Viewer.GraphicsDevice); DPDefaultWindow = new DPDefaultWindow(this, control); DPDefaultWindow.Visible = true; AddToLayout(DPDefaultWindow, Point.Zero); ActiveWindow = DPDefaultWindow; }