Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 7
0
 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));
         }
     }
 }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
 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));
     }
 }
Exemplo n.º 10
0
        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;
        }
Exemplo n.º 11
0
        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;
        }