어제에 이어서 Input 처리를 계속 해보고자 한다. 그냥 폭주해서 열심히 만들었는데, 큐에 분명히 OnInput함수로 집어넣었는데 Update 함수에서 체크를 하면 큐가 비었다고 떠서 키 입력을 인식할 수가 없다...ㅠㅠㅠ
#pragma once
#include "Singleton.h"
class Input : public ISingleton<Input>
{
friend ISingleton<Input>;
public:
/*MessageHandler에서 전달할 인풋을 Event 클래스로 받음*/
struct Event {
enum class Type {
Mouse,
Key,
Char,
} type;
enum class State {
invalid = 0,
pressed = 1,
released = 2,
} state;
int key;
int x, y;
};
private:
//마우스와 키보드 입력에 대한 상태를 저장하는 클래스
class InputDevice
{
protected:
std::queue<Event> _eventQ;
public:
/*queue에 있는 Input Event 읽어서 상태 업데이트*/
virtual void Read(Event& event) = 0;
PROPERTY(std::queue<Event>&, eventQ);
GET(eventQ)
{
return this->_eventQ;
}
SET(eventQ)
{
Gohen::Console::Print("eventQ에 Set!");
}
};
class Mouse : public InputDevice {
private:
//현재 마우스의 위치(Raw Input)
int x, y;
/*
0 : Left Mouse
1 : Middle Mouse
2 : Right Mouse
*/
Event::State state[3];
public:
/*Mouse EventQ에서 Read Event*/
virtual void Read(Event& event);
};
class Keyboard : public InputDevice {
private:
Event::State keyState[256];
Event::State charState[256];
public:
Keyboard();
/*Keyboard EventQ에서 Read Event*/
virtual void Read(Event& event);
};
std::unordered_map<Event::Type, std::shared_ptr<InputDevice>> inputDevices;
private:
Input();
public:
bool GetKey(std::string key);
bool GetKeyDown(std::string key);
bool GetKeyUp(std::string key);
bool GetMouseButton(int num);
bool GetMouseButtonDown(int num);
bool GetMouseButtonUp(int num);
//입력장치 queue에 Event 집어넣는 함수
void OnInput(Event& event);
void Update();
public:
LRESULT MessageHandler(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
};