// camera restriction internal static void InitializeCameraRestriction() { if ((CameraMode == CameraViewMode.Interior | CameraMode == CameraViewMode.InteriorLookAhead) & CameraRestriction == Camera.RestrictionMode.On) { CameraAlignmentSpeed = new CameraAlignment(); UpdateAbsoluteCamera(0.0); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment = new CameraAlignment(); VerticalViewingAngle = OriginalVerticalViewingAngle; Renderer.UpdateViewport(Renderer.ViewPortChangeMode.NoChange); UpdateAbsoluteCamera(0.0); UpdateViewingDistances(); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment.Position.Z = 0.8; UpdateAbsoluteCamera(0.0); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Z, 0.0, true); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment.Position.X = 0.5 * (CameraRestrictionBottomLeft.X + CameraRestrictionTopRight.X); CameraCurrentAlignment.Position.Y = 0.5 * (CameraRestrictionBottomLeft.Y + CameraRestrictionTopRight.Y); CameraCurrentAlignment.Position.Z = 0.0; UpdateAbsoluteCamera(0.0); if (PerformCameraRestrictionTest()) { PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.X, 0.0, true); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Y, 0.0, true); } else { CameraCurrentAlignment.Position.Z = 0.8; UpdateAbsoluteCamera(0.0); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Z, 0.0, true); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment = new CameraAlignment(); } } } } UpdateAbsoluteCamera(0.0); } } }
internal static void UpdateGraphicsSettings() { if (CurrentRouteFile != null) { Program.CurrentlyLoading = true; Renderer.RenderScene(0.0); Program.currentGameWindow.SwapBuffers(); CameraAlignment a = Renderer.Camera.Alignment; if (Program.LoadRoute()) { Renderer.Camera.Alignment = a; Program.Renderer.CameraTrackFollower.UpdateAbsolute(-1.0, true, false); Program.Renderer.CameraTrackFollower.UpdateAbsolute(a.TrackPosition, true, false); Renderer.Camera.AlignmentDirection = new CameraAlignment(); Renderer.Camera.AlignmentSpeed = new CameraAlignment(); Renderer.UpdateVisibility(a.TrackPosition, true); ObjectManager.UpdateAnimatedWorldObjects(0.0, true); } Program.CurrentlyLoading = false; } }
internal static void UpdateGraphicsSettings() { if (Program.CurrentRoute != null) { Program.CurrentlyLoading = true; Renderer.RenderScene(0.0); Program.currentGameWindow.SwapBuffers(); CameraAlignment a = Camera.CurrentAlignment; TextureManager.UnloadAllTextures(); if (Program.LoadRoute()) { Camera.CurrentAlignment = a; TrackManager.UpdateTrackFollower(ref World.CameraTrackFollower, -1.0, true, false); TrackManager.UpdateTrackFollower(ref World.CameraTrackFollower, a.TrackPosition, true, false); Camera.AlignmentDirection = new CameraAlignment(); Camera.AlignmentSpeed = new CameraAlignment(); ObjectManager.UpdateVisibility(a.TrackPosition, true); ObjectManager.UpdateAnimatedWorldObjects(0.0, true); } Program.CurrentlyLoading = false; } }
// camera restriction internal static void InitializeCameraRestriction() { if ((CameraMode == CameraViewMode.Interior | CameraMode == CameraViewMode.InteriorLookAhead) & CameraRestriction == CameraRestrictionMode.On) { CameraAlignmentSpeed = new CameraAlignment(); UpdateAbsoluteCamera(0.0); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment = new CameraAlignment(); VerticalViewingAngle = OriginalVerticalViewingAngle; MainLoop.UpdateViewport(MainLoop.ViewPortChangeMode.NoChange); UpdateAbsoluteCamera(0.0); UpdateViewingDistances(); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment.Position.Z = 0.8; UpdateAbsoluteCamera(0.0); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Z, 0.0, true); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment.Position.X = 0.5 * (CameraRestrictionBottomLeft.X + CameraRestrictionTopRight.X); CameraCurrentAlignment.Position.Y = 0.5 * (CameraRestrictionBottomLeft.Y + CameraRestrictionTopRight.Y); CameraCurrentAlignment.Position.Z = 0.0; UpdateAbsoluteCamera(0.0); if (PerformCameraRestrictionTest()) { PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.X, 0.0, true); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Y, 0.0, true); } else { CameraCurrentAlignment.Position.Z = 0.8; UpdateAbsoluteCamera(0.0); PerformProgressiveAdjustmentForCameraRestriction(ref CameraCurrentAlignment.Position.Z, 0.0, true); if (!PerformCameraRestrictionTest()) { CameraCurrentAlignment = new CameraAlignment(); } } } } UpdateAbsoluteCamera(0.0); } } }
internal static void keyDownEvent(object sender, KeyboardKeyEventArgs e) { double speedModified = (ShiftPressed ? 2.0 : 1.0) * (ControlPressed ? 4.0 : 1.0) * (AltPressed ? 8.0 : 1.0); switch (e.Key) { case Key.ShiftLeft: case Key.ShiftRight: ShiftPressed = true; break; case Key.ControlLeft: case Key.ControlRight: ControlPressed = true; break; case Key.LAlt: case Key.RAlt: AltPressed = true; break; case Key.F5: if (CurrentRouteFile != null && CurrentlyLoading == false) { Bitmap bitmap = null; CurrentlyLoading = true; Renderer.OptionInterface = false; if (!Interface.CurrentOptions.LoadingBackground) { Renderer.RenderScene(0.0); currentGameWindow.SwapBuffers(); bitmap = new Bitmap(Renderer.Screen.Width, Renderer.Screen.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); BitmapData bData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); GL.ReadPixels(0, 0, Renderer.Screen.Width, Renderer.Screen.Height, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bData.Scan0); bitmap.UnlockBits(bData); bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); Renderer.Loading.SetLoadingBkg(Renderer.TextureManager.RegisterTexture(bitmap, new TextureParameters(null, null))); } CameraAlignment a = Renderer.Camera.Alignment; if (LoadRoute()) { Renderer.Camera.Alignment = a; Program.Renderer.CameraTrackFollower.UpdateAbsolute(-1.0, true, false); Program.Renderer.CameraTrackFollower.UpdateAbsolute(a.TrackPosition, true, false); Renderer.Camera.AlignmentDirection = new CameraAlignment(); Renderer.Camera.AlignmentSpeed = new CameraAlignment(); Renderer.UpdateVisibility(a.TrackPosition, true); ObjectManager.UpdateAnimatedWorldObjects(0.0, true); } CurrentlyLoading = false; Renderer.OptionInterface = true; if (bitmap != null) { bitmap.Dispose(); } } break; case Key.F7: if (CurrentlyLoading == true) { break; } OpenFileDialog Dialog = new OpenFileDialog(); Dialog.CheckFileExists = true; Dialog.Filter = @"CSV/RW files|*.csv;*.rw|All files|*"; if (Dialog.ShowDialog() == DialogResult.OK) { Application.DoEvents(); CurrentlyLoading = true; CurrentRouteFile = Dialog.FileName; LoadRoute(); ObjectManager.UpdateAnimatedWorldObjects(0.0, true); CurrentlyLoading = false; UpdateCaption(); } else { if (Program.CurrentlyRunOnMono) { //HACK: Dialog doesn't close properly when pressing the ESC key under Mono //Avoid calling Application.DoEvents() unless absolutely necessary though! Application.DoEvents(); } } Dialog.Dispose(); break; case Key.F8: if (Program.CurrentlyLoading == true) { //Don't allow the user to update the settings during loading, bad idea.. break; } if (formOptions.ShowOptions() == DialogResult.OK) { UpdateGraphicsSettings(); } Application.DoEvents(); break; case Key.F9: if (Interface.MessageCount != 0) { formMessages.ShowMessages(); Application.DoEvents(); } break; case Key.F10: Renderer.RenderStatsOverlay = !Renderer.RenderStatsOverlay; break; case Key.A: case Key.Keypad4: Renderer.Camera.AlignmentDirection.Position.X = -CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.D: case Key.Keypad6: Renderer.Camera.AlignmentDirection.Position.X = CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.Keypad2: Renderer.Camera.AlignmentDirection.Position.Y = -CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.Keypad8: Renderer.Camera.AlignmentDirection.Position.Y = CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.W: case Key.Keypad9: Renderer.Camera.AlignmentDirection.TrackPosition = CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.S: case Key.Keypad3: Renderer.Camera.AlignmentDirection.TrackPosition = -CameraProperties.ExteriorTopSpeed * speedModified; CpuReducedMode = false; break; case Key.Left: Renderer.Camera.AlignmentDirection.Yaw = -CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.Right: Renderer.Camera.AlignmentDirection.Yaw = CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.Up: Renderer.Camera.AlignmentDirection.Pitch = CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.Down: Renderer.Camera.AlignmentDirection.Pitch = -CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.KeypadDivide: Renderer.Camera.AlignmentDirection.Roll = -CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.KeypadMultiply: Renderer.Camera.AlignmentDirection.Roll = CameraProperties.ExteriorTopAngularSpeed * speedModified; CpuReducedMode = false; break; case Key.Keypad0: Renderer.Camera.AlignmentDirection.Zoom = CameraProperties.ZoomTopSpeed * speedModified; CpuReducedMode = false; break; case Key.KeypadPeriod: Renderer.Camera.AlignmentDirection.Zoom = -CameraProperties.ZoomTopSpeed * speedModified; CpuReducedMode = false; break; case Key.Keypad1: Game.ApplyPointOfInterest(-1, true); CpuReducedMode = false; break; case Key.Keypad7: Game.ApplyPointOfInterest(1, true); CpuReducedMode = false; break; case Key.PageUp: JumpToStation(1); CpuReducedMode = false; break; case Key.PageDown: JumpToStation(-1); CpuReducedMode = false; break; case Key.Keypad5: Renderer.Camera.Alignment.Yaw = 0.0; Renderer.Camera.Alignment.Pitch = 0.0; Renderer.Camera.Alignment.Roll = 0.0; Renderer.Camera.Alignment.Position = new Vector3(0.0, 2.5, 0.0); Renderer.Camera.Alignment.Zoom = 0.0; Renderer.Camera.AlignmentDirection = new CameraAlignment(); Renderer.Camera.AlignmentSpeed = new CameraAlignment(); Renderer.Camera.VerticalViewingAngle = Renderer.Camera.OriginalVerticalViewingAngle; Renderer.UpdateViewport(); World.UpdateAbsoluteCamera(0.0); Program.Renderer.UpdateViewingDistances(Program.CurrentRoute.CurrentBackground.BackgroundImageDistance); CpuReducedMode = false; break; case Key.F: Renderer.OptionWireFrame = !Renderer.OptionWireFrame; CpuReducedMode = false; break; case Key.N: Renderer.OptionNormals = !Renderer.OptionNormals; CpuReducedMode = false; break; case Key.E: Renderer.OptionEvents = !Renderer.OptionEvents; CpuReducedMode = false; break; case Key.C: CpuAutomaticMode = !CpuAutomaticMode; CpuReducedMode = false; break; case Key.I: Renderer.OptionInterface = !Renderer.OptionInterface; CpuReducedMode = false; break; case Key.M: //SoundManager.Mute = !SoundManager.Mute; break; case Key.Plus: case Key.KeypadPlus: if (!JumpToPositionEnabled) { JumpToPositionEnabled = true; JumpToPositionValue = "+"; CpuReducedMode = false; } break; case Key.Minus: case Key.KeypadMinus: if (!JumpToPositionEnabled) { JumpToPositionEnabled = true; JumpToPositionValue = "-"; CpuReducedMode = false; } break; case Key.Number0: case Key.Number1: case Key.Number2: case Key.Number3: case Key.Number4: case Key.Number5: case Key.Number6: case Key.Number7: case Key.Number8: case Key.Number9: if (!JumpToPositionEnabled) { JumpToPositionEnabled = true; JumpToPositionValue = string.Empty; } JumpToPositionValue += char.ConvertFromUtf32(48 + e.Key - Key.Number0); CpuReducedMode = false; break; case Key.Period: if (!JumpToPositionEnabled) { JumpToPositionEnabled = true; JumpToPositionValue = "0."; } else if (JumpToPositionValue.IndexOf('.') == -1) { JumpToPositionValue += "."; } CpuReducedMode = false; break; case Key.BackSpace: if (JumpToPositionEnabled && JumpToPositionValue.Length != 0) { JumpToPositionValue = JumpToPositionValue.Substring(0, JumpToPositionValue.Length - 1); CpuReducedMode = false; } break; case Key.Enter: if (JumpToPositionEnabled) { if (JumpToPositionValue.Length != 0) { int direction; if (JumpToPositionValue[0] == '-') { JumpToPositionValue = JumpToPositionValue.Substring(1); direction = -1; } else if (JumpToPositionValue[0] == '+') { JumpToPositionValue = JumpToPositionValue.Substring(1); direction = 1; } else { direction = 0; } double value; if (double.TryParse(JumpToPositionValue, NumberStyles.Float, CultureInfo.InvariantCulture, out value)) { if (value < CurrentRoute.Tracks[0].Elements[CurrentRoute.Tracks[0].Elements.Length - 1].StartingTrackPosition + 100 && value > MinimumJumpToPositionValue - 100) { if (direction != 0) { value = Program.Renderer.CameraTrackFollower.TrackPosition + (double)direction * value; } Program.Renderer.CameraTrackFollower.UpdateAbsolute(value, true, false); Renderer.Camera.Alignment.TrackPosition = value; World.UpdateAbsoluteCamera(0.0); Program.Renderer.UpdateViewingDistances(Program.CurrentRoute.CurrentBackground.BackgroundImageDistance); } } } } JumpToPositionEnabled = false; CpuReducedMode = false; break; case Key.Escape: JumpToPositionEnabled = false; CpuReducedMode = false; break; case Key.R: Interface.CurrentOptions.IsUseNewRenderer = !Interface.CurrentOptions.IsUseNewRenderer; break; } }