uggly main menu
This commit is contained in:
32
include/client/ClientApp.h
Normal file
32
include/client/ClientApp.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Core/ApplicationComponent.hpp>
|
||||
|
||||
namespace Nz {
|
||||
|
||||
class Window;
|
||||
class Canvas;
|
||||
class StateMachine;
|
||||
|
||||
} // namespace Nz
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class StateData;
|
||||
|
||||
class ClientApp : public Nz::ApplicationComponent {
|
||||
public:
|
||||
ClientApp(Nz::ApplicationBase& app);
|
||||
~ClientApp();
|
||||
|
||||
void Update(Nz::Time elapsedTime) override;
|
||||
|
||||
private:
|
||||
Nz::Window* m_Window;
|
||||
std::unique_ptr<Nz::StateMachine> m_StateMachine;
|
||||
std::shared_ptr<StateData> m_StateData;
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
75
include/client/states/AbstractState.h
Normal file
75
include/client/states/AbstractState.h
Normal file
@@ -0,0 +1,75 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Core/Components/DisabledComponent.hpp>
|
||||
#include <Nazara/Core/State.hpp>
|
||||
#include <Nazara/Graphics/RenderTarget.hpp>
|
||||
#include <Nazara/Widgets/BaseWidget.hpp>
|
||||
#include <client/states/StateData.h>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class AbstractState : public Nz::State, public std::enable_shared_from_this<AbstractState> {
|
||||
public:
|
||||
AbstractState(std::shared_ptr<StateData> stateData);
|
||||
~AbstractState();
|
||||
|
||||
protected:
|
||||
template <typename T, typename... Args>
|
||||
void ConnectSignal(T& signal, Args&&... args) {
|
||||
m_CleanupFunctions.emplace_back(
|
||||
[connection = signal.Connect(std::forward<Args>(args)...)]() mutable { connection.Disconnect(); });
|
||||
}
|
||||
|
||||
template <typename T, typename... Args>
|
||||
T* CreateWidget(Args&&... args) {
|
||||
T* widget = m_StateData->m_Canvas->Add<T>(std::forward<Args>(args)...);
|
||||
|
||||
auto& entry = m_Widgets.emplace_back();
|
||||
entry.m_Widget = widget;
|
||||
|
||||
if (!m_IsVisible)
|
||||
entry.m_Widget->Hide();
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
void DestroyWidget(Nz::BaseWidget* widget);
|
||||
|
||||
StateData& GetStateData() {
|
||||
return *m_StateData;
|
||||
}
|
||||
|
||||
const StateData& GetStateData() const {
|
||||
return *m_StateData;
|
||||
}
|
||||
|
||||
const std::shared_ptr<StateData>& GetStateDataPtr() {
|
||||
return m_StateData;
|
||||
}
|
||||
|
||||
void Enter(Nz::StateMachine& fsm) override;
|
||||
void Leave(Nz::StateMachine& fsm) override;
|
||||
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
|
||||
|
||||
virtual void LayoutWidgets() {}
|
||||
|
||||
private:
|
||||
NazaraSlot(Nz::RenderTarget, OnRenderTargetSizeChange, m_OnTargetChangeSizeSlot);
|
||||
|
||||
struct WidgetEntry {
|
||||
Nz::BaseWidget* m_Widget;
|
||||
bool m_WasVisible = true;
|
||||
};
|
||||
|
||||
std::shared_ptr<StateData> m_StateData;
|
||||
std::vector<std::function<void()>> m_CleanupFunctions;
|
||||
std::vector<WidgetEntry> m_Widgets;
|
||||
bool m_IsVisible;
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
28
include/client/states/CreateServerState.h
Normal file
28
include/client/states/CreateServerState.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Widgets/ButtonWidget.hpp>
|
||||
#include <client/states/AbstractState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class CreateServerState : public AbstractState {
|
||||
public:
|
||||
CreateServerState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState);
|
||||
~CreateServerState();
|
||||
|
||||
private:
|
||||
Nz::ButtonWidget* m_CreateServerButton;
|
||||
Nz::ButtonWidget* m_BackButton;
|
||||
std::shared_ptr<AbstractState> m_NextState;
|
||||
std::shared_ptr<AbstractState> m_PreviousState;
|
||||
|
||||
void LayoutWidgets() override;
|
||||
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
|
||||
|
||||
void OnCreateServerPressed();
|
||||
void OnBackPressed();
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
28
include/client/states/JoinServerState.h
Normal file
28
include/client/states/JoinServerState.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Widgets/ButtonWidget.hpp>
|
||||
#include <client/states/AbstractState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class JoinServerState : public AbstractState {
|
||||
public:
|
||||
JoinServerState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState);
|
||||
~JoinServerState();
|
||||
|
||||
private:
|
||||
Nz::ButtonWidget* m_JoinServerButton;
|
||||
Nz::ButtonWidget* m_BackButton;
|
||||
std::shared_ptr<AbstractState> m_NextState;
|
||||
std::shared_ptr<AbstractState> m_PreviousState;
|
||||
|
||||
void LayoutWidgets() override;
|
||||
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
|
||||
|
||||
void OnJoinServerPressed();
|
||||
void OnBackPressed();
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
31
include/client/states/MainMenuState.h
Normal file
31
include/client/states/MainMenuState.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Widgets/ButtonWidget.hpp>
|
||||
#include <client/states/AbstractState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class MainMenuState : public AbstractState {
|
||||
public:
|
||||
MainMenuState(std::shared_ptr<StateData>);
|
||||
~MainMenuState();
|
||||
|
||||
private:
|
||||
Nz::ButtonWidget* m_JoinServerButton;
|
||||
Nz::ButtonWidget* m_CreateServerButton;
|
||||
Nz::ButtonWidget* m_OptionButton;
|
||||
Nz::ButtonWidget* m_QuitButton;
|
||||
std::shared_ptr<AbstractState> m_NextState;
|
||||
|
||||
void LayoutWidgets() override;
|
||||
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
|
||||
|
||||
void OnJoinServerPressed();
|
||||
void OnCreateServerPressed();
|
||||
void OnOptionPressed();
|
||||
void OnQuitPressed();
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
28
include/client/states/OptionState.h
Normal file
28
include/client/states/OptionState.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Widgets/ButtonWidget.hpp>
|
||||
#include <client/states/AbstractState.h>
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class OptionState : public AbstractState {
|
||||
public:
|
||||
OptionState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState);
|
||||
~OptionState();
|
||||
|
||||
private:
|
||||
Nz::ButtonWidget* m_OptionButton;
|
||||
Nz::ButtonWidget* m_BackButton;
|
||||
std::shared_ptr<AbstractState> m_NextState;
|
||||
std::shared_ptr<AbstractState> m_PreviousState;
|
||||
|
||||
void LayoutWidgets() override;
|
||||
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
|
||||
|
||||
void OnOptionPressed();
|
||||
void OnBackPressed();
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
34
include/client/states/StateData.h
Normal file
34
include/client/states/StateData.h
Normal file
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#include <Nazara/Core/EnttWorld.hpp>
|
||||
#include <Nazara/Platform/Window.hpp>
|
||||
#include <Nazara/Renderer/WindowSwapchain.hpp>
|
||||
#include <Nazara/Widgets/Canvas.hpp>
|
||||
#include <entt/fwd.hpp>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
|
||||
namespace Nz {
|
||||
|
||||
class ApplicationBase;
|
||||
class RenderTarget;
|
||||
|
||||
} // namespace Nz
|
||||
|
||||
namespace blitz {
|
||||
namespace client {
|
||||
|
||||
class ClientApp;
|
||||
|
||||
struct StateData {
|
||||
std::optional<Nz::Canvas> m_Canvas;
|
||||
std::shared_ptr<Nz::RenderTarget> m_RenderTarget;
|
||||
ClientApp* m_AppComponent;
|
||||
Nz::ApplicationBase* m_App;
|
||||
Nz::EnttWorld* m_World;
|
||||
Nz::Window* m_Window;
|
||||
Nz::WindowSwapchain* m_Swapchain;
|
||||
};
|
||||
|
||||
} // namespace client
|
||||
} // namespace blitz
|
||||
Reference in New Issue
Block a user