public override void Process() { timeTravelAudio?.Process(); if (Vehicle == null) { return; } if (!isTimeTravelling) { return; } if (Game.GameTime < gameTimer) { return; } switch (currentStep) { case 0: timeTravelAudio.Play(Vehicle); // If the current Time Travel mode is Instant if (CurrentMode != TimeTravelMode.CutScene) { // Have to call SetupJump manually here. TimeHandler.TimeTravelTo(TimeCircuits, DestinationTime); // Set MPHSpeed MPHSpeed = 65; // Stop handling Stop(); return; } TimeCircuits.GetHandler <FireTrailsHandler>().SpawnFireTrails(); Utils.HideVehicle(Vehicle, true); // If the Vehicle is remote controlled or the player is not the one in the driver seat if (IsRemoteControlled || Vehicle.GetPedOnSeat(VehicleSeat.Driver) != Game.Player.Character) { // Stop remote controlling TimeCircuits.GetHandler <RCHandler>().StopRC(); // Add to time travelled list TimeHandler.AddToTimeTravelledList(TimeCircuits); // Reset currentStep + other fields. ResetFields(); return; } gameTimer = Game.GameTime + 4000; currentStep++; break; case 1: Game.FadeScreenOut(1000); gameTimer = Game.GameTime + 1500; currentStep++; break; case 2: TimeHandler.TimeTravelTo(TimeCircuits, DestinationTime); TimeCircuits.GetHandler <FireTrailsHandler>().Stop(); gameTimer = Game.GameTime + 1000; currentStep++; break; case 3: Game.FadeScreenIn(1000); gameTimer = Game.GameTime + 2000; currentStep++; break; case 4: Reenter(); TimeHandler.AddToTimeTravelledList(TimeCircuits); ResetFields(); break; } }
public override void Process() { _reentryTimer += Game.LastFrameTime; if (_reentryTimer > 2) { if (Vehicle.Driver == null) { Vehicle.IsHandbrakeForcedOn = false; Vehicle.SteeringAngle = 0; } } if (!IsTimeTravelling) { return; } if (!Vehicle.IsVisible) { Vehicle.IsEngineRunning = false; } if (Vehicle == null) { return; } if (Game.GameTime < gameTimer) { return; } switch (_currentStep) { case 0: TimeCircuits.Delorean.LastVelocity = Vehicle.Velocity; TimeCircuits.WasOnTracks = TimeCircuits.IsOnTracks; if (IsOnTracks) { TimeCircuits.GetHandler <RailroadHandler>().StopTrain(); } // Set previous time PreviousTime = Utils.GetWorldTime(); // Invoke delegate TimeCircuits.OnTimeTravel?.Invoke(); if (!IsRemoteControlled && Vehicle.GetPedOnSeat(VehicleSeat.Driver) == Main.PlayerPed && (!CutsceneMode || Utils.IsPlayerUseFirstPerson())) { // Create a copy of the current status of the Delorean TimeCircuits.Delorean.LastDisplacementCopy = TimeCircuits.Delorean.Copy; timeTravelAudioInstant.Play(); if (Utils.IsPlayerUseFirstPerson()) { _whiteSphere.SpawnProp(); } else { ScreenFlash.FlashScreen(0.25f); } // Have to call SetupJump manually here. TimeHandler.TimeTravelTo(TimeCircuits, DestinationTime); Stop(); TimeCircuits.GetHandler <SparksHandler>().StartTimeTravelCooldown(); if (TimeCircuits.WasOnTracks) { TimeCircuits.GetHandler <RailroadHandler>().StartDriving(true); } if (!is99) { IsFueled = false; } TimeCircuits.GetHandler <FreezeHandler>().StartFreezeHandling(!is99); if (Mods.Hoodbox == ModState.On && !TimeCircuits.IsWarmedUp) { TimeCircuits.GetHandler <HoodboxHandler>().SetInstant(); } if (Mods.Hook == HookState.On) { Mods.Hook = HookState.Removed; } if (Mods.Plate == PlateType.Outatime) { Mods.Plate = PlateType.Empty; } // Invoke delegate TimeCircuits.OnTimeTravelComplete?.Invoke(); // Stop handling Stop(); //Add LastDisplacementCopy to remote Deloreans list RemoteDeloreansHandler.AddDelorean(TimeCircuits.Delorean.LastDisplacementCopy); return; } timeTravelAudioCutscene.Play(); // Play the effects _timeTravelEffect.Play(); // Play the light explosion _lightExplosion.Play(); trails = FireTrailsHandler.SpawnForDelorean( TimeCircuits, is99, (is99 || (Mods.HoverUnderbody == ModState.On && IsFlying)) ? 1f : 45, is99 ? -1 : 15, DeloreanType == DeloreanType.BTTF1, Mods.Wheel == WheelType.RailroadInvisible ? 75 : 50); // If the Vehicle is remote controlled or the player is not the one in the driver seat if (IsRemoteControlled || Vehicle.GetPedOnSeat(VehicleSeat.Driver) != Main.PlayerPed) { MPHSpeed = 0; // Stop remote controlling TimeCircuits.GetHandler <RcHandler>()?.StopRC(); // Add to time travelled list RemoteDeloreansHandler.AddDelorean(TimeCircuits.Delorean.Copy); Utils.HideVehicle(Vehicle, true); gameTimer = Game.GameTime + 300; _currentStep++; return; } // Create a copy of the current status of the Delorean TimeCircuits.Delorean.LastDisplacementCopy = TimeCircuits.Delorean.Copy; if (Mods.HoverUnderbody == ModState.On) { CanConvert = false; } Game.Player.IgnoredByPolice = true; Main.HideGui = true; Main.DisablePlayerSwitching = true; Utils.HideVehicle(Vehicle, true); TimeCircuits.Delorean.IsInTime = true; gameTimer = Game.GameTime + 300; _currentStep++; break; case 1: _timeTravelEffect.Stop(); if (Vehicle.GetPedOnSeat(VehicleSeat.Driver) != Main.PlayerPed) { DeloreanHandler.RemoveDelorean(TimeCircuits.Delorean, true, true); return; } gameTimer = Game.GameTime + 3700; _currentStep++; break; case 2: Screen.FadeOut(1000); gameTimer = Game.GameTime + 1500; _currentStep++; break; case 3: TimeHandler.TimeTravelTo(TimeCircuits, DestinationTime); FireTrailsHandler.RemoveTrail(trails); gameTimer = Game.GameTime + 1000; _currentStep++; break; case 4: TimeCircuits.OnTimeTravelComplete?.Invoke(); gameTimer = Game.GameTime + 2000; Screen.FadeIn(1000); _currentStep++; break; case 5: //Add LastDisplacementCopy to remote Deloreans list RemoteDeloreansHandler.AddDelorean(TimeCircuits.Delorean.LastDisplacementCopy); Reenter(); ResetFields(); break; } }