More Pause Menu Boilerplate
This commit is contained in:
@@ -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:
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
49
Client/src/Client/PauseMenu.cpp
Normal file
49
Client/src/Client/PauseMenu.cpp
Normal 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; }
|
||||
}
|
||||
|
Reference in New Issue
Block a user