InputLayer.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. /*******************************************************************
  2.  *         Advanced 3D Game Programming using DirectX 7.0
  3.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  4.  *   Title: InputLayer.cpp
  5.  *    Desc: Manages DirectInput
  6.  *          Currently only has support for keyboard/mouse
  7.  * copyright (c) 1999 by Adrian Perez
  8.  * See license.txt for modification and distribution information
  9.  ******************************************************************/
  10. #include <Windows.h>
  11. #include "GameErrors.h"
  12. #include "InputLayer.h"
  13. #include "Keyboard.h"
  14. #include "Mouse.h"
  15. //#include "Application.h"
  16. cInputLayer* cInputLayer::m_pGlobalILayer = NULL;
  17. cInputLayer::cInputLayer( 
  18. HINSTANCE hInst, 
  19. HWND hWnd, 
  20. bool bExclusive, 
  21. bool bUseKeyboard, 
  22. bool bUseMouse )
  23. {
  24. m_pKeyboard = NULL;
  25. m_pMouse = NULL;
  26. if( m_pGlobalILayer )
  27. {
  28. throw cGameError("cInputLayer already initialized!n");
  29. }
  30. m_pGlobalILayer = this;
  31. HRESULT hr;
  32. /**
  33.  * Create the DI7 object
  34.  */
  35. hr = DirectInput8Create(
  36. hInst, 
  37. DIRECTINPUT_VERSION, 
  38. IID_IDirectInput8, 
  39. (void**)&m_pDI, 
  40. NULL); 
  41.     if( FAILED(hr) )
  42. {
  43. throw cGameError("DirectInput7 object could not be createdn"); 
  44. }
  45. try 
  46. {
  47. if( bUseKeyboard )
  48. {
  49. m_pKeyboard = new cKeyboard( hWnd );
  50. }
  51. if( bUseMouse )
  52. {
  53. m_pMouse = new cMouse( hWnd, bExclusive );
  54. }
  55. }
  56. catch( ... )
  57. {
  58. SafeRelease( m_pDI );
  59. throw;
  60. }
  61. }
  62. cInputLayer::~cInputLayer()
  63. {
  64. if( m_pDI )
  65. {
  66. if( m_pKeyboard )
  67. {
  68. delete m_pKeyboard; // this does all the de-init.
  69. }
  70. if( m_pMouse )
  71. {
  72. delete m_pMouse; // this does all the de-init.
  73. }
  74. ExtraSafeRelease( m_pDI );
  75. }
  76. m_pGlobalILayer = NULL;
  77. }
  78. void cInputLayer::UpdateDevices()
  79. {
  80. if( m_pKeyboard )
  81. {
  82. m_pKeyboard->Update();
  83. }
  84. if( m_pMouse )
  85. {
  86. m_pMouse->Update();
  87. }
  88. }
  89. void cInputLayer::SetFocus()
  90. {
  91. if( m_pKeyboard )
  92. {
  93. m_pKeyboard->ClearTable();
  94. }
  95. if( m_pMouse )
  96. {
  97. m_pMouse->Acquire();
  98. }
  99. }
  100. void cInputLayer::KillFocus()
  101. {
  102. if( m_pKeyboard )
  103. {
  104. m_pKeyboard->ClearTable();
  105. }
  106. if( m_pMouse )
  107. {
  108. m_pMouse->UnAcquire();
  109. }
  110. }
  111. void cInputLayer::Destroy()
  112. {
  113. if (m_pGlobalILayer) 
  114. delete m_pGlobalILayer;
  115. m_pGlobalILayer = NULL;
  116. }