// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "UIMenuController.hpp" #include "game/DawnGame.hpp" using namespace Dawn; UIMenuController::UIMenuController(SceneItem *item) : SceneItemComponent(item), active(true), menuX(0), menuY(0), columns(4), rows(4) { } void UIMenuController::onStart() { useEffectWithTeardown([&]{ if(!active) return activeTeardown = [&]{ }; useEffect([&]{ eventItemChange.invoke(menuX, menuY); }, menuX); useEffect([&]{ eventItemChange.invoke(menuX, menuY); }, menuY); useEffect([&]{ menuX = mathClamp(menuX, 0, rows); }, columns); useEffect([&]{ menuY = mathClamp(menuY, 0, rows); }, rows); return activeTeardown = useEvent([&](inputbind_t bind) { switch(bind) { case INPUT_BIND_POSITIVE_X: menuX = mathClamp(menuX+1, 0, columns); break; case INPUT_BIND_POSITIVE_Y: menuY = mathClamp(menuY+1, 0, rows); break; case INPUT_BIND_NEGATIVE_X: menuX = mathClamp(menuX-1, 0, columns); break; case INPUT_BIND_NEGATIVE_Y: menuY = mathClamp(menuY-1, 0, rows); break; case INPUT_BIND_ACCEPT: case INPUT_BIND_MOUSE_CLICK: eventItemSelected.invoke(menuX, menuY); break; case INPUT_BIND_CANCEL: eventMenuCancel.invoke(); break; default: return; } }, this->getGame()->inputManager.eventBindPressed); }, active)(); }