More Pause Menu Boilerplate

This commit is contained in:
2025-04-09 04:09:55 -05:00
parent c40c7c3cdf
commit 79d8720282
2 changed files with 73 additions and 27 deletions

View File

@@ -8,39 +8,38 @@ namespace CaveGame::Client
{
using namespace JUI::UDimLiterals;
/// CaveGame's pause menu is implemented as a JUI::Rect overlay, parented to the GameSession::HUD().
class PauseMenuWidget : public JUI::Rect {
public:
Event<> OnSettingsButtonPressed;
Event<> OnQuitButtonPressed;
Event<> OnResumeButtonPressed;
Event<> OnSettingsButtonPressed;
Event<> OnQuitButtonPressed;
PauseMenuWidget() {
this->Size({100_percent, 100_percent}); // Full Screen.
this->BGColor({128, 128, 128, 128}); // Transparent Gray.
/// The default constructor initializes the pause menu, subordinate widgets, and lays out the visual properties of each.
PauseMenuWidget();
button_box = new JUI::Rect(this);
button_box->Size({150_px, 150_px});
button_list = new JUI::VerticalListLayout(button_box);
resume_btn = new JUI::TextButton(button_list);
resume_btn->SetContent("Resume");
/// Construct the Pause menu by specifying it's parent widget.
/// It is safe to assume the parent will **ALWAYS** be the Scene* instance GameSession::hud.
explicit PauseMenuWidget(Widget* parent);
settings_btn = new JUI::TextButton(button_list);
settings_btn->SetContent("Settings");
// TODO: This function signature will return void in the next JUI release.
void ObserveMouseInput(JUI::MouseButton btn, bool pressed) override;
quit_btn = new JUI::TextButton(button_list);
quit_btn->SetContent("Save & Exit World");
}
/// Switches the PauseMenu to it's alternate state, which is either "Open" or "Closed".
void Toggle();
explicit PauseMenuWidget(Widget* parent) : PauseMenuWidget() {
this->Parent(parent);
}
/// Sets the state of the PauseMenu.
void SetOpen(bool value);
void Toggle() {
is_open = !is_open;
this->Visible(is_open);
}
/// @return The state of the PauseMenu.
[[nodiscard]] bool GetOpen() const;
Q
/// Sets the state of the PauseMenu to "Open".
void Open() { SetOpen(true); }
/// Sets the state of the Paus
void Close() { SetOpen(false); }
protected:
JUI::Rect* button_box;
JUI::VerticalListLayout* button_list;
@@ -51,6 +50,4 @@ namespace CaveGame::Client
bool is_open;
private:
};
}
}

View File

@@ -0,0 +1,49 @@
#include <Client/PauseMenu.hpp>
namespace CaveGame::Client
{
PauseMenuWidget::PauseMenuWidget() {
this->Size({100_percent, 100_percent}); // Full Screen.
this->BGColor({128, 128, 128, 128}); // Transparent Gray.
button_box = new JUI::Rect(this);
button_box->Size({150_px, 150_px});
button_list = new JUI::VerticalListLayout(button_box);
resume_btn = new JUI::TextButton(button_list);
resume_btn->SetContent("Resume");
settings_btn = new JUI::TextButton(button_list);
settings_btn->SetContent("Settings");
quit_btn = new JUI::TextButton(button_list);
quit_btn->SetContent("Save & Exit World");
// Default-initialize as closed.
this->Close();
}
PauseMenuWidget::PauseMenuWidget(Widget *parent): PauseMenuWidget() {
this->Parent(parent);
}
void PauseMenuWidget::ObserveMouseInput(JUI::MouseButton btn, bool pressed) {
if (is_open)
return Rect::ObserveMouseInput(btn, pressed);
}
void PauseMenuWidget::Toggle() {
SetOpen(!GetOpen());
}
void PauseMenuWidget::SetOpen(bool value) {
is_open = value;
this->Visible(is_open);
}
bool PauseMenuWidget::GetOpen() const { return is_open; }
}