68 lines
1.6 KiB
C++
68 lines
1.6 KiB
C++
// 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<int32_t>(menuX, 0, rows);
|
|
}, columns);
|
|
|
|
useEffect([&]{
|
|
menuY = mathClamp<int32_t>(menuY, 0, rows);
|
|
}, rows);
|
|
|
|
return activeTeardown = useEvent([&](inputbind_t bind) {
|
|
switch(bind) {
|
|
case INPUT_BIND_POSITIVE_X:
|
|
menuX = mathClamp<int32_t>(menuX+1, 0, columns);
|
|
break;
|
|
case INPUT_BIND_POSITIVE_Y:
|
|
menuY = mathClamp<int32_t>(menuY+1, 0, rows);
|
|
break;
|
|
case INPUT_BIND_NEGATIVE_X:
|
|
menuX = mathClamp<int32_t>(menuX-1, 0, columns);
|
|
break;
|
|
case INPUT_BIND_NEGATIVE_Y:
|
|
menuY = mathClamp<int32_t>(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)();
|
|
} |