Ejemplo n.º 1
0
            internal override void Trigger(double TimeElapsed)
            {
                if (SecondsSinceMidnight - TimeLastProcessed >= CurrentInterval)
                {
                    TimeLastProcessed = SecondsSinceMidnight;
                    CurrentInterval   = 5.0;
                    double ap = double.MaxValue, at = double.MaxValue;
                    double bp = double.MinValue, bt = double.MinValue;
                    for (int i = 0; i < BogusPretrainInstructions.Length; i++)
                    {
                        if (BogusPretrainInstructions[i].Time < SecondsSinceMidnight | at == double.MaxValue)
                        {
                            at = BogusPretrainInstructions[i].Time;
                            ap = BogusPretrainInstructions[i].TrackPosition;
                        }
                    }
                    for (int i = BogusPretrainInstructions.Length - 1; i >= 0; i--)
                    {
                        if (BogusPretrainInstructions[i].Time > at | bt == double.MinValue)
                        {
                            bt = BogusPretrainInstructions[i].Time;
                            bp = BogusPretrainInstructions[i].TrackPosition;
                        }
                    }
                    if (at != double.MaxValue & bt != double.MinValue & SecondsSinceMidnight <= BogusPretrainInstructions[BogusPretrainInstructions.Length - 1].Time)
                    {
                        double r = bt - at;
                        if (r > 0.0)
                        {
                            r = (SecondsSinceMidnight - at) / r;
                            if (r < 0.0)
                            {
                                r = 0.0;
                            }

                            if (r > 1.0)
                            {
                                r = 1.0;
                            }
                        }
                        else
                        {
                            r = 0.0;
                        }
                        double p = ap + r * (bp - ap);
                        double d = p - Train.Cars[0].FrontAxle.Follower.TrackPosition;
                        for (int j = 0; j < Train.Cars.Length; j++)
                        {
                            Train.Cars[j].Move(d);
                        }
                    }
                    else
                    {
                        Train.Dispose();
                    }
                }
            }
Ejemplo n.º 2
0
 internal override void Trigger(int Direction, EventTriggerType TriggerType, TrainManager.Train Train, int CarIndex)
 {
     if (TriggerType == EventTriggerType.RearCarRearAxle & Train != TrainManager.PlayerTrain)
     {
         Train.Dispose();
     }
     else if (Train == TrainManager.PlayerTrain)
     {
         Train.Derail(CarIndex, 0.0);
     }
 }