public override void Process()
        {
            if (IsPlaying)
            {
                CurrentTime = CurrentTime.Add(TimeSpan.FromSeconds(Game.LastFrameTime));

                TimedEventManager.RunEvents(CurrentTime);

                if (TimedEventManager.AllExecuted(CurrentTime))
                {
                    StartExplodingScene();
                }

                if (_justAttached)
                {
                    DeloreanTimedEventManager.RunEvents(CurrentTime);

                    if (_wheelPtfxes != null)
                    {
                        foreach (var wheelPTFX in _wheelPtfxes)
                        {
                            wheelPTFX.Process();
                        }
                    }
                }
            }
        }
        public override void OnEnd()
        {
            if (IsPlaying)
            {
                if (TimedEventManager.IsCustomCameraActive)
                {
                    TimedEventManager.ResetCamera();
                }

                if (_missionMusic.IsAnyInstancePlaying)
                {
                    _missionMusic.Stop();
                }

                _wheelPtfxes?.ForEach(x => x?.Stop());
                _wheelPtfxes.Clear();

                tRogersSierra.isOnTrainMission = false;

                if (tRogersSierra.isExploded == false)
                {
                    tRogersSierra.FunnelSmoke = RogersSierra.Commons.SmokeColor.Default;
                }
            }
        }
        public void StartExplodingScene()
        {
            //if (tRogersSierra.isDeLoreanAttached)
            //    RogersSierraManager.DetachDeLorean();

            TimedEventManager.ClearEvents();

            TimedEventManager.Add(CurrentTime.Add(TimeSpan.FromSeconds(2)), CurrentTime.Add(TimeSpan.FromSeconds(3)));
            TimedEventManager.Last.OnExecute += TrainExplosion_OnExecute;
        }
        public override void OnStart()
        {
            if ((tRogersSierra?.isExploded).HasValue ? tRogersSierra.isExploded : true)
            {
                IsPlaying = false;
                return;
            }

            Main.RogersSierra.AudioEngine.BaseSoundFolder = "BackToTheFutureV\\Sounds";

            _funnelExpl            = Main.RogersSierra.AudioEngine.Create($"story/trainMission/funnelExplosion.wav", Presets.ExteriorLoud);
            _funnelExpl.SourceBone = "funnel_dummy";

            _missionMusic = Main.RogersSierra.AudioEngine.Create($"story/trainMission/music.wav", Presets.No3D);

            CurrentTime = TimeSpan.Zero;

            TimedEventManager.ClearEvents();

            TimedEventManager.ManageCamera = false;

            TimedEventManager.Add(0, 0, 0, 0, 10, 0, TimeMultiplier);
            TimedEventManager.Last.SetCamera(tRogersSierra.Locomotive, new Vector3(2.5f, 13f, -1f), tRogersSierra.Locomotive, Vector3.Zero);

            TimedEventManager.Add(0, 0, 0, 0, 25, 0, TimeMultiplier); //reach 25mph
            TimedEventManager.Last.SetSpeed(0, 25);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(1, 29, 386, 1, 31, 386, TimeMultiplier);
            TimedEventManager.Last.SetCamera(tRogersSierra.Locomotive, new Vector3(0, 15f, 2f), tRogersSierra.Locomotive, Vector3.Zero);

            TimedEventManager.Add(1, 29, 386, 1, 40, 137, TimeMultiplier); //green log explosion and reach 35mph
            TimedEventManager.Last.SetSpeed(25, 35);
            TimedEventManager.Last.OnExecute += Explosion_OnExecute;

            TimedEventManager.Add(2, 16, 266, 2, 25, 364, TimeMultiplier); //yellow log explosion and reach 40mph
            TimedEventManager.Last.SetSpeed(35, 40);
            TimedEventManager.Last.OnExecute += Explosion_OnExecute;

            TimedEventManager.Add(2, 25, 364, 3, 3, 406, TimeMultiplier); //reach 45mph
            TimedEventManager.Last.SetSpeed(40, 45);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(3, 3, 406, 3, 16, 710, TimeMultiplier); //reach 50mph
            TimedEventManager.Last.SetSpeed(45, 50);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(3, 20, 321, 3, 21, 587, TimeMultiplier); //first whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;
            TimedEventManager.Add(3, 21, 87, 3, 21, 587, TimeMultiplier);  //stop whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;

            TimedEventManager.Add(3, 21, 587, 3, 23, 315, TimeMultiplier); //second whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;
            TimedEventManager.Add(3, 22, 815, 3, 23, 315, TimeMultiplier); //stop whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;

            TimedEventManager.Add(3, 23, 315, 3, 24, 511, TimeMultiplier); //third whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;
            TimedEventManager.Add(3, 24, 11, 3, 24, 511, TimeMultiplier);  //stop whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;

            TimedEventManager.Add(3, 24, 511, 3, 25, 529, TimeMultiplier); //fourth whistle
            TimedEventManager.Last.OnExecute += Whistle_OnExecute;

            TimedEventManager.Add(3, 25, 529, 3, 47, 111, TimeMultiplier); //reach 55mph
            TimedEventManager.Last.SetSpeed(50, 55);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(3, 47, 111, 4, 26, 239, TimeMultiplier); //reach 60mph
            TimedEventManager.Last.SetSpeed(55, 60);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(4, 26, 239, 4, 46, 395, TimeMultiplier); //reach 70mph
            TimedEventManager.Last.SetSpeed(60, 70);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(5, 10, 603, 5, 13, 603, TimeMultiplier); //red log explosion and reach 72mph
            TimedEventManager.Last.SetSpeed(70, 72);
            TimedEventManager.Last.OnExecute += Explosion_OnExecute;

            TimedEventManager.Add(5, 19, 0, 5, 21, 0, TimeMultiplier); //reach 75mph
            TimedEventManager.Last.SetSpeed(72, 75);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(5, 25, 0, 5, 40, 137, TimeMultiplier); //reach 80mph
            TimedEventManager.Last.SetSpeed(75, 80);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            //TimedEventManager.Add(5, 56, 450, 7, 12, 627, TimeMultiplier); //reach 88mph
            TimedEventManager.Add(5, 56, 450, 7, 4, 627, TimeMultiplier); //reach 88mph
            TimedEventManager.Last.SetSpeed(80, 88);
            TimedEventManager.Last.OnExecute += SetSpeed_OnExecute;

            TimedEventManager.Add(5, 56, 450, 9, 12, 627, TimeMultiplier); //reach 88mph

            tRogersSierra.isOnTrainMission = true;

            _wheelPtfxes    = new List <PtfxEntityBonePlayer>();
            _funnelExplPtfx = new PtfxEntityBonePlayer("scr_josh3", "scr_josh3_explosion", tRogersSierra.Locomotive, "funnel_dummy", Vector3.Zero, Vector3.Zero);

            _missionMusic.Play();

            if (!PlayMusic)
            {
                _missionMusic.Volume = 0f;
            }
        }