Exemple #1
0
        /// <summary>Applies a reverser notch</summary>
        /// <param name="Train">The train</param>
        /// <param name="Value">The notch to apply</param>
        /// <param name="Relative">Whether this is an absolute value or relative to the previous</param>
        internal static void ApplyReverser(Train Train, int Value, bool Relative)
        {
            int a = (int)Train.Handles.Reverser.Driver;
            int r = Relative ? a + Value : Value;

            if (r < -1)
            {
                r = -1;
            }
            if (r > 1)
            {
                r = 1;
            }
            if (a != r)
            {
                Train.Handles.Reverser.Driver = (ReverserPosition)r;
                if (Train.Plugin != null)
                {
                    Train.Plugin.UpdateReverser();
                }
                Game.AddBlackBoxEntry(Game.BlackBoxEventToken.None);
                // sound
                if (a == 0 & r != 0)
                {
                    Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.ReverserOn.Buffer;
                    if (buffer == null)
                    {
                        return;
                    }
                    OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.ReverserOn.Position;
                    Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                }
                else if (a != 0 & r == 0)
                {
                    Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.ReverserOff.Buffer;
                    if (buffer == null)
                    {
                        return;
                    }
                    OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.ReverserOff.Position;
                    Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                }
            }
        }
 /// <summary>Moves the air brake handle to the specified state</summary>
 /// <param name="Train">The train</param>
 /// <param name="State">The state</param>
 internal static void ApplyAirBrakeHandle(Train Train, AirBrakeHandleState State)
 {
     if (Train.Cars[Train.DriverCar].Specs.BrakeType == CarBrakeType.AutomaticAirBrake)
     {
         if (State != Train.Specs.AirBrake.Handle.Driver)
         {
             // sound when moved to service
             if (State == AirBrakeHandleState.Service)
             {
                 Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.Brake.Buffer;
                 if (buffer != null)
                 {
                     OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.Brake.Position;
                     Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                 }
             }
             // sound
             if ((int)State < (int)Train.Specs.AirBrake.Handle.Driver)
             {
                 // brake release
                 if ((int)State > 0)
                 {
                     // brake release (not min)
                     Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.BrakeHandleRelease.Buffer;
                     if (buffer != null)
                     {
                         OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.BrakeHandleRelease.Position;
                         Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                     }
                 }
                 else
                 {
                     // brake min
                     Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.BrakeHandleMin.Buffer;
                     if (buffer != null)
                     {
                         OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.BrakeHandleMin.Position;
                         Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                     }
                 }
             }
             else if ((int)State > (int)Train.Specs.AirBrake.Handle.Driver)
             {
                 // brake
                 Sounds.SoundBuffer buffer = Train.Cars[Train.DriverCar].Sounds.BrakeHandleApply.Buffer;
                 if (buffer != null)
                 {
                     OpenBveApi.Math.Vector3 pos = Train.Cars[Train.DriverCar].Sounds.BrakeHandleApply.Position;
                     Sounds.PlaySound(buffer, 1.0, 1.0, pos, Train, Train.DriverCar, false);
                 }
             }
             // apply
             Train.Specs.AirBrake.Handle.Driver = State;
             Game.AddBlackBoxEntry(Game.BlackBoxEventToken.None);
             // plugin
             if (Train.Plugin != null)
             {
                 Train.Plugin.UpdatePower();
                 Train.Plugin.UpdateBrake();
             }
         }
     }
 }