์์ :)
https://github.com/eazuooz/WindowAPI/commit/7e41da72605d73d8e695940704de8764fb165f3a
Input Manager · eazuooz/WindowAPI@7e41da7
Show file tree Showing 12 changed files with 182 additions and 22 deletions.
github.com
์ง๊ธ๊น์ง์ ํค ์ ๋ ฅ์๋ ๋จ์ํ๊ฒ ํค๋ณด๋๋ฅผ ๋๋ฅธ๊ฒ์ ๋ํ ์ฒ๋ฆฌ๋ง ์งํํ์๋ค.
ํ์ง๋ง ๊ฒ์์์๋ ์กฐ๊ธ ๋ ๋ค์ํ ๊ฒฝ์ฐ์ ์ ๋ ฅ์ ๊ณ ๋ คํด์ผํ๋ค.
1. ํค๊ฐ ๋๋ ค์์๋
2. ํค๊ฐ ๋ด๋ ค๊ฐ์๋
3. ํค๊ฐ ์ฌ๋ผ์์๋
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด ๊ฒ์ ๊ด๋ฆฌํด์ค ์ธํ ๋งค๋์ ๋ผ๋ ํด๋์ค๋ฅผ ์ค๊ณ ํ ๊ฒ์ด๋ค.
enum class KEY_CODE
{
Q, W, E, R, T, Y, U, I, O, P,
A, S, D, F, G, H, J, K, L,
Z, X, C, V, B, N, M,
END,
};
enum KEY_STATE
{
DOWN,
PRESSED,
UP,
NONE,
};
class InputManager
{
SINGLE(InputManager)
public:
struct Key
{
KEY_CODE eType;
KEY_STATE eState;
bool bPressed;
};
void Initialize();
void Tick();
KEY_STATE GetKeyState(KEY_CODE keyCode);
private:
std::vector<Key> mKeys;
};
int ASCII[(UINT)KEY_CODE::END] =
{
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L',
'Z', 'X', 'C', 'V', 'B', 'N', 'M',
};
InputManager* InputManager::mInstance = nullptr;
void InputManager::Initialize()
{
for (UINT i = 0; i < (UINT)KEY_CODE::END; i++)
{
Key key;
key.eType = (KEY_CODE)i;
key.eState = KEY_STATE::NONE;
key.bPressed = false;
mKeys.push_back(key);
}
}
void InputManager::Tick()
{
for (UINT i = 0; i < (UINT)KEY_CODE::END; ++i)
{
// ํด๋นํค๊ฐ ํ์ฌ ๋๋ ค์๋ค.
if (GetAsyncKeyState(ASCII[i]) & 0x8000)
{
// ์ด์ ํ๋ ์์๋ ๋๋ ค ์์๋ค.
if (mKeys[i].bPressed)
mKeys[i].eState = KEY_STATE::PRESSED;
else
mKeys[i].eState = KEY_STATE::DOWN;
mKeys[i].bPressed = true;
}
else // ํด๋นํค๊ฐ ํ์ฌ ์๋๋ ค์๋ค.
{
// ์ด์ ํ๋ ์์๋ ๋๋ ค ์์๋ค.
if (mKeys[i].bPressed)
mKeys[i].eState = KEY_STATE::UP;
else // ์ด์ ํ๋ ์์๋ ์๋๋ ค ์์๋ค.
mKeys[i].eState = KEY_STATE::NONE;
mKeys[i].bPressed = false;
}
}
}
KEY_STATE InputManager::GetKeyState(KEY_CODE keyCode)
{
return mKeys[static_cast<UINT>(keyCode)].eState;
}
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํค ์ ๋ ฅ๋ ์ดํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์
์ด๊ธฐํ์ ๋งค ํ๋ ์๋ง๋ค ์ฒดํฌ ํด์ฃผ๊ฒ๋ ๋๋ ค์ฃผ์ด์ผ ํ๋ค.
void Application::Initialize(WindowData data)
{
mWindowData.hWnd = data.hWnd;
mWindowData.hdc = GetDC(mWindowData.hWnd);
// ์ด๊ธฐํ
SceneManager::GetInstance().Initialize();
Time::GetInstance().Initialize();
InputManager::GetInstance().Initialize();
}
void Application::Tick()
{
// ์
๋ฐ์ดํธ
Time::GetInstance().Tick();
InputManager::GetInstance().Tick();
SceneManager::GetInstance().Tick();
// ๋ ๋๋ง
SceneManager::GetInstance().Render(mWindowData.hdc);
Time::GetInstance().Render(mWindowData.hdc);
}
๊ทธ๋ฆฌ๊ณ ์กฐ๊ธ ๋ ํธํ๊ฒ ์ฌ์ฉํด์ฃผ๊ธฐ ์ํด์ ์ ์ฒ๋ฆฌ๊ธฐ๋ก ์ ์ํด์ฃผ๊ฒ ๋ค.
Player์์ ํด๋น ํค์ ๋ ฅ์ ๋ฐ๊พธ์ด ์ฌ์ฉํด๋ณด์~
#define KEY_PREESED(KEY) ya::KEY_STATE::PRESSED == ya::InputManager::GetInstance().GetKeyState(KEY)
#define KEY_DOWN(KEY) ya::KEY_STATE::DOWN == ya::InputManager::GetInstance().GetKeyState(KEY)
#define KEY_UP(KEY) ya::KEY_STATE::UP == ya::InputManager::GetInstance().GetKeyState(KEY)
void Player::Tick()
{
// ํค์
๋ ฅ์ ๋ฐ๋ฅธ ์ด๋
Vector2 vPos = GetPos();
// ์๊ฐ ๋๊ธฐํ
if (KEY_UP(KEY_CODE::W))
{
//vPos.y -= m_fSpeed * DT;
vPos.y -= 50.f;
}
if (GetAsyncKeyState('S') & 0x8000)
{
vPos.y += mSpeed * Time::DeltaTime();
}
if (GetAsyncKeyState('A') & 0x8000)
{
vPos.x -= mSpeed * Time::DeltaTime();
}
if (GetAsyncKeyState('D') & 0x8000)
{
vPos.x += mSpeed * Time::DeltaTime();
}
SetPos(vPos);
}
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Resources, Brush, Pen (0) | 2022.09.20 |
---|---|
Double Buffering (0) | 2022.09.19 |
Scene, Object, Time (0) | 2022.09.15 |
Singleton Patten (0) | 2022.09.13 |
FrameWork (1) | 2022.09.07 |
๋๊ธ