반복 횟수는 아직 구현을 못했네요. 잘 동작하는 것 같습니다.

 

 

glfw로 윈도우에 들어오는 이벤트에 대해서 콜백 함수를 등록합니다.

 

 

그리고 작성된 키보드 매니저에서 콜백 함수 OnEvent가 호출되면

GLFW에서 설정된 액션에 맞게 IsPressed, IsReleased 함수를 호출합니다.

 

 
BIND_EVENT_FUNC는 std::bind를 통해서 함수포인터에 템플릿 타입에 대해서 바인딩해주는 매크로입니다.

해당 매크로를 통해 각 버튼에 대해서 호출이 될 수 있도록 함수를 바인딩해줍니다.

 

 

그리고 NR_SET_NAME은 디버그 모드에서만 클래스들이 이름을 가질 수 있도록 설정해둔 매크로입니다.

저번에 만든 로그 기능에서 직접 해당 변수를 대입하는 대신 NR_GET_NAME 를 사용하면 디버그 모드랑 릴리즈 모드랑 구분해서

디버그 로그 화면에 클래스 이름을 표시해주는 등 유용하게 사용할 수 있습니다.

 

 
디버그 모드
릴리즈 모드

 

그 외에도 화면에서 유저가 이벤트를 발생시키면 각 이벤트를 취하는 레벨에 따라 컨테이너를 만들어서 

만약 상위 레벨이 먼저 그 이벤트를 처리하면 하위 레벨에 도달하지 못하도록 구현 했습니다.

예를 들어서 UI를 클릭했는데 UI를 뚫고 게임을 동작시키는 레벨에서는 움직이면 안되기 때문에 

각 레벨을 상속받아서 기능을 구현하도록 추상화 계층을 만들었습니다. 그 추상화 계층을 관리해주는게 컨테이너입니다 

 

 

내부 구현은 이런데 딱히 특별한 건 없습니다.

오버레이는 UI와 같은 구현에 사용됩니다. 아마 추후에 렌더링과 업데이트, 그리고 이벤트 처리에 대해서 관리해주는 함수를 추가하게 될 것 같습니다.