From 480a087d8e258e540aec198e701a5bfc1ed012fd Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 4 Jul 2026 18:12:50 +0300 Subject: [PATCH] Add 'click anywhere' starting menu for web builds --- source/application.cpp | 62 ++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/source/application.cpp b/source/application.cpp index 7068d7f..1793169 100644 --- a/source/application.cpp +++ b/source/application.cpp @@ -1504,7 +1504,7 @@ namespace gmtk error_ = audio::load_mp3(io::read_full(std::move(*app::open_resource("sounds/error.mp3")))); context_.windowed(is_windowed_); - set_start_menu(); + init_menu(); } void on_event(app::resize_event const & event) override @@ -1668,7 +1668,11 @@ namespace gmtk { item_killing_spree_ = false; - if (selected_button_) + if (in_click_anywhere_menu_) + { + set_start_menu(); + } + else if (selected_button_) { if (*selected_button_ < menu_buttons_.size() && menu_buttons_[*selected_button_].action) { @@ -2568,7 +2572,8 @@ namespace gmtk bool running_ = true; - bool in_start_menu_ = true; + bool in_click_anywhere_menu_ = false; + bool in_start_menu_ = false; bool in_escape_menu_ = false; bool in_victory_menu_ = false; @@ -2586,7 +2591,7 @@ namespace gmtk bool in_menu() const { - return in_start_menu_ || in_escape_menu_ || in_victory_menu_; + return in_click_anywhere_menu_ || in_start_menu_ || in_escape_menu_ || in_victory_menu_; } std::uint64_t seed_ = 0; @@ -2637,13 +2642,26 @@ namespace gmtk card_animation_.clear(); } - void set_start_menu() + void init_menu() { - in_start_menu_ = true; + map_ = start_menu_map(); + +#ifdef __EMSCRIPTEN__ + set_click_anywhere_menu(); +#else + set_start_menu(); +#endif + } + + void set_click_anywhere_menu() + { + in_click_anywhere_menu_ = true; + in_start_menu_ = false; in_escape_menu_ = false; in_victory_menu_ = false; - map_ = start_menu_map(); + menu_buttons_.clear(); + menu_buttons_.push_back({"Click anywhere", {}}); if (!view_stack_.empty()) { @@ -2652,8 +2670,24 @@ namespace gmtk } view_stack_.push_back({-1, {0, 0}}); view_stack_.push_back({0, {1, 1}}); + } + + void set_start_menu() + { + in_click_anywhere_menu_ = false; + in_start_menu_ = true; + in_escape_menu_ = false; + in_victory_menu_ = false; set_start_menu_buttons(); + + if (!view_stack_.empty()) + { + view_transition_ = {view_stack_.back()}; + view_stack_.clear(); + } + view_stack_.push_back({-1, {0, 0}}); + view_stack_.push_back({0, {1, 1}}); } void set_start_menu_buttons() @@ -2852,43 +2886,43 @@ namespace gmtk void item_received_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(click_high_->stream(), 0.25f)); } void item_produced_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(click_low_->stream(), 0.5f)); } void mixer_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(machine_->stream(), 0.125f)); } void shifter_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(gears_->stream(), 0.5f)); } void reshaper_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(key_click_->stream(), 0.25f)); } void item_removed_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; mixer_->add(audio::volume(pop_->stream(), 0.5f)); } void item_error_sound() { - if (in_start_menu_) return; + if (in_click_anywhere_menu_ || in_start_menu_) return; // mixer_->add(audio::volume(error_->stream(), 0.25f)); } };