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>
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
#include "common.hpp"
|
||||
|
||||
|
||||
CSelControlDlg::CSelControlDlg(CDeviceView &view, CDeviceControl &control, BOOL bReselect, DWORD dwOfs, const DIDEVICEINSTANCEW &didi) :
|
||||
m_bReselect(bReselect), m_dwOfs(dwOfs), m_didi(didi),
|
||||
m_view(view), m_control(control), m_bAssigned(FALSE), m_bNoItems(TRUE)
|
||||
{
|
||||
}
|
||||
|
||||
CSelControlDlg::~CSelControlDlg()
|
||||
{
|
||||
}
|
||||
|
||||
int CSelControlDlg::DoModal(HWND hParent)
|
||||
{
|
||||
return CFlexWnd::DoModal(hParent, IDD_SELCONTROLDLG, g_hModule);
|
||||
}
|
||||
|
||||
BOOL CALLBACK AddItem(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef)
|
||||
{
|
||||
if (pvRef == NULL || lpddoi == NULL)
|
||||
return DIENUM_CONTINUE;
|
||||
return ((CSelControlDlg *)pvRef)->AddItem(*lpddoi);
|
||||
}
|
||||
|
||||
BOOL CSelControlDlg::AddItem(const DIDEVICEOBJECTINSTANCE &doi)
|
||||
{
|
||||
if (m_hList == NULL || m_view.DoesCalloutOtherThanSpecifiedExistForOffset(&m_control, doi.dwType))
|
||||
return DIENUM_CONTINUE;
|
||||
|
||||
LRESULT i = SendMessage(m_hList, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)doi.tszName);
|
||||
if (i == LB_ERR || i == LB_ERRSPACE)
|
||||
return DIENUM_CONTINUE;
|
||||
|
||||
m_bNoItems = FALSE;
|
||||
|
||||
i = SendMessage(m_hList, LB_SETITEMDATA, (WPARAM)i, (LPARAM)doi.dwType);
|
||||
|
||||
return DIENUM_CONTINUE;
|
||||
}
|
||||
|
||||
void CSelControlDlg::OnInit()
|
||||
{
|
||||
m_hList = GetDlgItem(m_hWnd, IDC_LIST);
|
||||
if (m_hList == NULL)
|
||||
return;
|
||||
|
||||
LPDIRECTINPUTDEVICE8 pDID = NULL;
|
||||
LPDIRECTINPUT8 pDI = NULL;
|
||||
DWORD dwVer = DIRECTINPUT_VERSION;
|
||||
HRESULT hr;
|
||||
if (FAILED(hr = DirectInput8Create(g_hModule, dwVer, IID_IDirectInput8, (LPVOID*)&pDI, NULL)))
|
||||
return;
|
||||
|
||||
if (FAILED(hr = pDI->CreateDevice(m_didi.guidInstance, &pDID, NULL)))
|
||||
{
|
||||
pDID = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
pDI->Release();
|
||||
pDI = NULL;
|
||||
|
||||
if (FAILED(hr = pDID->EnumObjects(::AddItem, this, DIDFT_AXIS | DIDFT_BUTTON | DIDFT_POV)))
|
||||
return;
|
||||
|
||||
pDID->Release();
|
||||
pDID = NULL;
|
||||
|
||||
if (m_bNoItems)
|
||||
{
|
||||
EndDialog(SCDR_NOFREE);
|
||||
return;
|
||||
}
|
||||
|
||||
// indicate callout offset assignment...
|
||||
int i = -1;
|
||||
|
||||
if (m_control.IsOffsetAssigned())
|
||||
{
|
||||
BOOL m_bAssigned = TRUE;
|
||||
m_dwOfs = m_control.GetOffset();
|
||||
i = GetItemWithOffset(m_dwOfs);
|
||||
}
|
||||
|
||||
SendMessage(m_hList, LB_SETCURSEL, (WPARAM)i, 0);
|
||||
}
|
||||
|
||||
LRESULT CSelControlDlg::OnCommand(WORD wNotifyCode, WORD wID, HWND hWnd)
|
||||
{
|
||||
switch (wNotifyCode)
|
||||
{
|
||||
case LBN_SELCHANGE:
|
||||
{
|
||||
if (m_hList == NULL || m_hList != hWnd)
|
||||
break;
|
||||
|
||||
LRESULT lr = SendMessage(m_hList, LB_GETCURSEL, 0, 0);
|
||||
if (lr == LB_ERR)
|
||||
break;
|
||||
|
||||
lr = SendMessage(m_hList, LB_GETITEMDATA, (WPARAM)lr, 0);
|
||||
if (lr == LB_ERR)
|
||||
break;
|
||||
|
||||
m_dwOfs = (DWORD)lr;
|
||||
m_bAssigned = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
case BN_CLICKED:
|
||||
switch (wID)
|
||||
{
|
||||
case IDOK:
|
||||
if (m_bAssigned)
|
||||
EndDialog(SCDR_OK);
|
||||
else
|
||||
MessageBox(m_hWnd, TEXT("You must either select a control for this callout or click cancel."), TEXT("Select a Control"), MB_OK);
|
||||
break;
|
||||
|
||||
case IDCANCEL:
|
||||
EndDialog(SCDR_CANCEL);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CSelControlDlg::GetItemWithOffset(DWORD dwOfs)
|
||||
{
|
||||
if (m_hList == NULL)
|
||||
return -1;
|
||||
|
||||
LRESULT lr = SendMessage(m_hList, LB_GETCOUNT, 0, 0);
|
||||
if (lr == LB_ERR)
|
||||
return -1;
|
||||
|
||||
int n = int(lr);
|
||||
|
||||
if (n < 1)
|
||||
return -1;
|
||||
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
lr = SendMessage(m_hList, LB_GETITEMDATA, (WPARAM)i, 0);
|
||||
if (lr == LB_ERR)
|
||||
continue;
|
||||
|
||||
if ((DWORD)lr == dwOfs)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
Reference in New Issue
Block a user