parent
a09f6e5a74
commit
452cc00e57
7 changed files with 150 additions and 0 deletions
@ -0,0 +1,20 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include "event.h" |
||||||
|
|
||||||
|
namespace Bk { |
||||||
|
class AppTickEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class AppRenderEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
class AppUpdateEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
#include "event.h" |
||||||
|
|
||||||
|
namespace Bk { |
||||||
|
EventDispatcher::EventDispatcher(Event& event)
|
||||||
|
{ |
||||||
|
p_event = event; |
||||||
|
} |
||||||
|
|
||||||
|
bool ventDispatcher::Dispatch(const F& func) |
||||||
|
{ |
||||||
|
if (p_event.GetEventType() == T::GetStaticType()) |
||||||
|
{ |
||||||
|
p_event.handled |= func(static_cast<T&>(p_event)); |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
inline std::ostream& operator<<(std::ostream& os, Event& e)
|
||||||
|
{ |
||||||
|
return os << e.ToString(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <bakara/math/base.h> |
||||||
|
|
||||||
|
namespace Bk { |
||||||
|
enum class EventType
|
||||||
|
{ |
||||||
|
None = 0, |
||||||
|
AppTick, |
||||||
|
AppUpdate, |
||||||
|
AppRender, |
||||||
|
WindowClose, |
||||||
|
WindowResize, |
||||||
|
WindowFocus, |
||||||
|
WindowLostFocus, |
||||||
|
WindowMove, |
||||||
|
KeyPress, |
||||||
|
KeyRelease, |
||||||
|
KeyTyped, |
||||||
|
MouseButtonPress, |
||||||
|
MouseButtonRelease, |
||||||
|
MouseMove, |
||||||
|
MouseScroll |
||||||
|
}; |
||||||
|
|
||||||
|
enum class EventCategory
|
||||||
|
{ |
||||||
|
None = 0, |
||||||
|
AppEvent = BIT_SHIFT(0), |
||||||
|
InputEvent = BIT_SHIFT(1), |
||||||
|
KeyboardEvent = BIT_SHIFT(2), |
||||||
|
MouseEvent = BIT_SHIFT(3), |
||||||
|
MouseButtonEvent = BIT_SHIFT(4) |
||||||
|
}; |
||||||
|
|
||||||
|
#define EVENT_CLASS_TYPE(type) static EventType GetStaticType() { return EventType::type; }\ |
||||||
|
virtual EventType GetEventType() const override { return GetStaticType(); }\
|
||||||
|
virtual const char* GetName() const override { return #type; } |
||||||
|
|
||||||
|
#define EVENT_CLASS_CATEGORY(category) virtual int GetCategoryFlags() const override { return category; } |
||||||
|
|
||||||
|
class Event
|
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual ~Event() = default; |
||||||
|
|
||||||
|
bool handled = false; |
||||||
|
|
||||||
|
virtual EventType GetEventType() const = 0; |
||||||
|
virtual const char* GetName() const = 0; |
||||||
|
virtual int GetCategoryFlags() const = 0; |
||||||
|
virtual std::string ToString() const { return GetName(); } |
||||||
|
|
||||||
|
bool IsInCategory(EventCategory category) |
||||||
|
{ |
||||||
|
return GetCategoryFlags() & (int)category == GetCategoryFlags(); |
||||||
|
} |
||||||
|
}; |
||||||
|
inline std::ostream& operator<<(std::ostream& os, Event& e); |
||||||
|
|
||||||
|
|
||||||
|
class EventDispatcher |
||||||
|
{ |
||||||
|
public: |
||||||
|
EventDispatcher(Event& event); |
||||||
|
|
||||||
|
// F will be deduced by the compiler
|
||||||
|
template<typename T, typename F> |
||||||
|
bool Dispatch(const F& func); |
||||||
|
private: |
||||||
|
Event& p_event; |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
pragma once |
||||||
|
|
||||||
|
#include "event.h" |
||||||
|
|
||||||
|
namespace Bk { |
||||||
|
class WindowResizeEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class WindowCloseEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
class WindowFocusEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
class WindowLostFocusEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
class WindowMoveEvent : public Event
|
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#define BIT_SHIFT(x) (1 << x) |
Loading…
Reference in New Issue