Antkeeper  0.0.1
pause-menu-state.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
24 #include "game/menu.hpp"
25 #include "game/controls.hpp"
29 #include <engine/scene/text.hpp>
30 #include <engine/debug/log.hpp>
32 #include <engine/config.hpp>
33 #include "game/strings.hpp"
35 
36 using namespace hash::literals;
37 
39  game_state(ctx)
40 {
41  debug::log_trace("Entering pause menu state...");
42 
43  // Construct menu item texts
44  resume_text = std::make_unique<scene::text>();;
45  options_text = std::make_unique<scene::text>();;
46  main_menu_text = std::make_unique<scene::text>();;
47  quit_text = std::make_unique<scene::text>();;
48 
49  // Set content of menu item texts
50  resume_text->set_content(get_string(ctx, "pause_menu_resume"));
51  options_text->set_content(get_string(ctx, "pause_menu_options"));
52  main_menu_text->set_content(get_string(ctx, "pause_menu_main_menu"));
53  quit_text->set_content(get_string(ctx, "pause_menu_quit"));
54 
55  // Build list of menu item texts
56  ctx.menu_item_texts.push_back({resume_text.get(), nullptr});
57  ctx.menu_item_texts.push_back({options_text.get(), nullptr});
58  ctx.menu_item_texts.push_back({main_menu_text.get(), nullptr});
59  ctx.menu_item_texts.push_back({quit_text.get(), nullptr});
60 
61  // Init menu item index
63 
66  ::menu::align_text(ctx, true, false);
69 
70  // Construct menu item callbacks
71  auto select_resume_callback = [&ctx]()
72  {
73  // Disable unpause control
74  //ctx.controls["pause"]->set_activated_callback(nullptr);
75 
76  // Disable menu controls
77  ctx.function_queue.push(std::bind(::disable_menu_controls, std::ref(ctx)));
78 
79  auto resume_paused_state = [&ctx]()
80  {
81  ctx.function_queue.push
82  (
83  [&ctx]()
84  {
85  ctx.state_machine.pop();
87  }
88  );
89  };
90 
91  // Fade out pause menu then resume paused state
92  ::menu::fade_out(ctx, resume_paused_state);
94  };
95  auto select_options_callback = [&ctx]()
96  {
97  // Disable unpause control
98  //ctx.controls["pause"]->set_activated_callback(nullptr);
99 
100  // Disable menu controls
101  ctx.function_queue.push(std::bind(::disable_menu_controls, std::ref(ctx)));
102 
103  // Fade out pause menu then open options menu
105  (
106  ctx,
107  [&ctx]()
108  {
109  // Queue change to options menu state
110  ctx.function_queue.push
111  (
112  [&ctx]()
113  {
114  ctx.state_machine.pop();
115  ctx.state_machine.emplace(std::make_unique<options_menu_state>(ctx));
116  }
117  );
118  }
119  );
120  };
121  auto select_main_menu_callback = [&ctx]()
122  {
123  // Disable unpause control
124  //ctx.controls["pause"]->set_activated_callback(nullptr);
125 
126  // Disable menu controls
127  ctx.function_queue.push(std::bind(::disable_menu_controls, std::ref(ctx)));
128 
129  // Clear resume callback
130  ctx.resume_callback = nullptr;
131 
132  auto fade_out_callback = [&ctx]()
133  {
134  // Queue change to main menu state
135  ctx.function_queue.push
136  (
137  [&ctx]()
138  {
139  //ctx.menu_bg_billboard->set_active(false);
140  ctx.state_machine.pop();
141  ctx.state_machine.pop();
142  ctx.state_machine.emplace(std::make_unique<main_menu_state>(ctx, true));
143  }
144  );
145  };
146 
147  // Fade out pause menu
148  ::menu::fade_out(ctx, nullptr);
149 
150  // Fade out to black then return to main menu
151  ctx.fade_transition_color->set({0, 0, 0});
152  ctx.fade_transition->transition(config::quit_fade_out_duration, false, ease<float>::out_cubic, false, fade_out_callback);
153  };
154  auto select_quit_callback = [&ctx]()
155  {
156  // Disable unpause control
157  //ctx.controls["pause"]->set_activated_callback(nullptr);
158 
159  // Disable menu controls
160  ctx.function_queue.push(std::bind(::disable_menu_controls, std::ref(ctx)));
161 
162  // Clear paused state
163  //ctx.paused_state.reset();
164 
165  // Fade out pause menu
166  ::menu::fade_out(ctx, nullptr);
167 
168  // Fade out to black then quit
169  ctx.fade_transition_color->set({0, 0, 0});
170  ctx.fade_transition->transition(config::quit_fade_out_duration, false, ease<float>::out_cubic, false, [&ctx](){ctx.closed=true;});
171  };
172 
173  // Build list of menu select callbacks
174  ctx.menu_select_callbacks.push_back(select_resume_callback);
175  ctx.menu_select_callbacks.push_back(select_options_callback);
176  ctx.menu_select_callbacks.push_back(select_main_menu_callback);
177  ctx.menu_select_callbacks.push_back(select_quit_callback);
178 
179  // Build list of menu right callbacks
180  ctx.menu_right_callbacks.resize(4, nullptr);
181 
182  // Build list of menu left callbacks
183  ctx.menu_left_callbacks.resize(4, nullptr);
184 
185  // Set menu back callback
186  ctx.menu_back_callback = select_resume_callback;
187 
188  // Queue control setup
189  ctx.function_queue.push
190  (
191  [&ctx, select_resume_callback]()
192  {
193  // Enable unpause control
194  //ctx.controls["pause"]->set_activated_callback(select_resume_callback);
195 
196  // Enable menu controls
198  }
199  );
200 
201  // Fade in menu and menu BG
202  ::menu::fade_in(ctx, nullptr);
203  //if (!ctx.menu_bg_billboard->is_active())
205 
206  // Save colony
207  //::save::colony(ctx);
208 
209  debug::log_trace("Entered pause menu state");
210 }
211 
213 {
214  debug::log_trace("Exiting pause menu state...");
215 
216  // Destruct menu
222 
223  debug::log_trace("Exited pause menu state");
224 }
Abstract base class for game states.
Definition: game-state.hpp:29
::game & ctx
Definition: game-state.hpp:44
Definition: game.hpp:121
std::vector< std::function< void()> > menu_left_callbacks
Definition: game.hpp:348
std::vector< std::function< void()> > menu_right_callbacks
Definition: game.hpp:349
hsm::state_machine< game_state > state_machine
Definition: game.hpp:299
std::unique_ptr< screen_transition > fade_transition
Definition: game.hpp:371
std::vector< std::function< void()> > menu_select_callbacks
Definition: game.hpp:347
std::vector< std::tuple< scene::text *, scene::text * > > menu_item_texts
Definition: game.hpp:351
std::queue< std::function< void()> > function_queue
Definition: game.hpp:303
std::shared_ptr< render::matvar_fvec3 > fade_transition_color
Definition: game.hpp:372
std::function< void()> menu_back_callback
Definition: game.hpp:350
bool closed
Definition: game.hpp:167
std::function< void()> resume_callback
Definition: game.hpp:300
pause_menu_state(::game &ctx)
void enable_menu_controls(::game &ctx)
void disable_menu_controls(::game &ctx)
log_message< log_message_severity::trace, Args... > log_trace
Formats and logs a trace message.
Definition: log.hpp:88
User-defined literals for compile-time string hashing.
Definition: fnv1a.hpp:232
void fade_in_bg(::game &ctx)
Definition: menu.cpp:276
void init_menu_item_index(::game &ctx, hash::fnv1a32_t menu_name)
Definition: menu.cpp:31
void update_text_color(::game &ctx)
Definition: menu.cpp:59
void clear_callbacks(::game &ctx)
Definition: menu.cpp:197
void delete_animations(::game &ctx)
Definition: menu.cpp:191
void align_text(::game &ctx, bool center, bool has_back, float anchor_y)
Definition: menu.cpp:73
void fade_out_bg(::game &ctx)
Definition: menu.cpp:283
void setup_animations(::game &ctx)
Definition: menu.cpp:206
void add_text_to_ui(::game &ctx)
Definition: menu.cpp:166
void fade_out(::game &ctx, const std::function< void()> &end_callback)
Definition: menu.cpp:263
void update_text_font(::game &ctx)
Definition: menu.cpp:44
void fade_in(::game &ctx, const std::function< void()> &end_callback)
Definition: menu.cpp:233
void remove_text_from_ui(::game &ctx)
Definition: menu.cpp:176
void delete_text(::game &ctx)
Definition: menu.cpp:186
std::string get_string(const ::game &ctx, hash::fnv1a32_t key)
Returns a localized string.
Definition: strings.cpp:23
Container for templated easing functions.
Definition: ease.hpp:71