Input.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Input.cpp: implementation of the CInput class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Input.h"
  6. // Conversion factor for converting between degrees and radians
  7. bool *CInput::m_keys=NULL;
  8. int   CInput::m_mousePosX=0;
  9. int   CInput::m_mousePosY=0;
  10. float CInput::m_mouseSpeed=1;
  11. bool  CInput::m_bAskTrans=false;
  12. int   CInput::m_numUser=0;
  13. bool  CInput::m_bShowMouse=true;
  14. //////////////////////////////////////////////////////////////////////
  15. // Konstruktion/Destruktion
  16. //////////////////////////////////////////////////////////////////////
  17. CInput::CInput()
  18. {
  19. if(m_numUser==0)
  20. {
  21. m_keys        =new bool [256];
  22.      for(int i=0;i<256;i++)
  23. m_keys[i]=false;
  24. }
  25. m_numUser++;
  26. }
  27. CInput::~CInput()
  28. {
  29. m_numUser--;
  30. if(m_numUser==0)
  31. {
  32. if(m_keys!=NULL)
  33.     delete [] m_keys;
  34. }
  35. }
  36. void CInput::GetInput(int virtualKey,bool bKeyDown)
  37. {
  38. if(m_bAskTrans)
  39. {
  40. m_bAskTrans=false;
  41.      if(virtualKey==20 )  // capslock
  42. {
  43.      if(bKeyDown)m_keys[virtualKey]=!m_keys[virtualKey];
  44.      return;
  45. }
  46. if(virtualKey>36 && virtualKey<41)
  47. {
  48. virtualKey-=37;
  49. return;
  50. }
  51. virtualKey=TranslateKeyValue(virtualKey);
  52. }
  53. ///////////////////
  54. if(bKeyDown)
  55. m_keys[virtualKey]=true;
  56. else
  57.         m_keys[virtualKey]=false;
  58. }
  59. int CInput::TranslateKeyValue(int virtualKey)
  60. {
  61.     /////// pad keys
  62. if(virtualKey>95 && virtualKey<106)return (virtualKey-48);
  63. ////////26 char 
  64. if(m_keys[16] )  /// Shift or capslock pressed
  65. {
  66. if(virtualKey>64 && virtualKey<91 && !m_keys[20]) // A-Z
  67. {
  68. m_keys[virtualKey+32]=false;
  69. return virtualKey;
  70. }
  71. switch(virtualKey)
  72. {
  73. case 186: // :
  74.             virtualKey=58;
  75.             m_keys[59]=false;
  76. break;
  77. case 187: // +
  78.             virtualKey=43;
  79.             m_keys[61]=false;
  80. break;
  81. case 188: // <
  82.             virtualKey=60;
  83.             m_keys[44]=false;
  84. break;
  85. case 189: // _
  86.             virtualKey=95;
  87.             m_keys[45]=false;
  88. break;
  89. case 190: // >
  90.             virtualKey=62;
  91.             m_keys[46]=false;
  92. break;
  93. case 191: // ?
  94.             virtualKey=63;
  95.             m_keys[47]=false;
  96. break;
  97. case 192: // ~
  98.             virtualKey=126;
  99.             m_keys[96]=false;
  100. break;
  101. case 219: // {
  102.             virtualKey=123;
  103.             m_keys[91]=false;
  104. break;
  105. case 221: // }
  106.             virtualKey=125;
  107.             m_keys[93]=false;
  108. break;
  109. case 222: // "
  110.             virtualKey=34;
  111.             m_keys[39]=false;
  112. break;
  113. case 48: // 0-)
  114.             virtualKey=41;  
  115.             m_keys[48]=false;
  116. break;
  117. case 49: // 0-)
  118.             virtualKey=33;  
  119.             m_keys[49]=false;
  120. break;
  121. case 57: // 9-(
  122.             virtualKey=40;
  123.             m_keys[57]=false;
  124. break;
  125. case 56: // 8-*
  126.             virtualKey=42;
  127.             m_keys[56]=false;
  128. break;
  129. }
  130. }
  131. else
  132. {
  133. if(virtualKey>64 && virtualKey<91 && !m_keys[20]) // A-Z
  134. {
  135. m_keys[virtualKey]=false;
  136. virtualKey+=32;   // translate to a-z
  137. return virtualKey;
  138. }
  139. switch(virtualKey)
  140. {
  141. case 186: // :
  142.             virtualKey=59;
  143.             m_keys[58]=false;
  144. break;
  145. case 187: // =
  146.             virtualKey=61;
  147.             m_keys[43]=false;
  148. break;
  149. case 188: // ,
  150.             virtualKey=44;
  151.             m_keys[60]=false;
  152. break;
  153. case 189: // -
  154.             virtualKey=45;
  155.             m_keys[95]=false;
  156. break;
  157. case 190: // >
  158.             virtualKey=46;
  159.             m_keys[62]=false;
  160. break;
  161. case 191: // ?
  162.             virtualKey=47;
  163.             m_keys[63]=false;
  164. break;
  165. case 192: // `
  166.             virtualKey=96;
  167.             m_keys[126]=false;
  168. break;
  169. case 219: // {
  170.             virtualKey=91;
  171.             m_keys[123]=false;
  172. break;
  173. case 221: // }
  174.             virtualKey=93;
  175.             m_keys[125]=false;
  176. break;
  177. case 222: // '
  178.             virtualKey=39;
  179.             m_keys[34]=false;
  180. break;
  181. case 48: // 0-)
  182.             m_keys[41]=false;
  183. break;
  184. case 49: // 1-!
  185.             m_keys[33]=false;
  186. break;
  187. case 57: // 9-(
  188.             m_keys[40]=false;
  189. break;
  190. case 56: // 8-*
  191.             m_keys[42]=false;
  192. break;
  193. }
  194. }
  195. ///////////////////////////////////////
  196.     return   virtualKey;
  197. }