이벤트 시스템은 프로그램 내에서 발생하는 **특정 사건(이벤트)**에 대해 특정 작업(핸들러, 리스너)을 연결하는 구조입니다.
마우스 클릭, 키보드 입력, 창 크기 조절 등이 대표적인 이벤트입니다.
위 코드는 Hazel 스타일의 이벤트 시스템을 기반으로 합니다.
코드의 핵심 구성 요소와 동작 방식을 설명하겠습니다.
Event는 모든 이벤트의 기본 클래스입니다.
이벤트의 종류는 WindowResizeEvent, MouseMovedEvent 같은 파생 클래스로 정의됩니다.
class Event
{
public:
virtual ~Event() = default;
bool Handled = false; // 이벤트가 처리되었는지 여부
virtual eEventType GetEventType() const = 0;
virtual const char* GetName() const = 0;
virtual int GetCategoryFlags() const = 0;
virtual std::string ToString() const { return GetName(); }
bool IsInCategory(eEventCategory category)
{
return GetCategoryFlags() & category;
}
};