aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
authorWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-25 11:17:20 +0100
committerWBoerenkamps <wrj.boerenkamps@student.avans.nl>2024-11-25 11:17:20 +0100
commit596358ffea72aec48b389609349f717e76396ae2 (patch)
tree4c023d4797f18c5b240765b5fef07fc793f52f42 /src/crepe
parent327154fd428e0798eea544d9f073f8e1293aa158 (diff)
button test working
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/api/Button.h1
-rw-r--r--src/crepe/facade/SDLContext.cpp2
-rw-r--r--src/crepe/system/InputSystem.cpp31
-rw-r--r--src/crepe/system/InputSystem.h2
4 files changed, 25 insertions, 11 deletions
diff --git a/src/crepe/api/Button.h b/src/crepe/api/Button.h
index 709854a..f533452 100644
--- a/src/crepe/api/Button.h
+++ b/src/crepe/api/Button.h
@@ -11,6 +11,7 @@ public:
bool interactable = true;
bool is_toggle = false;
bool is_pressed = false;
+ bool hover = false;
std::function<void()> on_click;
public:
virtual int get_instances_max() const { return 1; }
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index f87cc61..6371a51 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -361,6 +361,7 @@ std::vector<SDLContext::EventData> SDLContext::get_events(){
event_list.push_back(EventData{
.event_type = SDLContext::Event::MOUSEMOVE,
.mouse_position = {event.button.x,event.button.y},
+ .rel_mouse_move = {event.motion.yrel,event.motion.xrel}
});
}
break;
@@ -371,7 +372,6 @@ std::vector<SDLContext::EventData> SDLContext::get_events(){
.event_type = SDLContext::Event::MOUSEWHEEL,
.mouse_position = {event.motion.x,event.motion.y},
.wheel_delta = event.wheel.y,
- .rel_mouse_move = {event.motion.yrel,event.motion.xrel},
});
}
break;
diff --git a/src/crepe/system/InputSystem.cpp b/src/crepe/system/InputSystem.cpp
index 4560411..a3e28e4 100644
--- a/src/crepe/system/InputSystem.cpp
+++ b/src/crepe/system/InputSystem.cpp
@@ -56,10 +56,6 @@ void InputSystem::update() {
if (last_mouse_button == event.mouse_button &&
std::abs(delta_x) <= click_tolerance &&
std::abs(delta_y) <= click_tolerance) {
- std::cout << "Click registered at (" << event.mouse_position.first
- << ", " << event.mouse_position.second << ") with button "
- << static_cast<int>(event.mouse_button) << std::endl;
-
event_mgr.queue_event<MouseClickEvent>(MouseClickEvent{
.mouse_x = event.mouse_position.first,
.mouse_y = event.mouse_position.second,
@@ -67,8 +63,6 @@ void InputSystem::update() {
});
this->handle_click(mouse_release_event);
- } else {
- std::cout << "Mouse release did not register as a click." << std::endl;
}
break;
@@ -101,6 +95,25 @@ void InputSystem::update() {
}
}
+void InputSystem::handle_move(const MouseMoveEvent){
+ ComponentManager &mgr = this->component_manager;
+
+ // Get the buttons and transforms
+ std::vector<std::reference_wrapper<Button>> buttons = mgr.get_components_by_type<Button>();
+ std::vector<std::reference_wrapper<Transform>> transforms = mgr.get_components_by_type<Transform>();
+
+ for (Button &button : buttons) {
+ Transform* transform = find_transform_for_button(button, transforms);
+ if (!transform) continue;
+
+ if (button.interactable && is_mouse_inside_button(event, button, *transform)) {
+ button.hover = true;
+ }else{
+ button.hover = false;
+ }
+ }
+}
+
void InputSystem::handle_click(const MouseReleaseEvent event) {
ComponentManager &mgr = this->component_manager;
@@ -134,11 +147,11 @@ bool InputSystem::is_mouse_inside_button(const MouseReleaseEvent &event, const B
void InputSystem::handle_button_press(Button &button, const MouseReleaseEvent &event) {
if (button.is_toggle) {
- if (!button.is_pressed) {
- button.on_click();
+ if (!button.is_pressed && button.on_click) {
+ button.on_click();
}
button.is_pressed = !button.is_pressed;
- } else {
+ } else if(button.on_click) {
button.on_click();
}
}
diff --git a/src/crepe/system/InputSystem.h b/src/crepe/system/InputSystem.h
index db6b374..5f71687 100644
--- a/src/crepe/system/InputSystem.h
+++ b/src/crepe/system/InputSystem.h
@@ -21,7 +21,7 @@ private:
MouseButton last_mouse_button = MouseButton::NONE;
const int click_tolerance = 5;
void handle_click(const MouseReleaseEvent);
-
+ void handle_move(const MouseMoveEvent);
Transform* find_transform_for_button(Button &button, std::vector<std::reference_wrapper<Transform>> &transforms);
bool is_mouse_inside_button(const MouseReleaseEvent &event, const Button &button, const Transform &transform);