winddow key 값을 초기화한 순서대로
enum class에서 똑같은 순서로 key를 초기화 함으로써
KEY STATE를 자료형으로 한 vector의 인덱스가 곧
key값으로 동일시 하게 만듦
struct tkeyinfo
{
KEY_STATE eState;//키의 상태값
bool bPrevPush;//이전 프레임에 눌렸는지 여부
};
class CKeyMgr
{
SINGLE(CKeyMgr)
private: vector<tkeyinfo>m_veckey;
//이 벡터의 인덱스 순서를 enum class의 멤버들 순으로 생각하면 된다.
};
void CKeyMgr::update()
{
//윈도우가 focus된 상태에서만 키 업데이트
HWND Hwnd = GetFocus();
if (nullptr != Hwnd)
{
for (int i = 0; i < (int)KEY::LAST; ++i)
{
if (GetAsyncKeyState(g_arrVK[i]) & 0x8000)//키가 눌려 있다
{
if (m_veckey[i].bPrevPush)//전 프레임에 눌러져 있었다면
{
m_veckey[i].eState = KEY_STATE::HOLD;
}
else
{
m_veckey[i].eState = KEY_STATE::TAP;
}
m_veckey[i].bPrevPush = true;
}
else
{
if (m_veckey[i].bPrevPush)//전 프레임에 눌러져 있었다면
{
m_veckey[i].eState = KEY_STATE::AWAY;
}
else
{
m_veckey[i].eState = KEY_STATE::NONE;
}
m_veckey[i].bPrevPush = false;
}
}
}