#pragma once #include #include "UIObject.h" #include "Event.h" #include "Metadata.h" namespace crepe { /** * \brief Event triggered when a button is pressed * */ class ButtonPressEvent : public Event{ public: } //! Represents a clickable UI button, derived from the UiObject class. class Button : public UIObject { public: /** * \brief Constructs a Button with the specified game object ID and dimensions. * * \param id The unique ID of the game object associated with this button. * \param dimensions The width and height of the UIObject * \param offset The offset relative this GameObjects Transform * \param on_click callback function that will be invoked when the button is clicked. */ Button(game_object_id_t id, const vec2 & dimensions, const vec2 & offset, const std::function & on_click); // TODO: create separate toggle button class /** * \brief The callback function to be executed when the button is clicked. * * This function is invoked whenever the button is clicked. It can be set to any * function that matches the signature `void()`. */ std::function on_click = nullptr; /** * \brief Callback function to be executed when the mouse enters the button's boundaries. * * This function is triggered when the mouse cursor moves over the button, allowing * custom actions like visual effects, highlighting, or sound effects. */ std::function on_mouse_enter = nullptr; /** * \brief Callback function to be executed when the mouse exits the button's boundaries. * * This function is triggered when the mouse cursor moves out of the button's area, * allowing custom actions like resetting visual effects or playing exit-related effects. */ std::function on_mouse_exit = nullptr; private: //! friend relation for is_pressed and hover variables friend class InputSystem; //! Indicates whether the mouse is currently hovering over the button bool hover = false; public: }; } // namespace crepe