|
From: <cn...@us...> - 2009-07-09 04:29:50
|
Revision: 417
http://hgengine.svn.sourceforge.net/hgengine/?rev=417&view=rev
Author: cnlohr
Date: 2009-07-09 04:29:49 +0000 (Thu, 09 Jul 2009)
Log Message:
-----------
standardize scancodes to the HG1 standard.
Modified Paths:
--------------
Mercury2/src/Camera.cpp
Mercury2/src/X11Window.cpp
Mercury2/src/X11Window.h
Added Paths:
-----------
Mercury2/docs/KeyboardCodes.png
Mercury2/docs/KeyboardKeys.png
Added: Mercury2/docs/KeyboardCodes.png
===================================================================
(Binary files differ)
Property changes on: Mercury2/docs/KeyboardCodes.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: Mercury2/docs/KeyboardKeys.png
===================================================================
(Binary files differ)
Property changes on: Mercury2/docs/KeyboardKeys.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: Mercury2/src/Camera.cpp
===================================================================
--- Mercury2/src/Camera.cpp 2009-07-08 05:27:14 UTC (rev 416)
+++ Mercury2/src/Camera.cpp 2009-07-09 04:29:49 UTC (rev 417)
@@ -71,11 +71,11 @@
float a = 0;
float b = 0;
- if ( KeyboardInput::IsKeyDown(25) ) a += dTime*2; //W
- if ( KeyboardInput::IsKeyDown(39) ) a -= dTime*2; //S
+ if ( KeyboardInput::IsKeyDown('w') ) a += dTime*2; //W
+ if ( KeyboardInput::IsKeyDown('s') ) a -= dTime*2; //S
- if ( KeyboardInput::IsKeyDown(38) ) b -= dTime*2; //A
- if ( KeyboardInput::IsKeyDown(40) ) b += dTime*2; //D
+ if ( KeyboardInput::IsKeyDown('a') ) b -= dTime*2; //A
+ if ( KeyboardInput::IsKeyDown('d') ) b += dTime*2; //D
MercuryVector Xaxis = m_lookAt.CrossProduct( MercuryVector(0,1,0) );
Xaxis.NormalizeSelf();
Modified: Mercury2/src/X11Window.cpp
===================================================================
--- Mercury2/src/X11Window.cpp 2009-07-08 05:27:14 UTC (rev 416)
+++ Mercury2/src/X11Window.cpp 2009-07-09 04:29:49 UTC (rev 417)
@@ -5,6 +5,84 @@
Callback0R< MercuryWindow* > MercuryWindow::genWindowClbk(X11Window::GenX11Window); //Register window generation callback
+//XXX: THIS SECTION IS INCOMPLETE! IT NEEDS The right half of the keyboard (Bar arrow keys) + it needs the windows keys/sel keys mapped
+short X11Window::ConvertScancode( int scanin )
+{
+ switch( scanin )
+ {
+ case 9: return 27; //esc
+ case 19: return '0';
+ case 49: return 97; //`
+ case 22: return 8; //backspace
+ case 95: return 292; //F11
+ case 96: return 293; //F12
+ case 20: return 45; //-
+ case 21: return 61; //=
+ case 51: return 92; //backslash
+ case 23: return 9; //tab
+ case 50: return 160; //[lshift]
+ case 62: return 161; //[rshift]
+
+ case 38: return 'a';
+ case 56: return 'b';
+ case 54: return 'c';
+ case 40: return 'd';
+ case 26: return 'e';
+ case 41: return 'f';
+ case 42: return 'g';
+ case 43: return 'h';
+ case 31: return 'i';
+ case 44: return 'j';
+ case 45: return 'k';
+ case 46: return 'l';
+ case 58: return 'm';
+ case 57: return 'n';
+ case 32: return 'o';
+ case 33: return 'p';
+ case 24: return 'q';
+ case 27: return 'r';
+ case 39: return 's';
+ case 28: return 't';
+ case 30: return 'u';
+ case 55: return 'v';
+ case 25: return 'w';
+ case 53: return 'x';
+ case 29: return 'y';
+ case 52: return 'z';
+
+ case 34: return 91; //misc keys inbetween letters and enter
+ case 35: return 93;
+ case 47: return 59;
+ case 48: return 39;
+ case 59: return 44;
+ case 60: return 46;
+ case 61: return 47;
+
+ case 111: return 273; //arrow keys
+ case 113: return 276;
+ case 114: return 275;
+ case 116: return 274;
+
+ case 37: return 162; //ctrl, win, alt
+ case 133: return 91;
+ case 64: return 164;
+
+ case 108: return 165; //RIGHT buttons like ctrl, sel, alt
+ case 135: return 93;
+ case 105: return 263;
+
+ case 36: return 13;
+ case 66: return 15;
+
+ default:
+ if( scanin >= 10 && scanin <= 18 )
+ return scanin + ( (short)'1' - 10 );
+ if( scanin >= 67 && scanin <= 76 ) //f1-f10
+ return scanin + ( 282 - 67 );
+ return scanin;
+ }
+}
+
X11Window::X11Window(const MString& title, int width, int height, int bits, int depthBits, bool fullscreen)
:MercuryWindow(title, width, height, bits, depthBits, fullscreen), m_display(NULL)
{
@@ -165,8 +243,8 @@
{
//ignore autorepeat
if ( IsKeyRepeat(&event.xkey) ) break;
-
- KeyboardInput::ProcessKeyInput(event.xkey.keycode, true, false);
+
+ KeyboardInput::ProcessKeyInput( ConvertScancode( event.xkey.keycode ), true, false);
break;
}
case KeyRelease:
@@ -174,7 +252,7 @@
//ignore autorepeat
if ( IsKeyRepeat(&event.xkey) ) break;
- KeyboardInput::ProcessKeyInput(event.xkey.keycode, false, false);
+ KeyboardInput::ProcessKeyInput( ConvertScancode( event.xkey.keycode ), false, false);
break;
}
case MotionNotify:
Modified: Mercury2/src/X11Window.h
===================================================================
--- Mercury2/src/X11Window.h 2009-07-08 05:27:14 UTC (rev 416)
+++ Mercury2/src/X11Window.h 2009-07-09 04:29:49 UTC (rev 417)
@@ -13,7 +13,7 @@
virtual ~X11Window();
static MercuryWindow* GenX11Window();
-
+ static short ConvertScancode( int scanin );
virtual bool SwapBuffers();
virtual bool PumpMessages();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|