Files
Client/Library/dxx8/samples/Multimedia/Demos/DuelVoice/diutil.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

170 lines
4.5 KiB
C++

//-----------------------------------------------------------------------------
// File: DIUtil.cpp
//
// Desc: Input routines
//
// Copyright (C) 1995-2001 Microsoft Corporation. All Rights Reserved.
//-----------------------------------------------------------------------------
#include "duel.h"
#include "diutil.h"
#include "gameproc.h"
//-----------------------------------------------------------------------------
// Globals
//-----------------------------------------------------------------------------
static LPDIRECTINPUT g_pDI; // DirectInput interface
static LPDIRECTINPUTDEVICE g_pdidKeyboard; // Keyboard device interface
static BOOL g_bKeyboardAcquired; // Whether eyboard is acquired
//-----------------------------------------------------------------------------
// Name: DIUtil_InitInput()
// Desc: Initialize DirectInput objects & devices
//-----------------------------------------------------------------------------
HRESULT DIUtil_InitInput( HWND hWnd )
{
// Create DI object
HINSTANCE hInst;
#ifdef _WIN64
hInst = (HINSTANCE)GetWindowLongPtr( hWnd, GWLP_HINSTANCE );
#else
hInst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE );
#endif
if( FAILED( DirectInputCreate( hInst,
DIRECTINPUT_VERSION, &g_pDI, NULL ) ) )
{
ShowError(IDS_DINPUT_ERROR_DIC);
return E_FAIL;
}
// Create keyboard device
if( FAILED( g_pDI->CreateDevice( GUID_SysKeyboard, &g_pdidKeyboard, NULL ) ) )
{
ShowError(IDS_DINPUT_ERROR_CD);
return E_FAIL;
}
// Tell DirectInput that we want to receive data in keyboard format
if( FAILED( g_pdidKeyboard->SetDataFormat( &c_dfDIKeyboard) ) )
{
ShowError(IDS_DINPUT_ERROR_DF);
return E_FAIL;
}
// Set cooperative level
if( FAILED( g_pdidKeyboard->SetCooperativeLevel( hWnd,
DISCL_NONEXCLUSIVE | DISCL_FOREGROUND ) ) )
{
ShowError(IDS_DINPUT_ERROR_SP);
return E_FAIL;
}
// try to acquire the keyboard
if( SUCCEEDED( g_pdidKeyboard->Acquire() ) )
g_bKeyboardAcquired = TRUE;
else
g_bKeyboardAcquired = FALSE;
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: DIUtil_ReadKeys()
// Desc: Use DirectInput to read game-play keys
//-----------------------------------------------------------------------------
VOID DIUtil_ReadKeys( DWORD* pdwKeys )
{
BYTE rgbKeybd[256];
DWORD dwKeys = 0L;
HRESULT hr;
hr = g_pdidKeyboard->GetDeviceState( sizeof(rgbKeybd), rgbKeybd );
if( FAILED(hr) )
{
if( hr == DIERR_INPUTLOST )
{
// We lost control of the keyboard, reacquire
if( SUCCEEDED( g_pdidKeyboard->Acquire() ) )
g_bKeyboardAcquired = TRUE;
else
g_bKeyboardAcquired = FALSE;
}
// Failed to read the keyboard, just return
return;
}
// check & update key states
if( rgbKeybd[DIK_NUMPAD5] & 0x80 )
dwKeys |= KEY_STOP;
if( (rgbKeybd[DIK_NUMPAD2] & 0x80) || (rgbKeybd[DIK_DOWN] & 0x80) )
dwKeys |= KEY_DOWN;
if( (rgbKeybd[DIK_NUMPAD4] & 0x80) || (rgbKeybd[DIK_LEFT] & 0x80) )
dwKeys |= KEY_LEFT;
if( (rgbKeybd[DIK_NUMPAD6] & 0x80) || (rgbKeybd[DIK_RIGHT] & 0x80) )
dwKeys |= KEY_RIGHT;
if( (rgbKeybd[DIK_NUMPAD8] & 0x80) || (rgbKeybd[DIK_UP] & 0x80) )
dwKeys |= KEY_UP;
if( rgbKeybd[DIK_SPACE] & 0x80 )
dwKeys |= KEY_FIRE;
// Return the keys
(*pdwKeys) = dwKeys;
}
//-----------------------------------------------------------------------------
// Name: DIUtil_CleanupInput()
// Desc: Cleans up DirectInput objects
//-----------------------------------------------------------------------------
VOID DIUtil_CleanupInput()
{
if(g_bKeyboardAcquired)
{
g_pdidKeyboard->Unacquire();
g_bKeyboardAcquired = FALSE;
}
if( g_pdidKeyboard )
g_pdidKeyboard->Release();
if( g_pDI )
g_pDI->Release();
}
//-----------------------------------------------------------------------------
// Name: DIUtil_ReacquireInputDevices()
// Desc: Reacquires DirectInput devices as needed
//-----------------------------------------------------------------------------
HRESULT DIUtil_ReacquireInputDevices()
{
g_bKeyboardAcquired = FALSE;
if( NULL == g_pdidKeyboard )
return E_FAIL;
g_pdidKeyboard->Acquire();
g_bKeyboardAcquired = TRUE;
return S_OK;
}