diff options
author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-20 12:17:14 +0100 |
---|---|---|
committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-20 12:17:14 +0100 |
commit | 18c7e528f3df31d62cd05c2cc34be92be83d5367 (patch) | |
tree | 800cc0fc41750c31a95de09dc2fc2207d0ed7469 /src/crepe | |
parent | 03aea832aa0bc2edba2cc5ab4d9f8eba42d355be (diff) |
button now using channel
Diffstat (limited to 'src/crepe')
-rw-r--r-- | src/crepe/api/Script.cpp | 15 | ||||
-rw-r--r-- | src/crepe/api/Script.h | 38 | ||||
-rw-r--r-- | src/crepe/system/InputSystem.cpp | 8 |
3 files changed, 56 insertions, 5 deletions
diff --git a/src/crepe/api/Script.cpp b/src/crepe/api/Script.cpp index b147252..06b535f 100644 --- a/src/crepe/api/Script.cpp +++ b/src/crepe/api/Script.cpp @@ -20,6 +20,21 @@ void Script::subscribe(const EventHandler<CollisionEvent> & callback) { this->subscribe_internal(callback, this->game_object_id); } +template <> +void Script::subscribe(const EventHandler<ButtonExitEvent> & callback) { + this->subscribe_internal(callback, this->game_object_id); +} + +template <> +void Script::subscribe(const EventHandler<ButtonPressEvent> & callback) { + this->subscribe_internal(callback, this->game_object_id); +} + +template <> +void Script::subscribe(const EventHandler<ButtonEnterEvent> & callback) { + this->subscribe_internal(callback, this->game_object_id); +} + void Script::set_next_scene(const string & name) { SceneManager & mgr = this->mediator->scene_manager; mgr.set_next_scene(name); diff --git a/src/crepe/api/Script.h b/src/crepe/api/Script.h index 5f68928..bbee920 100644 --- a/src/crepe/api/Script.h +++ b/src/crepe/api/Script.h @@ -8,6 +8,7 @@ #include "../manager/Mediator.h" #include "../manager/ReplayManager.h" #include "../system/CollisionSystem.h" +#include "../system/InputSystem.h" #include "../types.h" #include "../util/Log.h" #include "../util/OptionalRef.h" @@ -270,7 +271,42 @@ void Script::subscribe(const EventHandler<CollisionEvent> & callback); template <> void Script::subscribe(const EventHandler<CollisionEvent> & callback, event_channel_t) = delete; - +/** + * \brief Subscribe to ButtonPressEvent for the current GameObject + * + * This is a template specialization for Script::subscribe which automatically sets the event + * channel so the callback handler is only called for ButtonPressEvent events that apply to the + * current GameObject the parent BehaviorScript is attached to. + */ +template <> +void Script::subscribe(const EventHandler<ButtonPressEvent> & callback); +template <> +void Script::subscribe(const EventHandler<ButtonPressEvent> & callback, event_channel_t) + = delete; +/** + * \brief Subscribe to ButtonExitEvent for the current GameObject + * + * This is a template specialization for Script::subscribe which automatically sets the event + * channel so the callback handler is only called for ButtonExitEvent events that apply to the + * current GameObject the parent BehaviorScript is attached to. + */ +template <> +void Script::subscribe(const EventHandler<ButtonExitEvent> & callback); +template <> +void Script::subscribe(const EventHandler<ButtonExitEvent> & callback, event_channel_t) + = delete; +/** + * \brief Subscribe to ButtonEnterEvent for the current GameObject + * + * This is a template specialization for Script::subscribe which automatically sets the event + * channel so the callback handler is only called for ButtonEnterEvent events that apply to the + * current GameObject the parent BehaviorScript is attached to. + */ +template <> +void Script::subscribe(const EventHandler<ButtonEnterEvent> & callback); +template <> +void Script::subscribe(const EventHandler<ButtonEnterEvent> & callback, event_channel_t) + = delete; } // namespace crepe #include "Script.hpp" diff --git a/src/crepe/system/InputSystem.cpp b/src/crepe/system/InputSystem.cpp index 858a645..49ffeac 100644 --- a/src/crepe/system/InputSystem.cpp +++ b/src/crepe/system/InputSystem.cpp @@ -171,12 +171,12 @@ void InputSystem::handle_move(const EventData & event_data, const vec2 & mouse_p if (this->is_mouse_inside_button(mouse_pos, button, transform, cam_transform)) { button.hover = true; if (!was_hovering) { - event_mgr.trigger_event<ButtonEnterEvent>(metadata); + event_mgr.trigger_event<ButtonEnterEvent>(metadata,metadata.game_object_id); } } else { button.hover = false; if (was_hovering) { - event_mgr.trigger_event<ButtonExitEvent>(metadata); + event_mgr.trigger_event<ButtonExitEvent>(metadata,metadata.game_object_id); } } } @@ -196,7 +196,7 @@ void InputSystem::handle_click(const MouseButton & mouse_button, const vec2 & mo const Transform & transform = mgr.get_components_by_id<Transform>(button.game_object_id).front(); if (this->is_mouse_inside_button(mouse_pos, button, transform, cam_transform)) { - event_mgr.trigger_event<ButtonPressEvent>(metadata); + event_mgr.trigger_event<ButtonPressEvent>(metadata,metadata.game_object_id); } } } @@ -209,7 +209,7 @@ bool InputSystem::is_mouse_inside_button(const vec2 & mouse_pos, const Button & actual_pos += cam_transform.position; } vec2 half_dimensions = button.dimensions / 2; - + return mouse_pos.x >= actual_pos.x - half_dimensions.x && mouse_pos.x <= actual_pos.x + half_dimensions.x && mouse_pos.y >= actual_pos.y - half_dimensions.y |