#include #include #include namespace blitz { namespace client { JoinServerState::JoinServerState(std::shared_ptr a_StateData, std::shared_ptr 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(); 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(); 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 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