blob: 26e752631fa711b6b1a3173e89f53f1f58c5d547 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#pragma once
#include <functional>
#include "UIObject.h"
namespace crepe {
//! 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 is_toggle Optional flag to indicate if the button is a toggle button. Defaults to false.
* \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<void()> & on_click, bool is_toggle = false);
/**
* \brief Indicates if the button is a toggle button (can be pressed and released).
*
* A toggle button allows for a pressed/released state, whereas a regular button
* typically only has an on-click state.
*/
bool is_toggle = false;
// 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<void()> 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<void()> 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<void()> on_mouse_exit = nullptr;
private:
//! friend relation for is_pressed and hover variables
friend class InputSystem;
//! Indicates whether the toggle button is pressed
bool is_pressed = false;
//! Indicates whether the mouse is currently hovering over the button
bool hover = false;
public:
};
} // namespace crepe
|