topical media & game development

talk show tell print

graphic-directx-game-10-DiffusePyramid-DirectInput.cpp / cpp



  //=============================================================================
  // DirectInput.cpp by Frank Luna (C) 2005 All Rights Reserved.
  //=============================================================================
  
  include <d3dUtil.h>
  include <DirectInput.h>
  include <d3dApp.h>
  
  DirectInput* gDInput = 0;
  
  DirectInput::DirectInput(DWORD keyboardCoopFlags, DWORD mouseCoopFlags)
  {
          ZeroMemory(mKeyboardState, sizeof(mKeyboardState));
          ZeroMemory(&mMouseState, sizeof(mMouseState));
  
          HR(DirectInput8Create(gd3dApp->getAppInst(), DIRECTINPUT_VERSION, 
                  IID_IDirectInput8, (void**)&mDInput, 0));
  
          HR(mDInput->CreateDevice(GUID_SysKeyboard, &mKeyboard, 0));
          HR(mKeyboard->SetDataFormat(&c_dfDIKeyboard));
          HR(mKeyboard->SetCooperativeLevel(gd3dApp->getMainWnd(), keyboardCoopFlags));
          HR(mKeyboard->Acquire());
  
          HR(mDInput->CreateDevice(GUID_SysMouse, &mMouse, 0));
          HR(mMouse->SetDataFormat(&c_dfDIMouse2));
          HR(mMouse->SetCooperativeLevel(gd3dApp->getMainWnd(), mouseCoopFlags));
          HR(mMouse->Acquire());
  }
  
  DirectInput::~DirectInput()
  {
          ReleaseCOM(mDInput);
          mKeyboard->Unacquire();
          mMouse->Unacquire();
          ReleaseCOM(mKeyboard);
          ReleaseCOM(mMouse);
  }
  
  void DirectInput::poll()
  {
          // Poll keyboard.
          HRESULT hr = mKeyboard->GetDeviceState(sizeof(mKeyboardState), (void**)&mKeyboardState); 
          if( FAILED(hr) )
          {
                  // Keyboard lost, zero out keyboard data structure.
                  ZeroMemory(mKeyboardState, sizeof(mKeyboardState));
  
                   // Try to acquire for next time we poll.
                  hr = mKeyboard->Acquire();
          }
  
          // Poll mouse.
          hr = mMouse->GetDeviceState(sizeof(DIMOUSESTATE2), (void**)&mMouseState); 
          if( FAILED(hr) )
          {
                  // Mouse lost, zero out mouse data structure.
                  ZeroMemory(&mMouseState, sizeof(mMouseState));
  
                  // Try to acquire for next time we poll.
                  hr = mMouse->Acquire(); 
          }
  }
  
  bool DirectInput::keyDown(char key)
  {
          return (mKeyboardState[key] & 0x80) != 0;
  }
  
  bool DirectInput::mouseButtonDown(int button)
  {
          return (mMouseState.rgbButtons[button] & 0x80) != 0;
  }
  
  float DirectInput::mouseDX()
  {
          return (float)mMouseState.lX;
  }
  
  float DirectInput::mouseDY()
  {
          return (float)mMouseState.lY;
  }
  
  float DirectInput::mouseDZ()
  {
          return (float)mMouseState.lZ;
  }


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.