From 2343b9aee78d4f6b0db5cc15e871adc68f3e6b56 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Fri, 18 Jun 2021 16:21:31 +0200 Subject: [PATCH] [ADD] button callbacks --- src/gui/gui_interactable.h | 18 ++++++++++-------- src/scenes/in_Game_Scene.cpp | 14 ++++++++------ src/scenes/startup_Scene.cpp | 35 ++++++++++++++++------------------- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/gui/gui_interactable.h b/src/gui/gui_interactable.h index e9055c2..2dab289 100644 --- a/src/gui/gui_interactable.h +++ b/src/gui/gui_interactable.h @@ -4,6 +4,7 @@ #include #include "../toolbox/toolbox.h" #include "gui_element.h" +#include namespace gui { @@ -83,14 +84,15 @@ namespace gui /* - * This class represents a button - */ + * This class represents a button + */ class Button : public InteractableGui { private: - void (*on_click_action)(); - void (*on_enter_action)(); - void (*on_exit_action)(); + + std::function on_click_action; + std::function on_enter_action; + std::function on_exit_action; public: Button(int default_texture, glm::vec2 position, glm::vec2 scale) : InteractableGui(default_texture, position, scale) {} @@ -100,21 +102,21 @@ namespace gui * * @param fun: A function pointer to a function (or lambda) */ - void SetOnClickAction(void (*fun)()) { on_click_action = fun; } + void SetOnClickAction(std::function fun) { on_click_action = fun; } /* * @brief: This function sets an action (function pointer) to the OnEnter function * * @param fun: A function pointer to a function (or lambda) */ - void SetOnEnterAction(void (*fun)()) { on_enter_action = fun; } + void SetOnEnterAction(std::function fun) { on_enter_action = fun; } /* * @brief: This function sets an action (function pointer) to the OnExit function * * @param fun: A function pointer to a function (or lambda) */ - void SetOnExitAction(void (*fun)()) { on_exit_action = fun; } + void SetOnExitAction(std::function fun) { on_exit_action = fun; } GuiType GetType() override { return GuiType::BUTTON; diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 72f7fd3..0265f18 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -174,21 +174,23 @@ namespace scene gui::GuiTexture background(render_engine::loader::LoadTexture("res/background_grey.png"), glm::vec2(0, 0), glm::vec2(1, 1)); pause_guis.push_back(&background); - gui::Button pause_button_resume(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0, 0), glm::vec2(0.25f, 0.25f)); - pause_button_resume.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png")); - pause_button_resume.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png")); + gui::Button pause_button_resume(render_engine::loader::LoadTexture("res/menu_item_start1.png"), glm::vec2(0.0f, 0.3f), glm::vec2(0.25f, 0.25f)); + pause_button_resume.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_start1_hover.png")); + pause_button_resume.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_start1_click.png")); pause_button_resume.SetOnClickAction([]() { std::cout << "I got clicked on the resume button!" << std::endl; + //game_state = scene::Game_State::RUNNING; }); pause_guis.push_back(&pause_button_resume); - gui::Button pause_button_quit(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.3f, 0.0f), glm::vec2(0.25f, 0.25f)); - pause_button_quit.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png")); - pause_button_quit.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png")); + gui::Button pause_button_quit(render_engine::loader::LoadTexture("res/menu_item_quit1.png"), glm::vec2(0.0f, -0.3f), glm::vec2(0.25f, 0.25f)); + pause_button_quit.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_hover.png")); + pause_button_quit.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_click.png")); pause_button_quit.SetOnClickAction([]() { std::cout << "I got clicked on the quit button!" << std::endl; + //return_value = scene::Scenes::STOP; }); pause_guis.push_back(&pause_button_quit); diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index 6e6c88f..9d1181e 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -95,30 +95,27 @@ namespace scene gui::Button button_start(render_engine::loader::LoadTexture("res/menu_item_start1.png"), glm::vec2(0.0f, 0.6f), glm::vec2(0.25f, 0.25f)); button_start.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_start1_hover.png")); button_start.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_start1_click.png")); - button_start.SetOnClickAction([]() - { - std::cout << "Clicked on button: Start!" << std::endl; - - }); + std::function start_fun = [this]() + { + std::cout << "Clicked on button: Start!" << std::endl; + return_value = scene::Scenes::INGAME; + cv::destroyWindow("camera"); + + }; + button_start.SetOnClickAction(start_fun); + guis1.push_back(&button_start); - gui::Button button_calibrate(render_engine::loader::LoadTexture("res/menu_item_calibrate1.png"), glm::vec2(0.0f, 0.0f), glm::vec2(0.25f, 0.25f)); - button_calibrate.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_calibrate1_hover.png")); - button_calibrate.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_calibrate1_click.png")); - button_calibrate.SetOnClickAction([]() - { - std::cout << "Clicked on button: Calibrate!" << std::endl; - - }); - guis1.push_back(&button_calibrate); - gui::Button button_quit(render_engine::loader::LoadTexture("res/menu_item_quit1.png"), glm::vec2(0.0f, -0.6f), glm::vec2(0.25f, 0.25f)); button_quit.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_hover.png")); button_quit.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_click.png")); - button_quit.SetOnClickAction([]() - { - std::cout << "Clicked on button: Quit!" << std::endl; - }); + std::function quit_fun = [this]() + { + std::cout << "Clicked on button: Quit!" << std::endl; + return_value = scene::Scenes::STOP; + cv::destroyWindow("camera"); + }; + button_quit.SetOnClickAction(quit_fun); guis1.push_back(&button_quit); computervision::ObjectDetection objDetect;