Files
Leviathan/Client/Game/game/GameSystem/SGameCursor.h
T
2026-06-01 12:46:52 +02:00

112 lines
1.9 KiB
C++

#pragma once
#include "KRenderDeviceDX.h"
#include <toolkit/XBossWorker.h>
class KTextureManager;
class K3DRenderDeviceDX;
const int CURSOR_CNT = 5;
extern const char * pCursorName[];
class SGameCursorMng
{
public:
enum CURSOR_TYPE
{
CURSOR_DEFAULT = 0,
CURSOR_ATTACK,
CURSOR_PICKUP,
CURSOR_MOVE,
CURSOR_SIDE,
CURSOR_TOPBOTTOM,
};
SGameCursorMng( K3DRenderDeviceDX *pRenderDevice, KTextureManager * pTextureMng )
{
m_pGraphics = pRenderDevice;
m_pTextureMng = pTextureMng;
m_nMouseX = m_nMouseY = 0;
m_nCursorType = 0;
//TODO : 리소스 옵션 로딩 추가 작업 중.
NX3LoadPack loadpack;
loadpack.Init();
for ( int i=0 ; i<CURSOR_CNT ; ++i )
{
m_spCursorTextureArray[i] = pTextureMng->GetTextureOriginal( pCursorName[i], &loadpack );
}
::ShowCursor(TRUE);
m_dwTime = 0;
}
~SGameCursorMng()
{
m_pGraphics->ShowCursor(FALSE);
for ( int i=0 ; i<CURSOR_CNT ; ++i )
{
m_spCursorTextureArray[i] = NULL;
}
}
void ShowCursor( BOOL bShow )
{
m_pGraphics->ShowCursor( bShow );
}
void SetCursorPos( int nX, int nY )
{
m_pGraphics->SetCursorPos( nX, nY );
}
static void OnDeviceLost()
{
m_bUpdate = true;
}
static void SetCursor( CURSOR_TYPE nFrameIndex )
{
if( m_nCursorFrame == nFrameIndex ) return;
if( nFrameIndex >= 0 && nFrameIndex < CURSOR_CNT )
m_nCursorFrame = nFrameIndex;
m_bUpdate = true;
}
void Process( DWORD dwTime )
{
if( m_dwTime == 0 )
m_dwTime = dwTime;
if( dwTime-m_dwTime>150 )
{
m_dwTime = 0;
}
}
void Render()
{
if( m_bUpdate )
{
m_pGraphics->SetCursor( m_spCursorTextureArray[m_nCursorFrame], 0, 0 );
m_bUpdate = false;
}
}
private:
DWORD m_dwTime;
int m_nCursorType;
int m_nMouseX, m_nMouseY;
class K3DRenderDeviceDX* m_pGraphics;
KTextureManager* m_pTextureMng;
K3DTextureSPtr m_spCursorTextureArray[CURSOR_CNT];
static bool m_bUpdate;
static int m_nCursorFrame;
};