Пример #1
0
        public override void SignalEvent(PowerSupplyEvent evt)
        {
            if (Simulator.Confirmer != null && Simulator.PlayerLocomotive == this)
            {
                switch (evt)
                {
                case PowerSupplyEvent.RaisePantograph:
                    Simulator.Confirmer.Confirm(CabControl.Pantograph1, CabSetting.On);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph2, CabSetting.On);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph3, CabSetting.On);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph4, CabSetting.On);
                    break;

                case PowerSupplyEvent.LowerPantograph:
                    Simulator.Confirmer.Confirm(CabControl.Pantograph1, CabSetting.Off);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph2, CabSetting.Off);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph3, CabSetting.Off);
                    Simulator.Confirmer.Confirm(CabControl.Pantograph4, CabSetting.Off);
                    break;
                }
            }

            switch (evt)
            {
            case PowerSupplyEvent.CloseCircuitBreaker:
            case PowerSupplyEvent.OpenCircuitBreaker:
            case PowerSupplyEvent.CloseCircuitBreakerButtonPressed:
            case PowerSupplyEvent.CloseCircuitBreakerButtonReleased:
            case PowerSupplyEvent.OpenCircuitBreakerButtonPressed:
            case PowerSupplyEvent.OpenCircuitBreakerButtonReleased:
            case PowerSupplyEvent.GiveCircuitBreakerClosingAuthorization:
            case PowerSupplyEvent.RemoveCircuitBreakerClosingAuthorization:
                PowerSupply.HandleEvent(evt);
                break;
            }

            base.SignalEvent(evt);
        }
Пример #2
0
        public override void HandleEvent(PowerSupplyEvent evt)
        {
            switch (evt)
            {
            case PowerSupplyEvent.CloseCircuitBreakerButtonPressed:
                Confirm(CabControl.CircuitBreakerClosingOrder, CabSetting.On);
                SetDriverClosingOrder(true);
                break;

            case PowerSupplyEvent.CloseCircuitBreakerButtonReleased:
                SetDriverClosingOrder(false);
                break;

            case PowerSupplyEvent.GiveCircuitBreakerClosingAuthorization:
                SetDriverClosingAuthorization(true);
                Confirm(CabControl.CircuitBreakerClosingAuthorization, CabSetting.On);
                break;

            case PowerSupplyEvent.RemoveCircuitBreakerClosingAuthorization:
                SetDriverClosingAuthorization(false);
                Confirm(CabControl.CircuitBreakerClosingAuthorization, CabSetting.Off);
                break;
            }
        }
Пример #3
0
        public void HandleEvent(PowerSupplyEvent evt)
        {
            Event soundEvent = Event.None;

            switch (evt)
            {
            case PowerSupplyEvent.LowerPantograph:
                if (State == PantographState.Up || State == PantographState.Raising)
                {
                    State = PantographState.Lowering;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Down;
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Down;
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Down;
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Down;
                        break;
                    }
                }

                break;

            case PowerSupplyEvent.RaisePantograph:
                if (State == PantographState.Down || State == PantographState.Lowering)
                {
                    State = PantographState.Raising;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Up;
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Up;
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Up;
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Up;
                        break;
                    }
                }
                break;
            }

            if (soundEvent != Event.None)
            {
                try
                {
                    foreach (var eventHandler in Wagon.EventHandlers)
                    {
                        eventHandler.HandleEvent(soundEvent);
                    }
                }
                catch (Exception error)
                {
                    Trace.TraceInformation("Sound event skipped due to thread safety problem " + error.Message);
                }
            }
        }
Пример #4
0
        public override void HandleEvent(PowerSupplyEvent evt)
        {
            switch (evt)
            {
            case PowerSupplyEvent.CloseCircuitBreakerButtonPressed:
                if (!DriverClosingOrder())
                {
                    SetDriverClosingOrder(true);
                    SignalEvent(Event.CircuitBreakerClosingOrderOn);
                    Confirm(CabControl.CircuitBreakerClosingOrder, CabSetting.On);
                    if (!ClosingAuthorization())
                    {
                        if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                        {
                            Message(ConfirmLevel.Warning, "Fermeture du disjoncteur non autorisée");
                        }
                        else
                        {
                            Message(ConfirmLevel.Warning, "Circuit breaker closing not authorized");
                        }
                    }
                }
                break;

            case PowerSupplyEvent.CloseCircuitBreakerButtonReleased:
                if (DriverClosingOrder())
                {
                    SetDriverClosingOrder(false);
                    SignalEvent(Event.CircuitBreakerClosingOrderOff);
                }
                break;

            case PowerSupplyEvent.GiveCircuitBreakerClosingAuthorization:
                if (!DriverClosingAuthorization())
                {
                    SetDriverClosingAuthorization(true);
                    SignalEvent(Event.CircuitBreakerClosingAuthorizationOn);
                    Confirm(CabControl.CircuitBreakerClosingAuthorization, CabSetting.On);
                }
                break;

            case PowerSupplyEvent.RemoveCircuitBreakerClosingAuthorization:
                if (DriverClosingAuthorization())
                {
                    SetDriverClosingAuthorization(false);
                    SignalEvent(Event.CircuitBreakerClosingAuthorizationOff);
                    Confirm(CabControl.CircuitBreakerClosingAuthorization, CabSetting.Off);
                }
                break;

            case PowerSupplyEvent.QuickPowerOn:
                SetDriverClosingAuthorization(true);
                SetCurrentState(CircuitBreakerState.Closed);
                break;

            case PowerSupplyEvent.QuickPowerOff:
                SetDriverClosingAuthorization(false);
                SetCurrentState(CircuitBreakerState.Open);
                break;
            }
        }
Пример #5
0
 /// <summary>
 /// Called when a power supply event happens (like the circuit breaker closed)
 /// Set at virtual to keep compatibility with scripts not providing this method.
 /// </summary>
 /// <param name="evt">The event happened</param>
 /// <param name="message">The message the event wants to communicate. May be empty.</param>
 public virtual void HandleEvent(PowerSupplyEvent evt, string message)
 {
 }
Пример #6
0
 public void HandleEventFromLeadLocomotive(PowerSupplyEvent evt)
 {
     AbstractScript?.HandleEventFromLeadLocomotive(evt);
 }
Пример #7
0
 /// <summary>
 /// Called when an event happens (a closing order from the driver for example)
 /// </summary>
 /// <param name="evt">The event happened</param>
 public abstract void HandleEvent(PowerSupplyEvent evt);
        public override void HandleEvent(PowerSupplyEvent evt)
        {
            switch (evt)
            {
            case PowerSupplyEvent.GiveCircuitBreakerClosingAuthorization:
                if (MasterKeyOn())
                {
                    SignalEventToCircuitBreaker(evt);
                    SignalEventToTcs(evt);
                    SignalEventToOtherTrainVehicles(evt);
                }
                else
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si la boîte à leviers est déverrouillée");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the master key is turned on");
                    }
                }
                break;

            case PowerSupplyEvent.CloseCircuitBreakerButtonPressed:
                if (!MasterKeyOn())
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si la boîte à leviers est déverrouillée");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the master key is turned on");
                    }
                }
                else if (ThrottlePercent() > 0)
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si le manipulateur traction est à 0");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the throttle controller is at 0");
                    }
                }
                else
                {
                    SignalEventToCircuitBreaker(evt);
                    SignalEventToTcs(evt);
                    SignalEventToOtherTrainVehicles(evt);
                }
                break;

            case PowerSupplyEvent.CloseCircuitBreakerButtonReleased:
            case PowerSupplyEvent.RemoveCircuitBreakerClosingAuthorization:
                SignalEventToCircuitBreaker(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.SwitchOnElectricTrainSupply:
                if (MasterKeyOn())
                {
                    SignalEventToElectricTrainSupplySwitch(evt);
                    SignalEventToTcs(evt);
                    SignalEventToOtherTrainVehicles(evt);
                }
                else
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si la boîte à leviers est déverrouillée");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the master key is turned on");
                    }
                }
                break;

            case PowerSupplyEvent.SwitchOffElectricTrainSupply:
                SignalEventToElectricTrainSupplySwitch(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.CloseBatterySwitch:
            case PowerSupplyEvent.CloseBatterySwitchButtonPressed:
            case PowerSupplyEvent.CloseBatterySwitchButtonReleased:
            case PowerSupplyEvent.OpenBatterySwitch:
            case PowerSupplyEvent.OpenBatterySwitchButtonPressed:
            case PowerSupplyEvent.OpenBatterySwitchButtonReleased:
                SignalEventToBatterySwitch(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.TurnOnMasterKey:
            case PowerSupplyEvent.TurnOffMasterKey:
                if (!CircuitBreakerDriverClosingAuthorization() && !CircuitBreakerDriverClosingOrder() && !CircuitBreakerDriverOpeningOrder())
                {
                    SignalEventToMasterKey(evt);
                    SignalEventToTcs(evt);
                }
                else
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Tous les leviers de la rangée supérieure de la boîte à leviers doivent être bas (sauf le bouton de maintien de service) pour verrouiller la boîte à leviers");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "All upper levers must be down (except service hold button) in order to switch off the master key");
                    }
                }
                break;

            case PowerSupplyEvent.QuickPowerOn:
                QuickPowerOn = true;
                SignalEventToBatterySwitch(PowerSupplyEvent.CloseBatterySwitch);
                SignalEventToMasterKey(PowerSupplyEvent.TurnOnMasterKey);
                SignalEventToPantograph(PowerSupplyEvent.RaisePantograph, 1);
                SignalEventToElectricTrainSupplySwitch(PowerSupplyEvent.SwitchOnElectricTrainSupply);

                SignalEventToOtherTrainVehicles(PowerSupplyEvent.QuickPowerOn);
                break;

            case PowerSupplyEvent.QuickPowerOff:
                QuickPowerOn = false;
                SignalEventToElectricTrainSupplySwitch(PowerSupplyEvent.SwitchOffElectricTrainSupply);
                SignalEventToCircuitBreaker(PowerSupplyEvent.QuickPowerOff);
                SignalEventToPantographs(PowerSupplyEvent.LowerPantograph);
                SignalEventToMasterKey(PowerSupplyEvent.TurnOffMasterKey);
                SignalEventToBatterySwitch(PowerSupplyEvent.OpenBatterySwitch);

                SignalEventToOtherTrainVehicles(PowerSupplyEvent.QuickPowerOff);
                break;
            }
        }
Пример #9
0
 public override void HandleEvent(PowerSupplyEvent evt)
 {
     SignalEventToPantographs(evt);
     SignalEventToBatterySwitch(evt);
 }
Пример #10
0
 public void HandleEventFromLeadLocomotive(PowerSupplyEvent evt, int id)
 {
     Script?.HandleEventFromLeadLocomotive(evt, id);
 }
Пример #11
0
 public void HandleEvent(PowerSupplyEvent evt, int id)
 {
     Script?.HandleEvent(evt, id);
 }
Пример #12
0
        public override void HandleEvent(PowerSupplyEvent evt)
        {
            switch (evt)
            {
            case PowerSupplyEvent.CloseTractionCutOffRelayButtonPressed:
                if (!MasterKeyOn())
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si la boîte à leviers est déverrouillée");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the master key is turned on");
                    }
                }
                else if (ThrottlePercent() > 0)
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si le manipulateur traction est à 0");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the throttle controller is at 0");
                    }
                }
                else
                {
                    SignalEventToTractionCutOffRelay(evt);
                    SignalEventToTcs(evt);
                    SignalEventToOtherTrainVehicles(evt);
                }
                break;

            case PowerSupplyEvent.CloseTractionCutOffRelayButtonReleased:
                SignalEventToTractionCutOffRelay(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.SwitchOnElectricTrainSupply:
                if (MasterKeyOn())
                {
                    SignalEventToElectricTrainSupplySwitch(evt);
                    SignalEventToTcs(evt);
                    SignalEventToOtherTrainVehicles(evt);
                }
                else
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Ce bouton ne peut être utilisé que si la boîte à leviers est déverrouillée");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "This button can only be used when the master key is turned on");
                    }
                }
                break;

            case PowerSupplyEvent.SwitchOffElectricTrainSupply:
                SignalEventToElectricTrainSupplySwitch(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.CloseBatterySwitch:
            case PowerSupplyEvent.CloseBatterySwitchButtonPressed:
            case PowerSupplyEvent.CloseBatterySwitchButtonReleased:
            case PowerSupplyEvent.OpenBatterySwitch:
            case PowerSupplyEvent.OpenBatterySwitchButtonPressed:
            case PowerSupplyEvent.OpenBatterySwitchButtonReleased:
                SignalEventToBatterySwitch(evt);
                SignalEventToTcs(evt);
                SignalEventToOtherTrainVehicles(evt);
                break;

            case PowerSupplyEvent.TurnOnMasterKey:
            case PowerSupplyEvent.TurnOffMasterKey:
                if (!TractionCutOffRelayDriverClosingAuthorization() && !TractionCutOffRelayDriverClosingOrder() && !TractionCutOffRelayDriverOpeningOrder() && !ElectricTrainSupplySwitchOn())
                {
                    SignalEventToMasterKey(evt);
                    SignalEventToTcs(evt);
                }
                else
                {
                    if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        Message(ConfirmLevel.Warning, "Tous les leviers de la rangée supérieure de la boîte à leviers doivent être bas (sauf le bouton de maintien de service) pour verrouiller la boîte à leviers");
                    }
                    else
                    {
                        Message(ConfirmLevel.Warning, "All upper levers must be down (except service hold button) in order to switch off the master key");
                    }
                }
                break;

            case PowerSupplyEvent.QuickPowerOn:
                QuickPowerOn = true;
                SignalEventToBatterySwitch(PowerSupplyEvent.CloseBatterySwitch);
                SignalEventToMasterKey(PowerSupplyEvent.TurnOnMasterKey);
                SignalEventToDieselEngines(PowerSupplyEvent.StartEngine);
                SignalEventToElectricTrainSupplySwitch(PowerSupplyEvent.SwitchOnElectricTrainSupply);

                SignalEventToOtherLocomotives(PowerSupplyEvent.QuickPowerOn);
                break;

            case PowerSupplyEvent.QuickPowerOff:
                QuickPowerOn = false;
                SignalEventToElectricTrainSupplySwitch(PowerSupplyEvent.SwitchOffElectricTrainSupply);
                SignalEventToTractionCutOffRelay(PowerSupplyEvent.OpenTractionCutOffRelay);
                SignalEventToDieselEngines(PowerSupplyEvent.StopEngine);
                SignalEventToMasterKey(PowerSupplyEvent.TurnOffMasterKey);
                SignalEventToBatterySwitch(PowerSupplyEvent.OpenBatterySwitch);

                SignalEventToOtherLocomotives(PowerSupplyEvent.QuickPowerOff);
                break;

            case PowerSupplyEvent.TogglePlayerEngine:
                switch (CurrentDieselEngineState(0))
                {
                case DieselEngineState.Stopped:
                case DieselEngineState.Stopping:
                    SignalEventToDieselEngines(PowerSupplyEvent.StartEngine);
                    SignalEventToHelperEngines(PowerSupplyEvent.StartEngine);
                    Confirm(CabControl.PlayerDiesel, CabSetting.On);
                    break;

                case DieselEngineState.Starting:
                    SignalEventToDieselEngines(PowerSupplyEvent.StopEngine);
                    SignalEventToHelperEngines(PowerSupplyEvent.StopEngine);
                    Confirm(CabControl.PlayerDiesel, CabSetting.Off);
                    break;

                case DieselEngineState.Running:
                    if (ThrottlePercent() < 1)
                    {
                        SignalEventToDieselEngines(PowerSupplyEvent.StopEngine);
                        SignalEventToHelperEngines(PowerSupplyEvent.StopEngine);
                        Confirm(CabControl.PlayerDiesel, CabSetting.Off);
                    }
                    else
                    {
                        Confirm(CabControl.PlayerDiesel, CabSetting.Warn1);
                    }
                    break;
                }
                break;
            }
        }
Пример #13
0
 public override void HandleEventFromLeadLocomotive(PowerSupplyEvent evt)
 {
 }
Пример #14
0
 public virtual void HandleEvent(PowerSupplyEvent evt, int id)
 {
     // By default, send the event to every component
     SignalEventToPantograph(evt, id);
 }
Пример #15
0
 public override void HandleEvent(PowerSupplyEvent evt, int id)
 {
     SignalEventToPantograph(evt, id);
 }
Пример #16
0
 public virtual void HandleEventFromLeadLocomotive(PowerSupplyEvent evt)
 {
     // By default, send the event to every component
     SignalEventToBatterySwitch(evt);
 }
Пример #17
0
 public void HandleEvent(PowerSupplyEvent evt)
 {
     Script?.HandleEvent(evt);
 }
Пример #18
0
 public void HandleEvent(PowerSupplyEvent evt)
 {
     CircuitBreaker.HandleEvent(evt);
 }
Пример #19
0
 public override void HandleEvent(PowerSupplyEvent evt)
 {
     // Nothing to do since it is automatic
 }
Пример #20
0
        public void HandleEvent(PowerSupplyEvent evt)
        {
            Event soundEvent = Event.None;

            switch (evt)
            {
            case PowerSupplyEvent.LowerPantograph:
                if (State == PantographState.Up || State == PantographState.Raising)
                {
                    State = PantographState.Lowering;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Down;
                        Confirm(CabControl.Pantograph1, CabSetting.Off);
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Down;
                        Confirm(CabControl.Pantograph2, CabSetting.Off);
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Down;
                        Confirm(CabControl.Pantograph3, CabSetting.Off);
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Down;
                        Confirm(CabControl.Pantograph4, CabSetting.Off);
                        break;
                    }
                }

                break;

            case PowerSupplyEvent.RaisePantograph:
                if (State == PantographState.Down || State == PantographState.Lowering)
                {
                    State = PantographState.Raising;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Up;
                        Confirm(CabControl.Pantograph4, CabSetting.On);
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Up;
                        Confirm(CabControl.Pantograph2, CabSetting.On);
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Up;
                        Confirm(CabControl.Pantograph3, CabSetting.On);
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Up;
                        Confirm(CabControl.Pantograph4, CabSetting.On);
                        break;
                    }


                    if (!Simulator.TRK.Tr_RouteFile.Electrified)
                    {
                        Simulator.Confirmer.Warning(Simulator.Catalog.GetString("No power line!"));
                    }
                    if (Simulator.Settings.OverrideNonElectrifiedRoutes)
                    {
                        Simulator.Confirmer.Information(Simulator.Catalog.GetString("Power line condition overridden."));
                    }
                }
                break;
            }

            if (soundEvent != Event.None)
            {
                try
                {
                    foreach (var eventHandler in Wagon.EventHandlers)
                    {
                        eventHandler.HandleEvent(soundEvent);
                    }
                }
                catch (Exception error)
                {
                    Trace.TraceInformation("Sound event skipped due to thread safety problem " + error.Message);
                }
            }
        }
Пример #21
0
        public void HandleEvent(PowerSupplyEvent evt)
        {
            Event soundEvent = Event.None;

            switch (evt)
            {
            case PowerSupplyEvent.LowerPantograph:
                if (State == PantographState.Up || State == PantographState.Raising)
                {
                    State = PantographState.Lowering;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Down;
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Down;
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Down;
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Down;
                        break;
                    }
                }

                break;

            case PowerSupplyEvent.RaisePantograph:
                if (State == PantographState.Down || State == PantographState.Lowering)
                {
                    State = PantographState.Raising;

                    switch (Id)
                    {
                    default:
                    case 1:
                        soundEvent = Event.Pantograph1Up;
                        break;

                    case 2:
                        soundEvent = Event.Pantograph2Up;
                        break;

                    case 3:
                        soundEvent = Event.Pantograph3Up;
                        break;

                    case 4:
                        soundEvent = Event.Pantograph4Up;
                        break;
                    }
                }
                break;
            }

            if (soundEvent != Event.None)
            {
                foreach (var eventHandler in Wagon.EventHandlers)
                {
                    eventHandler.HandleEvent(soundEvent);
                }
            }
        }