uggly main menu
This commit is contained in:
57
src/client/states/AbstractState.cpp
Normal file
57
src/client/states/AbstractState.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#include <client/states/AbstractState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
AbstractState::AbstractState(std::shared_ptr<StateData> a_StateData) : m_StateData(std::move(a_StateData)), m_IsVisible(false) {
|
||||
m_OnTargetChangeSizeSlot.Connect(
|
||||
m_StateData->m_RenderTarget->OnRenderTargetSizeChange, [this](const Nz::RenderTarget*, const Nz::Vector2ui& /*newSize*/) {
|
||||
if (m_IsVisible)
|
||||
LayoutWidgets();
|
||||
});
|
||||
}
|
||||
|
||||
AbstractState::~AbstractState() {
|
||||
for (const auto& cleanupFunc : m_CleanupFunctions)
|
||||
cleanupFunc();
|
||||
|
||||
for (WidgetEntry& entry : m_Widgets)
|
||||
entry.m_Widget->Destroy();
|
||||
}
|
||||
|
||||
void AbstractState::DestroyWidget(Nz::BaseWidget* widget) {
|
||||
auto it = std::find_if(
|
||||
m_Widgets.begin(), m_Widgets.end(), [&](const WidgetEntry& widgetEntity) { return widgetEntity.m_Widget == widget; });
|
||||
assert(it != m_Widgets.end());
|
||||
|
||||
m_Widgets.erase(it);
|
||||
|
||||
widget->Destroy();
|
||||
}
|
||||
|
||||
void AbstractState::Enter(Nz::StateMachine& /*fsm*/) {
|
||||
m_IsVisible = true;
|
||||
|
||||
for (WidgetEntry& entry : m_Widgets) {
|
||||
if (entry.m_WasVisible)
|
||||
entry.m_Widget->Show();
|
||||
}
|
||||
|
||||
LayoutWidgets();
|
||||
}
|
||||
|
||||
void AbstractState::Leave(Nz::StateMachine& /*fsm*/) {
|
||||
m_IsVisible = false;
|
||||
|
||||
for (WidgetEntry& entry : m_Widgets) {
|
||||
entry.m_WasVisible = entry.m_Widget->IsVisible();
|
||||
entry.m_Widget->Hide();
|
||||
}
|
||||
}
|
||||
|
||||
bool AbstractState::Update(Nz::StateMachine& /*fsm*/, Nz::Time /*elapsedTime*/) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
73
src/client/states/CreateServerState.cpp
Normal file
73
src/client/states/CreateServerState.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <client/states/CreateServerState.h>
|
||||
|
||||
#include <Nazara/Core/StateMachine.hpp>
|
||||
#include <Nazara/TextRenderer.hpp>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
CreateServerState::CreateServerState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState) :
|
||||
AbstractState(std::move(a_StateData)), m_PreviousState(std::move(a_PreviousState)) {
|
||||
Nz::SimpleTextDrawer textDrawer;
|
||||
textDrawer.SetTextColor({0.0, 0.0, 0.0, 1.0});
|
||||
textDrawer.SetCharacterSize(75);
|
||||
|
||||
m_CreateServerButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Create Server");
|
||||
m_CreateServerButton->UpdateText(textDrawer);
|
||||
m_CreateServerButton->Resize(m_CreateServerButton->GetPreferredSize());
|
||||
m_CreateServerButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnCreateServerPressed(); });
|
||||
|
||||
m_BackButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Back");
|
||||
m_BackButton->UpdateText(textDrawer);
|
||||
m_BackButton->Resize(m_BackButton->GetPreferredSize());
|
||||
m_BackButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnBackPressed(); });
|
||||
}
|
||||
|
||||
CreateServerState::~CreateServerState() {}
|
||||
|
||||
bool CreateServerState::Update(Nz::StateMachine& fsm, Nz::Time /*elapsedTime*/) {
|
||||
if (m_NextState)
|
||||
fsm.ChangeState(std::move(m_NextState));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreateServerState::LayoutWidgets() {
|
||||
Nz::Vector2f canvasSize = GetStateData().m_Canvas->GetSize();
|
||||
Nz::Vector2f center = canvasSize / 2.f;
|
||||
|
||||
constexpr float padding = 10.f;
|
||||
|
||||
std::array<Nz::BaseWidget*, 2> widgets = {m_CreateServerButton, m_BackButton};
|
||||
|
||||
float maxWidth = 0.f;
|
||||
float totalSize = padding * (widgets.size() - 1);
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
Nz::Vector2f size = widget->GetSize();
|
||||
|
||||
maxWidth = std::max(maxWidth, size.x);
|
||||
totalSize += size.y;
|
||||
}
|
||||
|
||||
Nz::Vector2f cursor = center;
|
||||
cursor.y += totalSize / 2.f;
|
||||
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
widget->Resize({maxWidth, widget->GetHeight()});
|
||||
widget->SetPosition({0.f, cursor.y - widget->GetSize().y, 0.f});
|
||||
widget->CenterHorizontal();
|
||||
cursor.y -= widget->GetSize().y + padding;
|
||||
}
|
||||
}
|
||||
|
||||
void CreateServerState::OnCreateServerPressed() {}
|
||||
|
||||
void CreateServerState::OnBackPressed() {
|
||||
m_NextState = std::move(m_PreviousState);
|
||||
}
|
||||
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
73
src/client/states/JoinServerState.cpp
Normal file
73
src/client/states/JoinServerState.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <client/states/JoinServerState.h>
|
||||
|
||||
#include <Nazara/Core/StateMachine.hpp>
|
||||
#include <Nazara/TextRenderer.hpp>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
JoinServerState::JoinServerState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState) :
|
||||
AbstractState(std::move(a_StateData)), m_PreviousState(std::move(a_PreviousState)) {
|
||||
Nz::SimpleTextDrawer textDrawer;
|
||||
textDrawer.SetTextColor({0.0, 0.0, 0.0, 1.0});
|
||||
textDrawer.SetCharacterSize(75);
|
||||
|
||||
m_JoinServerButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Join Server");
|
||||
m_JoinServerButton->UpdateText(textDrawer);
|
||||
m_JoinServerButton->Resize(m_JoinServerButton->GetPreferredSize());
|
||||
m_JoinServerButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnJoinServerPressed(); });
|
||||
|
||||
m_BackButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Back");
|
||||
m_BackButton->UpdateText(textDrawer);
|
||||
m_BackButton->Resize(m_BackButton->GetPreferredSize());
|
||||
m_BackButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnBackPressed(); });
|
||||
}
|
||||
|
||||
JoinServerState::~JoinServerState() {}
|
||||
|
||||
bool JoinServerState::Update(Nz::StateMachine& fsm, Nz::Time /*elapsedTime*/) {
|
||||
if (m_NextState)
|
||||
fsm.ChangeState(std::move(m_NextState));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void JoinServerState::LayoutWidgets() {
|
||||
Nz::Vector2f canvasSize = GetStateData().m_Canvas->GetSize();
|
||||
Nz::Vector2f center = canvasSize / 2.f;
|
||||
|
||||
constexpr float padding = 10.f;
|
||||
|
||||
std::array<Nz::BaseWidget*, 2> widgets = {m_JoinServerButton, m_BackButton};
|
||||
|
||||
float maxWidth = 0.f;
|
||||
float totalSize = padding * (widgets.size() - 1);
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
Nz::Vector2f size = widget->GetSize();
|
||||
|
||||
maxWidth = std::max(maxWidth, size.x);
|
||||
totalSize += size.y;
|
||||
}
|
||||
|
||||
Nz::Vector2f cursor = center;
|
||||
cursor.y += totalSize / 2.f;
|
||||
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
widget->Resize({maxWidth, widget->GetHeight()});
|
||||
widget->SetPosition({0.f, cursor.y - widget->GetSize().y, 0.f});
|
||||
widget->CenterHorizontal();
|
||||
cursor.y -= widget->GetSize().y + padding;
|
||||
}
|
||||
}
|
||||
|
||||
void JoinServerState::OnJoinServerPressed() {}
|
||||
|
||||
void JoinServerState::OnBackPressed() {
|
||||
m_NextState = std::move(m_PreviousState);
|
||||
}
|
||||
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
101
src/client/states/MainMenuState.cpp
Normal file
101
src/client/states/MainMenuState.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#include <client/states/MainMenuState.h>
|
||||
|
||||
#include <Nazara/Core/ApplicationBase.hpp>
|
||||
#include <Nazara/Core/StateMachine.hpp>
|
||||
#include <Nazara/TextRenderer.hpp>
|
||||
|
||||
#include <client/states/CreateServerState.h>
|
||||
#include <client/states/JoinServerState.h>
|
||||
#include <client/states/OptionState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
MainMenuState::MainMenuState(std::shared_ptr<StateData> a_StateData) : AbstractState(std::move(a_StateData)) {
|
||||
Nz::SimpleTextDrawer textDrawer;
|
||||
textDrawer.SetTextColor({0.0, 0.0, 0.0, 1.0});
|
||||
textDrawer.SetCharacterSize(75);
|
||||
|
||||
m_JoinServerButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Join Server");
|
||||
m_JoinServerButton->UpdateText(textDrawer);
|
||||
m_JoinServerButton->Resize(m_JoinServerButton->GetPreferredSize());
|
||||
m_JoinServerButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnJoinServerPressed(); });
|
||||
|
||||
m_CreateServerButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Create Server");
|
||||
m_CreateServerButton->UpdateText(textDrawer);
|
||||
m_CreateServerButton->Resize(m_CreateServerButton->GetPreferredSize());
|
||||
m_CreateServerButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnCreateServerPressed(); });
|
||||
|
||||
m_OptionButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Settings");
|
||||
m_OptionButton->UpdateText(textDrawer);
|
||||
m_OptionButton->Resize(m_OptionButton->GetPreferredSize());
|
||||
m_OptionButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnOptionPressed(); });
|
||||
|
||||
m_QuitButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Quit game");
|
||||
m_QuitButton->UpdateText(textDrawer);
|
||||
m_QuitButton->Resize(m_QuitButton->GetPreferredSize());
|
||||
m_QuitButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnQuitPressed(); });
|
||||
}
|
||||
|
||||
MainMenuState::~MainMenuState() {}
|
||||
|
||||
bool MainMenuState::Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) {
|
||||
if (!AbstractState::Update(fsm, elapsedTime))
|
||||
return false;
|
||||
|
||||
if (m_NextState)
|
||||
fsm.ChangeState(std::move(m_NextState));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MainMenuState::LayoutWidgets() {
|
||||
Nz::Vector2f canvasSize = GetStateData().m_Canvas->GetSize();
|
||||
Nz::Vector2f center = canvasSize / 2.f;
|
||||
|
||||
constexpr float padding = 10.f;
|
||||
|
||||
std::array<Nz::BaseWidget*, 4> widgets = {m_JoinServerButton, m_CreateServerButton, m_OptionButton, m_QuitButton};
|
||||
|
||||
float maxWidth = 0.f;
|
||||
float totalSize = padding * (widgets.size() - 1);
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
Nz::Vector2f size = widget->GetSize();
|
||||
|
||||
maxWidth = std::max(maxWidth, size.x);
|
||||
totalSize += size.y;
|
||||
}
|
||||
|
||||
Nz::Vector2f cursor = center;
|
||||
cursor.y += totalSize / 2.f;
|
||||
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
widget->Resize({maxWidth, widget->GetHeight()});
|
||||
widget->SetPosition({0.f, cursor.y - widget->GetSize().y, 0.f});
|
||||
widget->CenterHorizontal();
|
||||
cursor.y -= widget->GetSize().y + padding;
|
||||
}
|
||||
}
|
||||
|
||||
void MainMenuState::OnJoinServerPressed() {
|
||||
m_NextState = std::make_shared<JoinServerState>(GetStateDataPtr(), shared_from_this());
|
||||
}
|
||||
|
||||
void MainMenuState::OnCreateServerPressed() {
|
||||
m_NextState = std::make_shared<CreateServerState>(GetStateDataPtr(), shared_from_this());
|
||||
}
|
||||
|
||||
void MainMenuState::OnOptionPressed() {
|
||||
m_NextState = std::make_shared<OptionState>(GetStateDataPtr(), shared_from_this());
|
||||
}
|
||||
|
||||
void MainMenuState::OnQuitPressed() {
|
||||
GetStateData().m_App->Quit();
|
||||
}
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
73
src/client/states/OptionState.cpp
Normal file
73
src/client/states/OptionState.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <client/states/OptionState.h>
|
||||
|
||||
#include <Nazara/Core/StateMachine.hpp>
|
||||
#include <Nazara/TextRenderer.hpp>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
OptionState::OptionState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState) :
|
||||
AbstractState(std::move(a_StateData)), m_PreviousState(std::move(a_PreviousState)) {
|
||||
Nz::SimpleTextDrawer textDrawer;
|
||||
textDrawer.SetTextColor({0.0, 0.0, 0.0, 1.0});
|
||||
textDrawer.SetCharacterSize(75);
|
||||
|
||||
m_OptionButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Settings");
|
||||
m_OptionButton->UpdateText(textDrawer);
|
||||
m_OptionButton->Resize(m_OptionButton->GetPreferredSize());
|
||||
m_OptionButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnOptionPressed(); });
|
||||
|
||||
m_BackButton = CreateWidget<Nz::ButtonWidget>();
|
||||
textDrawer.SetText("Back");
|
||||
m_BackButton->UpdateText(textDrawer);
|
||||
m_BackButton->Resize(m_BackButton->GetPreferredSize());
|
||||
m_BackButton->OnButtonTrigger.Connect([this](const Nz::ButtonWidget*) { OnBackPressed(); });
|
||||
}
|
||||
|
||||
OptionState::~OptionState() {}
|
||||
|
||||
void OptionState::LayoutWidgets() {
|
||||
Nz::Vector2f canvasSize = GetStateData().m_Canvas->GetSize();
|
||||
Nz::Vector2f center = canvasSize / 2.f;
|
||||
|
||||
constexpr float padding = 10.f;
|
||||
|
||||
std::array<Nz::BaseWidget*, 2> widgets = {m_OptionButton, m_BackButton};
|
||||
|
||||
float maxWidth = 0.f;
|
||||
float totalSize = padding * (widgets.size() - 1);
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
Nz::Vector2f size = widget->GetSize();
|
||||
|
||||
maxWidth = std::max(maxWidth, size.x);
|
||||
totalSize += size.y;
|
||||
}
|
||||
|
||||
Nz::Vector2f cursor = center;
|
||||
cursor.y += totalSize / 2.f;
|
||||
|
||||
for (Nz::BaseWidget* widget : widgets) {
|
||||
widget->Resize({maxWidth, widget->GetHeight()});
|
||||
widget->SetPosition({0.f, cursor.y - widget->GetSize().y, 0.f});
|
||||
widget->CenterHorizontal();
|
||||
cursor.y -= widget->GetSize().y + padding;
|
||||
}
|
||||
}
|
||||
|
||||
bool OptionState::Update(Nz::StateMachine& fsm, Nz::Time /*elapsedTime*/) {
|
||||
if (m_NextState)
|
||||
fsm.ChangeState(std::move(m_NextState));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OptionState::OnOptionPressed() {}
|
||||
|
||||
void OptionState::OnBackPressed() {
|
||||
m_NextState = std::move(m_PreviousState);
|
||||
}
|
||||
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
Reference in New Issue
Block a user