From df80b957141386a45a09a0f09c4b3c9d080331c7 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 24 Sep 2015 15:38:56 +1000 Subject: [PATCH] Implement new key mapping gui. --- .../2D/Screens/Menu/EnvSettingsScreen.cs | 7 +- .../2D/Screens/Menu/KeyMappingsScreen.cs | 71 ++++-- .../2D/Screens/Menu/MenuInputScreen.cs | 8 +- ClassicalSharp/2D/Screens/Menu/MenuScreen.cs | 3 +- .../2D/Screens/Menu/OptionsScreen.cs | 20 +- ClassicalSharp/2D/Screens/Menu/PauseScreen.cs | 12 +- ClassicalSharp/2D/Screens/OldPauseScreen.cs | 206 ------------------ ClassicalSharp/2D/Widgets/ButtonWidget.cs | 4 +- .../2D/Widgets/Menu/MenuInputValidator.cs | 8 +- ClassicalSharp/ClassicalSharp.csproj | 1 - ClassicalSharp/Game/Game.InputHandling.cs | 25 ++- ClassicalSharp/TexturePack/Animations.cs | 2 +- 12 files changed, 102 insertions(+), 265 deletions(-) delete mode 100644 ClassicalSharp/2D/Screens/OldPauseScreen.cs diff --git a/ClassicalSharp/2D/Screens/Menu/EnvSettingsScreen.cs b/ClassicalSharp/2D/Screens/Menu/EnvSettingsScreen.cs index 0da43d986..34f4393f9 100644 --- a/ClassicalSharp/2D/Screens/Menu/EnvSettingsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/EnvSettingsScreen.cs @@ -50,12 +50,12 @@ namespace ClassicalSharp { g => ((int)g.Map.Weather).ToString(), (g, v) => g.Map.SetWeather( (Weather)Int32.Parse( v ) ) ), - Make( 140, 50, "Water level", Docking.Centre,OnWidgetClick, + Make( 140, 50, "Water level", Docking.Centre, OnWidgetClick, g => g.Map.WaterHeight.ToString(), (g, v) => g.Map.SetWaterLevel( Int32.Parse( v ) ) ), Make( 0, 5, "Back to menu", Docking.BottomOrRight, - g => g.SetNewScreen( new PauseScreen( g ) ), null, null ), + (g, w) => g.SetNewScreen( new PauseScreen( g ) ), null, null ), null, }; @@ -72,7 +72,8 @@ namespace ClassicalSharp { okayIndex = buttons.Length - 1; } - ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick, Func getter, Action setter ) { + ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick, + Func getter, Action setter ) { ButtonWidget widget = ButtonWidget.Create( game, x, y, 240, 35, text, Docking.Centre, vDocking, titleFont, onClick ); widget.GetValue = getter; widget.SetValue = setter; diff --git a/ClassicalSharp/2D/Screens/Menu/KeyMappingsScreen.cs b/ClassicalSharp/2D/Screens/Menu/KeyMappingsScreen.cs index 77edc88e9..f752af4e2 100644 --- a/ClassicalSharp/2D/Screens/Menu/KeyMappingsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/KeyMappingsScreen.cs @@ -11,41 +11,84 @@ namespace ClassicalSharp { public override void Render( double delta ) { base.Render( delta ); + statusWidget.Render( delta ); } Font keyFont; + TextWidget statusWidget; + static string[] keyNames; + static string[] descriptions = new [] { "Forward", "Back", "Left", "Right", "Jump", "Respawn", + "Set spawn", "Open chat", "Send chat", "Pause", "Open inventory", "Take screenshot", + "Toggle fullscreen", "Toggle 3rd person", "Cycle view distance", "Toggle fly", "Speed", + "Toggle noclip", "Fly up", "Fly down", "Display player list", "Hide gui" }; + public override void Init() { + if( keyNames == null ) + keyNames = Enum.GetNames( typeof( Key ) ); keyFont = new Font( "Arial", 14, FontStyle.Bold ); + regularFont = new Font( "Arial", 14, FontStyle.Italic ); titleFont = new Font( "Arial", 16, FontStyle.Bold ); - string[] descriptionsLeft = { "Forward", "Back", "Left", "Right", "Jump", "Respawn", "Set spawn", - "Open chat", "Send chat", "Pause", "Open inventory" }; - string[] descriptionsRight = { "Take screenshot", "Toggle fullscreen", "Toggle 3rd person camera", "Change view distance", - "Toggle fly", "Speed", "Toggle noclip", "Fly up", "Fly down", "Display player list", "Hide gui" }; - buttons = new ButtonWidget[descriptionsLeft.Length + descriptionsRight.Length + 1]; + buttons = new ButtonWidget[descriptions.Length + 1]; - MakeKeys( KeyMapping.Forward, descriptionsLeft, -140 ); - MakeKeys( KeyMapping.Screenshot, descriptionsRight, 140 ); - buttons[index] = Make( 0, 5, "Back to menu", Docking.BottomOrRight, g => g.SetNewScreen( new PauseScreen( g ) ) ); + MakeKeys( 0, 11, -140 ); + MakeKeys( 11, 11, 140 ); + buttons[index] = Make( 0, 5, "Back to menu", Docking.BottomOrRight, (g, w) => g.SetNewScreen( new PauseScreen( g ) ) ); + statusWidget = TextWidget.Create( game, 0, 150, "", Docking.Centre, Docking.Centre, regularFont ); } int index; - void MakeKeys( KeyMapping start, string[] descriptions, int x ) { + void MakeKeys( int start, int len, int x ) { int y = -180; - for( int i = 0; i < descriptions.Length; i++ ) { - int width = x < 0 ? 180 : 240; - buttons[index++] = ButtonWidget.Create( game, x, y, width, 25, descriptions[i], - Docking.Centre, Docking.Centre, keyFont, g => { } ); + for( int i = 0; i < len; i++ ) { + KeyMapping mapping = (KeyMapping)( (int)start + i ); + string text = descriptions[start + i] + ": " + keyNames[(int)game.Keys[mapping]]; + + buttons[index++] = ButtonWidget.Create( game, x, y, 240, 25, text, + Docking.Centre, Docking.Centre, keyFont, OnWidgetClick ); y += 30; } } - ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick ) { + ButtonWidget widget; + void OnWidgetClick( Game game, ButtonWidget widget ) { + this.widget = widget; + int index = Array.IndexOf( buttons, widget ); + statusWidget.Dispose(); + + string text = "Press new key binding for " + descriptions[index] + ":"; + statusWidget = TextWidget.Create( game, 0, 150, text, Docking.Centre, Docking.Centre, regularFont ); + } + + public override bool HandlesKeyDown( Key key ) { + if( widget != null ) { + int index = Array.IndexOf( buttons, widget ); + KeyMapping mapping = (KeyMapping)index; + Key oldKey = game.Keys[mapping]; + string reason; + + if( !game.Keys.IsKeyOkay( oldKey, key, out reason ) ) { + const string format = "&eFailed to change mapping \"{0}\". &c({1})"; + statusWidget.SetText( String.Format( format, descriptions[index], reason ) ); + } else { + const string format = "&eChanged mapping \"{0}\" from &7{1} &eto &7{2}&e."; + statusWidget.SetText( String.Format( format, descriptions[index], oldKey, key ) ); + string text = descriptions[index] + " : " + keyNames[(int)key]; + widget.SetText( text ); + game.Keys[mapping] = key; + } + widget = null; + } + return true; + } + + ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick ) { return ButtonWidget.Create( game, x, y, 240, 35, text, Docking.Centre, vDocking, keyFont, onClick ); } public override void Dispose() { keyFont.Dispose(); base.Dispose(); + statusWidget.Dispose(); } } } \ No newline at end of file diff --git a/ClassicalSharp/2D/Screens/Menu/MenuInputScreen.cs b/ClassicalSharp/2D/Screens/Menu/MenuInputScreen.cs index 10f57b2e0..92bfc9102 100644 --- a/ClassicalSharp/2D/Screens/Menu/MenuInputScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/MenuInputScreen.cs @@ -70,8 +70,8 @@ namespace ClassicalSharp { descWidget = TextWidget.Create( game, 0, 100, text, Docking.Centre, Docking.Centre, regularFont ); } - protected void OnWidgetClick( Game game ) { - if( selectedWidget == buttons[okayIndex] ) { + protected void OnWidgetClick( Game game, ButtonWidget widget ) { + if( widget == buttons[okayIndex] ) { string text = inputWidget.GetText(); if( inputWidget.Validator.IsValidValue( text ) ) targetWidget.SetValue( game, text ); @@ -88,9 +88,9 @@ namespace ClassicalSharp { inputWidget.Dispose(); targetWidget = selectedWidget; - int index = Array.IndexOf( buttons, selectedWidget ); + int index = Array.IndexOf( buttons, widget ); MenuInputValidator validator = validators[index]; - inputWidget = MenuInputWidget.Create( game, 0, 150, 400, 25, selectedWidget.GetValue( game ), + inputWidget = MenuInputWidget.Create( game, 0, 150, 400, 25, widget.GetValue( game ), Docking.Centre, Docking.Centre, regularFont, titleFont, hintFont, validator ); buttons[okayIndex] = ButtonWidget.Create( game, 240, 150, 30, 30, "OK", diff --git a/ClassicalSharp/2D/Screens/Menu/MenuScreen.cs b/ClassicalSharp/2D/Screens/Menu/MenuScreen.cs index 3d52d6f8d..760590414 100644 --- a/ClassicalSharp/2D/Screens/Menu/MenuScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/MenuScreen.cs @@ -47,7 +47,8 @@ namespace ClassicalSharp { for( int i = 0; i < buttons.Length; i++ ) { ButtonWidget widget = buttons[i]; if( widget != null && widget.ContainsPoint( mouseX, mouseY ) ) { - widget.OnClick( game ); + if( widget.OnClick != null ) + widget.OnClick( game, widget ); return true; } } diff --git a/ClassicalSharp/2D/Screens/Menu/OptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/OptionsScreen.cs index cc0b7e931..81fb14082 100644 --- a/ClassicalSharp/2D/Screens/Menu/OptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/OptionsScreen.cs @@ -19,31 +19,26 @@ namespace ClassicalSharp { buttons = new ButtonWidget[] { Make( -140, -50, "Use animations", Docking.Centre, OnWidgetClick, - g => g.Animations.Enabled ? "yes" : "no", - (g, v) => g.Animations.Enabled = v == "yes" ), + g => g.Animations.Enabled ? "y" : "n", + (g, v) => g.Animations.Enabled = v == "y" ), Make( -140, 0, "View distance", Docking.Centre, OnWidgetClick, g => g.ViewDistance.ToString(), (g, v) => g.SetViewDistance( Int32.Parse( v ) ) ), Make( -140, 50, "VSync active", Docking.Centre, OnWidgetClick, - g => g.VSync ? "yes" : "no", - (g, v) => g.Graphics.SetVSync( g, v == "yes" ) ), + g => g.VSync ? "y" : "n", + (g, v) => g.Graphics.SetVSync( g, v == "y" ) ), Make( 140, -50, "Mouse sensitivity", Docking.Centre, OnWidgetClick, g => g.MouseSensitivity.ToString(), (g, v) => g.MouseSensitivity = Int32.Parse( v ) ), Make( 140, 0, "Chat font size", Docking.Centre, OnWidgetClick, g => g.ChatFontSize.ToString(), - (g, v) => { - g.ChatFontSize = Int32.Parse( v ); - g.SetNewScreen( null ); - g.chatInInputBuffer = null; - g.SetNewScreen( new NormalScreen( game ) ); - } ), + (g, v) => g.ChatFontSize = Int32.Parse( v ) ), Make( 0, 5, "Back to menu", Docking.BottomOrRight, - g => g.SetNewScreen( new PauseScreen( g ) ), null, null ), + (g, w) => g.SetNewScreen( new PauseScreen( g ) ), null, null ), null, }; validators = new MenuInputValidator[] { @@ -56,7 +51,8 @@ namespace ClassicalSharp { okayIndex = buttons.Length - 1; } - ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick, Func getter, Action setter ) { + ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick, + Func getter, Action setter ) { ButtonWidget widget = ButtonWidget.Create( game, x, y, 240, 35, text, Docking.Centre, vDocking, titleFont, onClick ); widget.GetValue = getter; widget.SetValue = setter; diff --git a/ClassicalSharp/2D/Screens/Menu/PauseScreen.cs b/ClassicalSharp/2D/Screens/Menu/PauseScreen.cs index 308d6b46a..0ef93cfa3 100644 --- a/ClassicalSharp/2D/Screens/Menu/PauseScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/PauseScreen.cs @@ -12,15 +12,15 @@ namespace ClassicalSharp { public override void Init() { titleFont = new Font( "Arial", 16, FontStyle.Bold ); buttons = new ButtonWidget[] { - Make( 0, -50, "Options", Docking.Centre, g => g.SetNewScreen( new OptionsScreen( g ) ) ), - Make( 0, 0, "Environment settings", Docking.Centre, g => g.SetNewScreen( new EnvSettingsScreen( g ) ) ), - Make( 0, 50, "Key mappings", Docking.Centre, g => g.SetNewScreen( new OldPauseScreen( g ) ) ), // TODO: Temp fix - Make( 0, 55, "Back to game", Docking.BottomOrRight, g => g.SetNewScreen( new NormalScreen( g ) ) ), - Make( 0, 5, "Exit", Docking.BottomOrRight, g => g.Exit() ), + Make( 0, -50, "Options", Docking.Centre, (g, w) => g.SetNewScreen( new OptionsScreen( g ) ) ), + Make( 0, 0, "Environment settings", Docking.Centre, (g, w) => g.SetNewScreen( new EnvSettingsScreen( g ) ) ), + Make( 0, 50, "Key mappings", Docking.Centre, (g, w) => g.SetNewScreen( new KeyMappingsScreen( g ) ) ), // TODO: Temp fix + Make( 0, 55, "Back to game", Docking.BottomOrRight, (g, w) => g.SetNewScreen( new NormalScreen( g ) ) ), + Make( 0, 5, "Exit", Docking.BottomOrRight, (g, w) => g.Exit() ), }; } - ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick ) { + ButtonWidget Make( int x, int y, string text, Docking vDocking, Action onClick ) { return ButtonWidget.Create( game, x, y, 240, 35, text, Docking.Centre, vDocking, titleFont, onClick ); } } diff --git a/ClassicalSharp/2D/Screens/OldPauseScreen.cs b/ClassicalSharp/2D/Screens/OldPauseScreen.cs deleted file mode 100644 index f4b7c3859..000000000 --- a/ClassicalSharp/2D/Screens/OldPauseScreen.cs +++ /dev/null @@ -1,206 +0,0 @@ -using System; -using System.Drawing; -using OpenTK.Input; - -namespace ClassicalSharp { - - public class OldPauseScreen : Screen { - - public OldPauseScreen( Game game ) : base( game ) { - } - - TextWidget controlsWidget, gameWidget, keyStatusWidget; - KeyMapWidget[] keysLeft, keysRight; - KeyMapWidget widgetToChange; - - public override void Render( double delta ) { - graphicsApi.Draw2DQuad( 0, 0, game.Width, game.Height, new FastColour( 255, 255, 255, 100 ) ); - graphicsApi.Texturing = true; - controlsWidget.Render( delta ); - gameWidget.Render( delta ); - keyStatusWidget.Render( delta ); - for( int i = 0; i < keysLeft.Length; i++ ) { - keysLeft[i].Render( delta ); - } - for( int i = 0; i < keysRight.Length; i++ ) { - keysRight[i].Render( delta ); - } - graphicsApi.Texturing = false; - } - - Font titleFont, keyStatusFont, textFont; - static string[] keyNames; - public override void Init() { - if( keyNames == null ) { - keyNames = Enum.GetNames( typeof( Key ) ); - } - titleFont = new Font( "Arial", 16, FontStyle.Bold ); - keyStatusFont = new Font( "Arial", 13, FontStyle.Italic ); - textFont = new Font( "Arial", 14, FontStyle.Bold ); - controlsWidget = TextWidget.Create( game, 0, 20, "&eControls list", Docking.Centre, Docking.LeftOrTop, titleFont ); - keyStatusWidget = TextWidget.Create( game, 0, 70, "", Docking.Centre, Docking.BottomOrRight, keyStatusFont ); - gameWidget = TextWidget.Create( game, 0, 40, "&eBack to menu", Docking.Centre, Docking.BottomOrRight, titleFont ); - - string[] descriptionsLeft = { "Forward", "Back", "Left", "Right", "Jump", "Respawn", "Set spawn", - "Open chat", "Send chat", "Pause", "Open inventory", "Take screenshot" }; - MakeKeys( KeyMapping.Forward, descriptionsLeft, 10, out keysLeft ); - leftEnd = CalculateMaxWidth( keysLeft ); - - string[] descriptionsRight = { "Toggle VSync", "Toggle fullscreen", "Toggle 3rd person camera", "Change view distance", - "Toggle fly", "Speed", "Toggle noclip", "Fly up", "Fly down", "Display player list", "Hide gui" }; - MakeKeys( KeyMapping.VSync, descriptionsRight, leftEnd + 30, out keysRight ); - } - - int leftEnd; - void MakeKeys( KeyMapping start, string[] descriptions, int offset, out KeyMapWidget[] widgets ) { - int startY = controlsWidget.BottomRight.Y + 5; - widgets = new KeyMapWidget[descriptions.Length]; - - for( int i = 0; i < widgets.Length; i++ ) { - KeyMapping mapping = (KeyMapping)( (int)start + i ); - Key tkKey = game.Keys[mapping]; - string text = descriptions[i] + ": " + keyNames[(int)tkKey]; - TextWidget widget = TextWidget.Create( game, offset, startY, text, Docking.LeftOrTop, Docking.LeftOrTop, textFont ); - widgets[i] = new KeyMapWidget( widget, mapping, descriptions[i] ); - startY += widget.Height + 5; - } - } - - public override void Dispose() { - textFont.Dispose(); - titleFont.Dispose(); - keyStatusFont.Dispose(); - keyStatusWidget.Dispose(); - gameWidget.Dispose(); - controlsWidget.Dispose(); - for( int i = 0; i < keysLeft.Length; i++ ) { - keysLeft[i].Dispose(); - } - for( int i = 0; i < keysRight.Length; i++ ) { - keysRight[i].Dispose(); - } - } - - public override void OnResize( int oldWidth, int oldHeight, int width, int height ) { - gameWidget.OnResize( oldWidth, oldHeight, width, height ); - controlsWidget.OnResize( oldWidth, oldHeight, width, height ); - keyStatusWidget.OnResize( oldWidth, oldHeight, width, height ); - for( int i = 0; i < keysLeft.Length; i++ ) { - keysLeft[i].OnResize( oldWidth, oldHeight, width, height ); - } - for( int i = 0; i < keysRight.Length; i++ ) { - keysRight[i].OnResize( oldWidth, oldHeight, width, height ); - } - } - - public override bool HandlesAllInput { - get { return true; } - } - - public override bool HandlesKeyDown( Key key ) { - if( key == game.Keys[KeyMapping.PauseOrExit] ) { - game.SetNewScreen( new NormalScreen( game ) ); - return true; - } - if( widgetToChange != null ) { - KeyMapWidget widget = widgetToChange; - widgetToChange = null; - string reason; - if( !game.Keys.IsKeyOkay( key, out reason ) ) { - const string format = "&eFailed to change mapping \"{0}\". &c({1})"; - keyStatusWidget.SetText( String.Format( format, widget.Description, reason ) ); - } else { - Key oldKey = game.Keys[widget.Mapping]; - const string format = "&eChanged mapping \"{0}\" from &7{1} &eto &7{2}&e."; - keyStatusWidget.SetText( String.Format( format, widget.Description, oldKey, key ) ); - game.Keys[widget.Mapping] = key; - widget.Widget.SetText( widget.Description + ": " + key ); - if( Array.IndexOf( keysLeft, widget ) >= 0 ) { - ResizeKeysRight(); - } - } - } - return true; - } - - void ResizeKeysRight() { - int newLeftEnd = CalculateMaxWidth( keysLeft ); - if( newLeftEnd != leftEnd ) { - int diff = newLeftEnd - leftEnd; - for( int i = 0; i < keysRight.Length; i++ ) { - TextWidget textWidget = keysRight[i].Widget; - textWidget.XOffset = newLeftEnd + 30; - textWidget.MoveTo( textWidget.X + diff, textWidget.Y ); - } - } - leftEnd = newLeftEnd; - } - - int CalculateMaxWidth( KeyMapWidget[] widgets ) { - int maxWidth = 0; - for( int i = 0; i < widgets.Length; i++ ) { - maxWidth = Math.Max( widgets[i].Widget.Width, maxWidth ); - } - return maxWidth; - } - - public override bool HandlesMouseClick( int mouseX, int mouseY, MouseButton button ) { - if( button != MouseButton.Left ) return true; - if( gameWidget.ContainsPoint( mouseX, mouseY ) ) { - game.SetNewScreen( new PauseScreen( game ) ); - } else if( widgetToChange == null ) { - for( int i = 0; i < keysLeft.Length; i++ ) { - KeyMapWidget widget = keysLeft[i]; - if( widget.Widget.ContainsPoint( mouseX, mouseY ) ) { - SetWidgetToChange( widget ); - return true; - } - } - for( int i = 0; i < keysRight.Length; i++ ) { - KeyMapWidget widget = keysRight[i]; - if( widget.Widget.ContainsPoint( mouseX, mouseY ) ) { - SetWidgetToChange( widget ); - return true; - } - } - } - return true; - } - - void SetWidgetToChange( KeyMapWidget widget ) { - Key oldKey = game.Keys[widget.Mapping]; - if( oldKey != Key.Escape && oldKey != Key.F12 ) { - const string format = "&ePress new key for \"{0}\"."; - keyStatusWidget.SetText( String.Format( format, widget.Description ) ); - widgetToChange = widget; - } else { - const string format = "&cCannot change mapping of &e\"{0}\"."; - keyStatusWidget.SetText( String.Format( format, widget.Description ) ); - } - } - - class KeyMapWidget { - public TextWidget Widget; - public KeyMapping Mapping; - public string Description; - - public KeyMapWidget( TextWidget widget, KeyMapping mapping, string desc ) { - Widget = widget; - Mapping = mapping; - Description = desc; - } - - public void Render( double delta ) { - Widget.Render( delta ); - } - - public void OnResize( int oldWidth, int oldHeight, int width, int height ) { - Widget.OnResize( oldWidth, oldHeight, width, height ); - } - - public void Dispose() { - Widget.Dispose(); - } - } - } -} \ No newline at end of file diff --git a/ClassicalSharp/2D/Widgets/ButtonWidget.cs b/ClassicalSharp/2D/Widgets/ButtonWidget.cs index f8ff70a20..6767cf932 100644 --- a/ClassicalSharp/2D/Widgets/ButtonWidget.cs +++ b/ClassicalSharp/2D/Widgets/ButtonWidget.cs @@ -13,7 +13,7 @@ namespace ClassicalSharp { } public static ButtonWidget Create( Game game, int x, int y, int width, int height, string text, Docking horizontal, - Docking vertical, Font font, Action onClick ) { + Docking vertical, Font font, Action onClick ) { ButtonWidget widget = new ButtonWidget( game, font ); widget.Init(); widget.HorizontalDocking = horizontal; @@ -77,7 +77,7 @@ namespace ClassicalSharp { Y = newY; } - public Action OnClick; + public Action OnClick; public Func GetValue; public Action SetValue; public bool Active; diff --git a/ClassicalSharp/2D/Widgets/Menu/MenuInputValidator.cs b/ClassicalSharp/2D/Widgets/Menu/MenuInputValidator.cs index 0a6097a43..e3c8528d6 100644 --- a/ClassicalSharp/2D/Widgets/Menu/MenuInputValidator.cs +++ b/ClassicalSharp/2D/Widgets/Menu/MenuInputValidator.cs @@ -95,19 +95,19 @@ namespace ClassicalSharp { public sealed class BooleanValidator : MenuInputValidator { public BooleanValidator() { - Range = "&7(yes or no)"; + Range = "&7(y or n)"; } public override bool IsValidChar( char c ) { - return c >= 'a' && c <= 'z'; + return c == 'y' || c == 'n'; } public override bool IsValidString( string s ) { - return s.Length <= 3; + return s.Length <= 1; } public override bool IsValidValue( string s ) { - return s == "yes" || s == "no"; + return s == "y" || s == "n"; } } } diff --git a/ClassicalSharp/ClassicalSharp.csproj b/ClassicalSharp/ClassicalSharp.csproj index b1b630fd8..f91cf5e95 100644 --- a/ClassicalSharp/ClassicalSharp.csproj +++ b/ClassicalSharp/ClassicalSharp.csproj @@ -78,7 +78,6 @@ - diff --git a/ClassicalSharp/Game/Game.InputHandling.cs b/ClassicalSharp/Game/Game.InputHandling.cs index 15b42532d..007327a3b 100644 --- a/ClassicalSharp/Game/Game.InputHandling.cs +++ b/ClassicalSharp/Game/Game.InputHandling.cs @@ -112,8 +112,6 @@ namespace ClassicalSharp { } else if( key == Keys[KeyMapping.ThirdPersonCamera] ) { bool useThirdPerson = Camera is FirstPersonCamera; SetCamera( useThirdPerson ); - } else if( key == Keys[KeyMapping.VSync] ) { - Graphics.SetVSync( this, !VSync ); } else if( key == Keys[KeyMapping.ViewDistance] ) { for( int i = 0; i < viewDistances.Length; i++ ) { int newDist = viewDistances[i]; @@ -195,7 +193,7 @@ namespace ClassicalSharp { public enum KeyMapping { Forward, Back, Left, Right, Jump, Respawn, SetSpawn, OpenChat, - SendChat, PauseOrExit, OpenInventory, Screenshot, VSync, Fullscreen, + SendChat, PauseOrExit, OpenInventory, Screenshot, Fullscreen, ThirdPersonCamera, ViewDistance, Fly, Speed, NoClip, FlyUp, FlyDown, PlayerList, HideGui, } @@ -215,9 +213,14 @@ namespace ClassicalSharp { (key >= Key.Number0 && key <= Key.Number9); // block hotbar } - public bool IsKeyOkay( Key key, out string reason ) { + public bool IsKeyOkay( Key oldKey, Key key, out string reason ) { + if( oldKey == Key.Escape || oldKey == Key.F12 ) { + reason = "This mapping is locked"; + return false; + } + if( IsReservedKey( key ) ) { - reason = "Given key is reserved for gui"; + reason = "New key is reserved"; return false; } reason = null; @@ -229,18 +232,18 @@ namespace ClassicalSharp { #if !__MonoCS__ Keys = new Key[] { Key.W, Key.S, Key.A, Key.D, Key.Space, Key.R, Key.Y, Key.T, - Key.Enter, Key.Escape, Key.B, Key.F12, Key.F7, Key.F11, + Key.Enter, Key.Escape, Key.B, Key.F12, Key.F11, Key.F5, Key.F, Key.Z, Key.ShiftLeft, Key.X, Key.Q, Key.E, Key.Tab, Key.F1 }; #else - Keys = new Key[23]; + Keys = new Key[22]; Keys[0] = Key.W; Keys[1] = Key.S; Keys[2] = Key.A; Keys[3] = Key.D; Keys[4] = Key.Space; Keys[5] = Key.R; Keys[6] = Key.Y; Keys[7] = Key.T; Keys[8] = Key.Enter; Keys[9] = Key.Escape; Keys[10] = Key.B; - Keys[11] = Key.F12; Keys[12] = Key.F7; Keys[13] = Key.F11; - Keys[14] = Key.F5; Keys[15] = Key.F; Keys[16] = Key.Z; - Keys[17] = Key.ShiftLeft; Keys[18] = Key.X; Keys[19] = Key.Q; - Keys[20] = Key.E; Keys[21] = Key.Tab; Keys[22] = Key.F1; + Keys[11] = Key.F12; Keys[12] = Key.F11; Keys[13] = Key.F5; + Keys[14] = Key.F; Keys[15] = Key.Z; Keys[16] = Key.ShiftLeft; + Keys[17] = Key.X; Keys[18] = Key.Q; Keys[19] = Key.E; + Keys[20] = Key.Tab; Keys[21] = Key.F1; #endif LoadKeyBindings(); } diff --git a/ClassicalSharp/TexturePack/Animations.cs b/ClassicalSharp/TexturePack/Animations.cs index 5bfce91a6..704910c96 100644 --- a/ClassicalSharp/TexturePack/Animations.cs +++ b/ClassicalSharp/TexturePack/Animations.cs @@ -13,7 +13,7 @@ namespace ClassicalSharp.TexturePack { Bitmap bmp; FastBitmap fastBmp; List animations = new List(); - public bool Enabled; + public bool Enabled = true; public Animations( Game game ) { this.game = game;