diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/api/Event.h | 43 | ||||
| -rw-r--r-- | src/crepe/manager/EventManager.h | 2 | ||||
| -rw-r--r-- | src/crepe/manager/EventManager.hpp | 7 | ||||
| -rw-r--r-- | src/crepe/system/InputSystem.h | 6 | ||||
| -rw-r--r-- | src/test/ScriptEventTest.cpp | 2 | 
5 files changed, 28 insertions, 32 deletions
| diff --git a/src/crepe/api/Event.h b/src/crepe/api/Event.h index 8e38280..7d4df21 100644 --- a/src/crepe/api/Event.h +++ b/src/crepe/api/Event.h @@ -10,15 +10,14 @@  namespace crepe {  /** - * \brief Base class for all event types in the system. + * \brief Base struct for all event types in the system.   */ -class Event {}; +struct Event {};  /**   * \brief Event triggered when a key is pressed.   */ -class KeyPressEvent : public Event { -public: +struct KeyPressEvent : public Event {  	//! false if first time press, true if key is repeated  	bool repeat = false; @@ -29,8 +28,7 @@ public:  /**   * \brief Event triggered when a key is released.   */ -class KeyReleaseEvent : public Event { -public: +struct KeyReleaseEvent : public Event {  	//! The key that was released.  	Keycode key = Keycode::NONE;  }; @@ -38,8 +36,7 @@ public:  /**   * \brief Event triggered when a mouse button is pressed.   */ -class MousePressEvent : public Event { -public: +struct MousePressEvent : public Event {  	//! mouse position in world coordinates (game units).  	vec2 mouse_pos = {0, 0}; @@ -50,8 +47,7 @@ public:  /**   * \brief Event triggered when a mouse button is clicked (press and release).   */ -class MouseClickEvent : public Event { -public: +struct MouseClickEvent : public Event {  	//! mouse position in world coordinates (game units).  	vec2 mouse_pos = {0, 0}; @@ -62,8 +58,7 @@ public:  /**   * \brief Event triggered when a mouse button is released.   */ -class MouseReleaseEvent : public Event { -public: +struct MouseReleaseEvent : public Event {  	//! mouse position in world coordinates (game units).  	vec2 mouse_pos = {0, 0}; @@ -74,8 +69,7 @@ public:  /**   * \brief Event triggered when the mouse is moved.   */ -class MouseMoveEvent : public Event { -public: +struct MouseMoveEvent : public Event {  	//! mouse position in world coordinates (game units).  	vec2 mouse_pos = {0, 0};  	//! The change in mouse position relative to the last position (in pixels). @@ -85,8 +79,7 @@ public:  /**   * \brief Event triggered when the mouse is moved.   */ -class MouseScrollEvent : public Event { -public: +struct MouseScrollEvent : public Event {  	//! mouse position in world coordinates (game units) when the scroll happened.  	vec2 mouse_pos = {0, 0};  	//! scroll direction (-1 = down, 1 = up) @@ -98,20 +91,19 @@ public:  /**   * \brief Event triggered to indicate the application is shutting down.   */ -class ShutDownEvent : public Event {}; +struct ShutDownEvent : public Event {};  /**   * \brief Event triggered to indicate the window is overlapped by another window.   *    * When two windows overlap the bottom window gets distorted and that window has to be redrawn.   */ -class WindowExposeEvent : public Event {}; +struct WindowExposeEvent : public Event {};  /**   * \brief Event triggered to indicate the window is resized.   */ -class WindowResizeEvent : public Event { -public: +struct WindowResizeEvent : public Event {  	//! new window dimensions  	ivec2 dimensions = {0, 0};  }; @@ -119,8 +111,7 @@ public:  /**   * \brief Event triggered to indicate the window is moved.   */ -class WindowMoveEvent : public Event { -public: +struct WindowMoveEvent : public Event {  	//! The change in position relative to the last position (in pixels).  	ivec2 delta_move = {0, 0};  }; @@ -128,12 +119,12 @@ public:  /**   * \brief Event triggered to indicate the window is minimized.   */ -class WindowMinimizeEvent : public Event {}; +struct WindowMinimizeEvent : public Event {};  /**   * \brief Event triggered to indicate the window is maximized   */ -class WindowMaximizeEvent : public Event {}; +struct WindowMaximizeEvent : public Event {};  /**   * \brief Event triggered to indicate the window gained focus @@ -141,7 +132,7 @@ class WindowMaximizeEvent : public Event {};   * This event is triggered when the window receives focus, meaning it becomes the active window   * for user interaction.   */ -class WindowFocusGainEvent : public Event {}; +struct WindowFocusGainEvent : public Event {};  /**   * \brief Event triggered to indicate the window lost focus @@ -149,6 +140,6 @@ class WindowFocusGainEvent : public Event {};   * This event is triggered when the window loses focus, meaning it is no longer the active window   * for user interaction.   */ -class WindowFocusLostEvent : public Event {}; +struct WindowFocusLostEvent : public Event {};  } // namespace crepe diff --git a/src/crepe/manager/EventManager.h b/src/crepe/manager/EventManager.h index 639e37f..0a57fb1 100644 --- a/src/crepe/manager/EventManager.h +++ b/src/crepe/manager/EventManager.h @@ -106,7 +106,7 @@ private:  	 * \brief Represents an entry in the event queue.  	 */  	struct QueueEntry { -		std::unique_ptr<Event> event; ///< The event instance. +		std::unique_ptr<Event, std::function<void(Event *)>> event; ///< The event instance.  		event_channel_t channel = CHANNEL_ALL; ///< The channel associated with the event.  		std::type_index type; ///< The type of the event.  	}; diff --git a/src/crepe/manager/EventManager.hpp b/src/crepe/manager/EventManager.hpp index a5f4556..b2090d0 100644 --- a/src/crepe/manager/EventManager.hpp +++ b/src/crepe/manager/EventManager.hpp @@ -22,7 +22,12 @@ void EventManager::queue_event(const EventType & event, event_channel_t channel)  	static_assert(std::is_base_of<Event, EventType>::value,  				  "EventType must derive from Event");  	this->events_queue.push_back(QueueEntry{ -		.event = std::make_unique<EventType>(event), +		// unique_ptr w/ custom destructor implementation is used because the base Event interface +		// can't be polymorphic (= have default virtual destructor) +		.event = { +			new EventType(event), +			[](Event * ev) { delete static_cast<EventType *>(ev); }, +		},  		.channel = channel,  		.type = typeid(EventType),  	}); diff --git a/src/crepe/system/InputSystem.h b/src/crepe/system/InputSystem.h index 2cb80e5..45b238b 100644 --- a/src/crepe/system/InputSystem.h +++ b/src/crepe/system/InputSystem.h @@ -23,7 +23,7 @@ public:  	/**  	 * \param metadata Metadata of the button pressed  	 */ -	ButtonPressEvent(const Metadata & metadata) : metadata(metadata){}; +	ButtonPressEvent(const Metadata & metadata) : metadata(metadata) {};  };  //! Event triggered when the mouse enters a button  class ButtonEnterEvent : public Event { @@ -33,7 +33,7 @@ public:  	/**  	 * \param metadata Metadata of the button pressed  	 */ -	ButtonEnterEvent(const Metadata & metadata) : metadata(metadata){}; +	ButtonEnterEvent(const Metadata & metadata) : metadata(metadata) {};  };  //! Event triggered when the mouse leaves a button  class ButtonExitEvent : public Event { @@ -43,7 +43,7 @@ public:  	/**  	 * \param metadata Metadata of the button pressed  	 */ -	ButtonExitEvent(const Metadata & metadata) : metadata(metadata){}; +	ButtonExitEvent(const Metadata & metadata) : metadata(metadata) {};  };  /** diff --git a/src/test/ScriptEventTest.cpp b/src/test/ScriptEventTest.cpp index 479e3f5..8b4a72d 100644 --- a/src/test/ScriptEventTest.cpp +++ b/src/test/ScriptEventTest.cpp @@ -23,7 +23,7 @@ class ScriptEventTest : public ScriptTest {  public:  	EventManager & event_manager = mediator.event_manager; -	class MyEvent : public Event {}; +	struct MyEvent : public Event {};  };  TEST_F(ScriptEventTest, Default) { |