#ifndef MENU_H #define MENU_H #include "display.h" #include class Menu { public: static constexpr int HOLD_MS_THRESHOLD = 250; explicit Menu(lib::Display& display); virtual ~Menu() = default; virtual void onTick(float dt) = 0; virtual void onLeftPressed() = 0; virtual void onLeftHeld() = 0; virtual void onMenuPressed() = 0; virtual void onMenuHeld() = 0; virtual void onRightPressed() = 0; virtual void onRightHeld() = 0; protected: lib::Display* const display; }; namespace menus { class ManaMenu : public Menu { public: explicit ManaMenu(lib::Display& display); ~ManaMenu() override = default; void onTick(float dt) override; void onLeftPressed() override; void onLeftHeld() override; void onMenuPressed() override; void onMenuHeld() override; void onRightPressed() override; void onRightHeld() override; private: uint8_t current; bool going_left; float progress; }; constexpr size_t MAX_MENU_SIZE = sizeof(ManaMenu); } #endif // MENU_H