working main menu
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -10,6 +10,8 @@ class PlayerJoinHandler : public protocol::PacketHandler {
|
||||
|
||||
NazaraSlot(network::EnetConnection, OnPlayerJoin, m_Slot);
|
||||
|
||||
NazaraSignal(OnLocalPlayerReady);
|
||||
|
||||
private:
|
||||
void Handle(const protocol::data::PlayerJoin&);
|
||||
};
|
||||
|
||||
62
include/client/states/ConnectingState.h
Normal file
62
include/client/states/ConnectingState.h
Normal 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
|
||||
@@ -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;
|
||||
|
||||
27
include/client/states/GameState.h
Normal file
27
include/client/states/GameState.h
Normal 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
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user