working main menu

This commit is contained in:
2024-08-07 11:54:09 +02:00
parent adb6dce08a
commit de6742f64d
19 changed files with 405 additions and 17 deletions

View File

@@ -17,6 +17,8 @@ class EnetServer : private NonCopyable {
void Destroy();
bool IsClosed() const;
void CloseConnection(std::uint16_t a_PeerId);
EnetConnection* GetConnection(std::uint16_t a_PeerId);

View File

@@ -1,7 +1,6 @@
#pragma once
#include <Nazara/Core/EnttWorld.hpp>
#include <atomic>
#include <blitz/network/EnetClient.h>
#include <blitz/protocol/PacketHandler.h>
@@ -18,6 +17,9 @@ class Client : private NonCopyable {
bool IsConnected();
NazaraSignal(OnClientReady);
NazaraSignal(OnClientDisconnect);
private:
EnttWorld m_World;
std::unique_ptr<network::EnetClient> m_NetworkClient;

View File

@@ -10,6 +10,8 @@ class PlayerJoinHandler : public protocol::PacketHandler {
NazaraSlot(network::EnetConnection, OnPlayerJoin, m_Slot);
NazaraSignal(OnLocalPlayerReady);
private:
void Handle(const protocol::data::PlayerJoin&);
};

View File

@@ -0,0 +1,62 @@
#pragma once
#include <Nazara/Network/IpAddress.hpp>
#include <Nazara/Widgets/ButtonWidget.hpp>
#include <Nazara/Widgets/LabelWidget.hpp>
#include <client/Client.h>
#include <client/states/AbstractState.h>
#include <queue>
namespace blitz {
namespace server {
class Server;
} // namespace server
namespace client {
class ConnectingState : public AbstractState {
public:
ConnectingState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState,
const std::string& a_Address, std::uint16_t a_Port, bool a_IntegratedServer = false);
~ConnectingState();
private:
struct ResolvingData {
bool m_HasResult = false;
Nz::Result<std::vector<Nz::IpAddress>, std::string /*error*/> m_Result = Nz::Err("");
std::string m_ServerName;
std::uint16_t m_Port;
};
ResolvingData m_ResolvingData;
bool m_IsConnected = false;
std::queue<Nz::IpAddress> m_Addresses;
Nz::MillisecondClock m_TimeoutClock;
Nz::ButtonWidget* m_BackButton;
Nz::LabelWidget* m_StatusText;
std::shared_ptr<AbstractState> m_NextState;
std::shared_ptr<AbstractState> m_PreviousState;
std::unique_ptr<Client> m_Client;
std::unique_ptr<server::Server> m_Server;
void LayoutWidgets() override;
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
void TryResolve();
void TryConnect(const Nz::IpAddress& a_ServerAddress);
void TryNextAddress();
void OnBackPressed();
void OnConnect();
void OnConnectFailed();
NazaraSlot(Client, OnClientReady, m_ClientReady);
NazaraSlot(Client, OnClientDisconnect, m_ClientDisconnect);
};
} // namespace client
} // namespace blitz

View File

@@ -1,5 +1,6 @@
#pragma once
#include <Nazara/Widgets/TextAreaWidget.hpp>
#include <Nazara/Widgets/ButtonWidget.hpp>
#include <client/states/AbstractState.h>
@@ -13,6 +14,7 @@ class CreateServerState : public AbstractState {
private:
Nz::ButtonWidget* m_CreateServerButton;
Nz::TextAreaWidget* m_InputPort;
Nz::ButtonWidget* m_BackButton;
std::shared_ptr<AbstractState> m_NextState;
std::shared_ptr<AbstractState> m_PreviousState;

View File

@@ -0,0 +1,27 @@
#pragma once
#include <client/states/AbstractState.h>
#include <memory>
namespace blitz {
namespace server {
class Server;
}
namespace client {
class Client;
class GameState : public AbstractState {
public:
GameState(std::shared_ptr<StateData> a_StateData, std::unique_ptr<Client>&& a_Client, std::unique_ptr<server::Server>&& a_Server);
~GameState();
private:
std::unique_ptr<Client> m_Client;
std::unique_ptr<server::Server> m_Server;
};
} // namespace client
} // namespace blitz

View File

@@ -1,6 +1,7 @@
#pragma once
#include <Nazara/Widgets/ButtonWidget.hpp>
#include <Nazara/Widgets/TextAreaWidget.hpp>
#include <client/states/AbstractState.h>
namespace blitz {
@@ -12,6 +13,7 @@ class JoinServerState : public AbstractState {
~JoinServerState();
private:
Nz::TextAreaWidget* m_InputAddress;
Nz::ButtonWidget* m_JoinServerButton;
Nz::ButtonWidget* m_BackButton;
std::shared_ptr<AbstractState> m_NextState;

View File

@@ -17,6 +17,8 @@ class Server {
network::EnetConnection* GetConnection(std::uint16_t a_PeerId);
bool IsClosed() const;
void CloseConnection(std::uint16_t a_PeerId);
void CloseServer();

View File

@@ -8,9 +8,9 @@ namespace server {
class Server;
class DisconectSystem {
class DisconnectSystem {
public:
DisconectSystem(entt::registry&, EnttWorld& a_World, Server& a_Server);
DisconnectSystem(entt::registry&, EnttWorld& a_World, Server& a_Server);
void Update(Nz::Time elapsedTime);