Wintermute Engine Forum

Wintermute Engine => Technical forum => Topic started by: Chaos on June 04, 2014, 06:50:00 AM

Title: Disabling keyboard
Post by: Chaos on June 04, 2014, 06:50:00 AM
Hello guys! I know exactly how to lock the mouse, and actually I've been using this for years by using
"Game.LockMouseRect(0,0,0,0);"
But now I wonder, is there any way to disable an specific key from the keyboard (or the whole keyboard) in a specific
scene, in this case the "Main Menu"? Thanks for your help...  :)

Title: Re: Disabling keyboard
Post by: ciberspace on June 04, 2014, 02:32:51 PM
Can it be?
Keyboard object
The Keyboard object represents the current state of the keyboard. There is always one and only Keyboard object available. It's accessible via the Game.Keyboard attribute. For the convenience the templates automatically store the keyboard object in a global variable named Keboard.



Methods
IsKeyDown Queries whether a specified key is pressed.

Attributes
Type (read only) Returns always "keyboard"
Key (read only) Returns a string with the name of the pressed key (if the key is a printable character)
Printable (read only) Returns true if the pressed key is a printable character
KeyCode (read only) Returns a numeric code of a pressed key.
IsShift (read only) Returns true if the SHIFT key has been hold down when the key was pressed
IsAlt (read only) Returns true if the ALT key has been hold down when the key was pressed
IsControl (read only) Returns true if the CONTROL key has been hold down when the key was pressed
Title: Re: Disabling keyboard
Post by: Azrael on June 05, 2014, 07:59:09 AM
If you need only to disable the main menu there is a simple way, in your game.script you should have something like:
Code: WME Script
  1. on "Keypress"
  2. {
  3.   // on Esc or F1 key
  4.   if(Keyboard.KeyCode==VK_ESCAPE || Keyboard.KeyCode==VK_F1)
  5.   {
  6.     // load and display the main menu window
  7.     WinCaption.Visible = false;
  8.     var WinMainMenu = Game.LoadWindow("interface\system\mainmenu.window");
  9.     WinMainMenu.Center();
  10.     WinMainMenu.GoSystemExclusive();
  11.     Game.UnloadObject(WinMainMenu);
  12.   }
  13. }

So simply change it on something like:
Code: WME Script
  1. on "Keypress"
  2. {
  3.   // on Esc or F1 key
  4.   if((Keyboard.KeyCode==VK_ESCAPE || Keyboard.KeyCode==VK_F1) && Scene.Name != "NameOfTheScene")
  5.   {
  6.     // load and display the main menu window
  7.     WinCaption.Visible = false;
  8.     var WinMainMenu = Game.LoadWindow("interface\system\mainmenu.window");
  9.     WinMainMenu.Center();
  10.     WinMainMenu.GoSystemExclusive();
  11.     Game.UnloadObject(WinMainMenu);
  12.   }
  13. }


If you have to do it on many scenes you could also use a scene variable. So on your scene.init add somewhere:
Code: WME Script
  1. Scene.DontDisplayMenu = true;

And on the game.script:
Code: WME Script
  1. on "Keypress"
  2. {
  3.   // on Esc or F1 key
  4.   if((Keyboard.KeyCode==VK_ESCAPE || Keyboard.KeyCode==VK_F1) && Scene.DontDisplayMenu != true)
  5.   {
  6.     // load and display the main menu window
  7.     WinCaption.Visible = false;
  8.     var WinMainMenu = Game.LoadWindow("interface\system\mainmenu.window");
  9.     WinMainMenu.Center();
  10.     WinMainMenu.GoSystemExclusive();
  11.     Game.UnloadObject(WinMainMenu);
  12.   }
  13. }

Also remember to set "Scene.DontDisplayMenu" on "false", "null" or something else not "true" on the other scenes, maybe adding it on "base.inc" so it will be always active except when you don't want