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 (CurrentRoute != null)
{
CurrentlyLoading = true;
Renderer.OptionInterface = false;
if (!Interface.CurrentOptions.LoadingBackground)
{
Renderer.RenderScene(0.0);
currentGameWindow.SwapBuffers();
Bitmap bitmap = new Bitmap(Renderer.ScreenWidth, Renderer.ScreenHeight, 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.ScreenWidth, Renderer.ScreenHeight, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bData.Scan0);
bitmap.UnlockBits(bData);
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
Renderer.TextureLoadingBkg = TextureManager.RegisterTexture(bitmap, false);
bitmap.Dispose();
}
World.CameraAlignment a = World.CameraCurrentAlignment;
if (LoadRoute())
{
World.CameraCurrentAlignment = a;
TrackManager.UpdateTrackFollower(ref World.CameraTrackFollower, -1.0, true, false);
TrackManager.UpdateTrackFollower(ref World.CameraTrackFollower, a.TrackPosition, true, false);
World.CameraAlignmentDirection = new World.CameraAlignment();
World.CameraAlignmentSpeed = new World.CameraAlignment();
ObjectManager.UpdateVisibility(a.TrackPosition, true);
ObjectManager.UpdateAnimatedWorldObjects(0.0, true);
}
CurrentlyLoading = false;
Renderer.OptionInterface = true;
TextureManager.UnregisterTexture(ref Renderer.TextureLoadingBkg);
}
break;
case Key.F7:
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;
CurrentRoute = Dialog.FileName;
LoadRoute();
ObjectManager.UpdateAnimatedWorldObjects(0.0, true);
CurrentlyLoading = false;
UpdateCaption();
}
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:
World.CameraAlignmentDirection.Position.X = -World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.D:
case Key.Keypad6:
World.CameraAlignmentDirection.Position.X = World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Keypad2:
World.CameraAlignmentDirection.Position.Y = -World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Keypad8:
World.CameraAlignmentDirection.Position.Y = World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.W:
case Key.Keypad9:
World.CameraAlignmentDirection.TrackPosition = World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.S:
case Key.Keypad3:
World.CameraAlignmentDirection.TrackPosition = -World.CameraExteriorTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Left:
World.CameraAlignmentDirection.Yaw = -World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Right:
World.CameraAlignmentDirection.Yaw = World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Up:
World.CameraAlignmentDirection.Pitch = World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Down:
World.CameraAlignmentDirection.Pitch = -World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.KeypadDivide:
World.CameraAlignmentDirection.Roll = -World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.KeypadMultiply:
World.CameraAlignmentDirection.Roll = World.CameraExteriorTopAngularSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.Keypad0:
World.CameraAlignmentDirection.Zoom = World.CameraZoomTopSpeed*speedModified;
CpuReducedMode = false;
break;
case Key.KeypadPeriod:
World.CameraAlignmentDirection.Zoom = -World.CameraZoomTopSpeed*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:
World.CameraCurrentAlignment.Yaw = 0.0;
World.CameraCurrentAlignment.Pitch = 0.0;
World.CameraCurrentAlignment.Roll = 0.0;
World.CameraCurrentAlignment.Position = new World.Vector3D(0.0, 2.5, 0.0);
World.CameraCurrentAlignment.Zoom = 0.0;
World.CameraAlignmentDirection = new World.CameraAlignment();
World.CameraAlignmentSpeed = new World.CameraAlignment();
World.VerticalViewingAngle = World.OriginalVerticalViewingAngle;
UpdateViewport();
World.UpdateAbsoluteCamera(0.0);
World.UpdateViewingDistances();
CpuReducedMode = false;
break;
case Key.F:
Renderer.OptionWireframe = !Renderer.OptionWireframe;
CpuReducedMode = false;
if (Renderer.OptionWireframe)
{
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
}
else
{
GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
}
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 < TrackManager.CurrentTrack.Elements[TrackManager.CurrentTrack.Elements.Length - 1].StartingTrackPosition + 100 && value > MinimumJumpToPositionValue - 100)
{
if (direction != 0)
{
value = World.CameraTrackFollower.TrackPosition + (double) direction*value;
}
TrackManager.UpdateTrackFollower(ref World.CameraTrackFollower, value, true, false);
World.CameraCurrentAlignment.TrackPosition = value;
World.UpdateAbsoluteCamera(0.0);
World.UpdateViewingDistances();
}
}
}
JumpToPositionEnabled = false;
CpuReducedMode = false;
break;
case Key.Escape:
JumpToPositionEnabled = false;
CpuReducedMode = false;
break;
}
}