#ifndef MENU_H_3F6E62B3 #define MENU_H_3F6E62B3 #include #include #include #include class Game; enum class MenuType { Command }; struct MenuItem { MenuType type = MenuType::Command; std::string text; std::function activationFunction; bool playSfx = false; }; class MenuBuilder { public: MenuBuilder& Command(std::string text) { result_.type = MenuType::Command; result_.text = std::move(text); result_.playSfx = true; return *this; } MenuBuilder& ActivationFunction(std::function val) { result_.activationFunction = std::move(val); return *this; } MenuBuilder& SkipSoundEffect() { result_.playSfx = false; return *this; } MenuItem Build() const { return result_; } private: MenuItem result_; }; std::vector CreateMenu(const std::vector& builders); #endif /* end of include guard: MENU_H_3F6E62B3 */