Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e0a1550acd | |||
| 7d4b9927d8 | |||
| 0ee3385e96 | |||
| d7f166b8ae |
@@ -0,0 +1,15 @@
|
|||||||
|
#ifndef Events_BecomeServerOrClient_h__
|
||||||
|
#define Events_BecomeServerOrClient_h__
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct BecomeServer : public Event { };
|
||||||
|
|
||||||
|
struct BecomeClient : public Event { };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
#include "Network/Network.h"
|
#include "Network/Network.h"
|
||||||
#include "Network/Server.h"
|
#include "Network/Server.h"
|
||||||
#include "Network/Client.h"
|
#include "Network/Client.h"
|
||||||
|
#include "Network/EBecomeServerOrClient.h"
|
||||||
|
|
||||||
// Sound
|
// Sound
|
||||||
#include "Sound/SoundManager.h"
|
#include "Sound/SoundManager.h"
|
||||||
@@ -70,6 +71,11 @@ private:
|
|||||||
bool m_IsServer = false;
|
bool m_IsServer = false;
|
||||||
|
|
||||||
int parseArgs(int argc, char* argv[]);
|
int parseArgs(int argc, char* argv[]);
|
||||||
|
|
||||||
|
EventRelay<Game, Events::BecomeServer> m_EBecomeServer;
|
||||||
|
bool OnBecomeServer(const Events::BecomeServer& e);
|
||||||
|
EventRelay<Game, Events::BecomeClient> m_EBecomeClient;
|
||||||
|
bool OnBecomeClient(const Events::BecomeClient& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Network/ESearchForServers.h"
|
#include "Network/ESearchForServers.h"
|
||||||
#include "Network/EConnectRequest.h"
|
#include "Network/EConnectRequest.h"
|
||||||
|
#include "Network/EBecomeServerOrClient.h"
|
||||||
|
|
||||||
|
|
||||||
class MainMenuSystem : public ImpureSystem
|
class MainMenuSystem : public ImpureSystem
|
||||||
|
|||||||
@@ -319,23 +319,80 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
<Entity name="ButtonPos_5">
|
||||||
</Entity>
|
|
||||||
<Entity name="Popup_Origin">
|
|
||||||
<Components>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="-0.103822395" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children>
|
|
||||||
<Entity name="PlaySpawner">
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Spawner>
|
<c:Transform>
|
||||||
<EntityFile>Schema/Entities/ServerList.xml</EntityFile>
|
<Position X="0" Y="-0.280000001" Z="0"/>
|
||||||
</c:Spawner>
|
</c:Transform>
|
||||||
<c:Transform/>
|
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children>
|
||||||
|
<Entity name="Button_5">
|
||||||
|
<Components>
|
||||||
|
<c:Button/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
|
||||||
|
<BlurBackground>true</BlurBackground>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.392156869" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.200000003" Y="0.0500000007" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Text">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>Host</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Alignment>
|
||||||
|
<Right/>
|
||||||
|
</Alignment>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0920000002" Y="-0.0150000006" Z="0.00499999989"/>
|
||||||
|
<Scale X="0.0199999996" Y="0.0199999996" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ButtonCorner_Origin">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="TopRight">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0970000029" Y="0.0220000017" Z="0.00499999989"/>
|
||||||
|
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BottomRight">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0970000029" Y="-0.0219999999" Z="0.00499999989"/>
|
||||||
|
<Orientation X="0" Y="0" Z="4.71199989"/>
|
||||||
|
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
+6087
-6008
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,8 @@ Server::Server(World* world, EventBroker* eventBroker, int port)
|
|||||||
port = config->Get<float>("Networking.Port", 27666);
|
port = config->Get<float>("Networking.Port", 27666);
|
||||||
}
|
}
|
||||||
m_Port = port;
|
m_Port = port;
|
||||||
LOG_INFO("Server initialized and bound to port %i", port);
|
printf("Server initialized and bound to port %i\n", port);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Server::~Server()
|
Server::~Server()
|
||||||
|
|||||||
+44
-17
@@ -58,7 +58,6 @@ Game::Game(int argc, char* argv[])
|
|||||||
ResourceManager::RegisterType<EntityFile>("EntityFile");
|
ResourceManager::RegisterType<EntityFile>("EntityFile");
|
||||||
ResourceManager::RegisterType<EntityXMLFile>("EntityXMLFile");
|
ResourceManager::RegisterType<EntityXMLFile>("EntityXMLFile");
|
||||||
ResourceManager::RegisterType<Font>("FontFile");
|
ResourceManager::RegisterType<Font>("FontFile");
|
||||||
|
|
||||||
m_Config = ResourceManager::Load<ConfigFile>("Config.ini");
|
m_Config = ResourceManager::Load<ConfigFile>("Config.ini");
|
||||||
ResourceManager::UseThreading = m_Config->Get<bool>("Multithreading.ResourceLoading", true);
|
ResourceManager::UseThreading = m_Config->Get<bool>("Multithreading.ResourceLoading", true);
|
||||||
DisableMemoryPool::Value = m_Config->Get<bool>("Debug.DisableMemoryPool", false);
|
DisableMemoryPool::Value = m_Config->Get<bool>("Debug.DisableMemoryPool", false);
|
||||||
@@ -66,6 +65,8 @@ Game::Game(int argc, char* argv[])
|
|||||||
|
|
||||||
// Create the core event broker
|
// Create the core event broker
|
||||||
m_EventBroker = new EventBroker();
|
m_EventBroker = new EventBroker();
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EBecomeServer, &Game::OnBecomeServer);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EBecomeClient, &Game::OnBecomeClient);
|
||||||
|
|
||||||
// Create the renderer
|
// Create the renderer
|
||||||
m_Renderer = new Renderer(m_EventBroker, m_Config);
|
m_Renderer = new Renderer(m_EventBroker, m_Config);
|
||||||
@@ -76,7 +77,7 @@ Game::Game(int argc, char* argv[])
|
|||||||
0,
|
0,
|
||||||
m_Config->Get<int>("Video.Width", 1280),
|
m_Config->Get<int>("Video.Width", 1280),
|
||||||
m_Config->Get<int>("Video.Height", 720)
|
m_Config->Get<int>("Video.Height", 720)
|
||||||
));
|
));
|
||||||
m_Renderer->Initialize();
|
m_Renderer->Initialize();
|
||||||
//m_Renderer->Camera()->SetFOV(glm::radians(m_Config->Get<float>("Video.FOV", 90.f)));
|
//m_Renderer->Camera()->SetFOV(glm::radians(m_Config->Get<float>("Video.FOV", 90.f)));
|
||||||
m_RenderFrame = new RenderFrame();
|
m_RenderFrame = new RenderFrame();
|
||||||
@@ -99,21 +100,7 @@ Game::Game(int argc, char* argv[])
|
|||||||
// Create the sound manager
|
// Create the sound manager
|
||||||
m_SoundManager = new SoundManager(m_World, m_EventBroker);
|
m_SoundManager = new SoundManager(m_World, m_EventBroker);
|
||||||
|
|
||||||
// Initialize network
|
|
||||||
if (m_Config->Get<bool>("Networking.StartNetwork", false)) {
|
|
||||||
if (m_IsServer) {
|
|
||||||
m_NetworkServer = new Server(m_World, m_EventBroker, m_NetworkPort);
|
|
||||||
m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " SERVER");
|
|
||||||
} else if (m_IsClient) {
|
|
||||||
m_NetworkClient = new Client(m_World, m_EventBroker, std::make_unique<MultiplayerSnapshotFilter>(m_EventBroker));
|
|
||||||
m_NetworkClient->Connect(m_NetworkAddress, m_NetworkPort);
|
|
||||||
m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " CLIENT");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If network is disabled, pretend we're a server
|
|
||||||
m_IsClient = true;
|
|
||||||
m_IsServer = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create Octrees
|
// Create Octrees
|
||||||
// TODO: Perhaps the world bounds should be set in some non-arbitrary way instead of this.
|
// TODO: Perhaps the world bounds should be set in some non-arbitrary way instead of this.
|
||||||
@@ -188,6 +175,8 @@ Game::~Game()
|
|||||||
delete m_OctreeCollision;
|
delete m_OctreeCollision;
|
||||||
delete m_OctreeTrigger;
|
delete m_OctreeTrigger;
|
||||||
delete m_SoundManager;
|
delete m_SoundManager;
|
||||||
|
m_EventBroker->Unsubscribe(m_EBecomeServer);
|
||||||
|
m_EventBroker->Unsubscribe(m_EBecomeClient);
|
||||||
if (m_NetworkClient != nullptr) {
|
if (m_NetworkClient != nullptr) {
|
||||||
delete m_NetworkClient;
|
delete m_NetworkClient;
|
||||||
}
|
}
|
||||||
@@ -210,6 +199,7 @@ void Game::Tick()
|
|||||||
double dt = currentTime - m_LastTime;
|
double dt = currentTime - m_LastTime;
|
||||||
m_LastTime = currentTime;
|
m_LastTime = currentTime;
|
||||||
|
|
||||||
|
m_EventBroker->Process<Game>();
|
||||||
// Handle input in a weird looking but responsive way
|
// Handle input in a weird looking but responsive way
|
||||||
m_EventBroker->Process<InputManager>();
|
m_EventBroker->Process<InputManager>();
|
||||||
m_EventBroker->Swap();
|
m_EventBroker->Swap();
|
||||||
@@ -284,3 +274,40 @@ int Game::parseArgs(int argc, char* argv[])
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Game::OnBecomeServer(const Events::BecomeServer& e)
|
||||||
|
{
|
||||||
|
|
||||||
|
// if (m_IsServer) {
|
||||||
|
// m_NetworkServer = new Server(m_World, m_EventBroker, m_NetworkPort);
|
||||||
|
// m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " SERVER");
|
||||||
|
// } else if (m_IsClient) {
|
||||||
|
// m_NetworkClient = new Client(m_World, m_EventBroker, std::make_unique<MultiplayerSnapshotFilter>(m_EventBroker));
|
||||||
|
// m_NetworkClient->Connect(m_NetworkAddress, m_NetworkPort);
|
||||||
|
// m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " CLIENT");
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (m_NetworkServer != nullptr) {
|
||||||
|
delete m_NetworkServer;
|
||||||
|
}
|
||||||
|
if (m_NetworkClient != nullptr) {
|
||||||
|
delete m_NetworkClient;
|
||||||
|
}
|
||||||
|
m_NetworkServer = new Server(m_World, m_EventBroker, m_NetworkPort);
|
||||||
|
m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " SERVER");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Game::OnBecomeClient(const Events::BecomeClient& e)
|
||||||
|
{
|
||||||
|
if (m_NetworkServer != nullptr) {
|
||||||
|
delete m_NetworkServer;
|
||||||
|
}
|
||||||
|
if (m_NetworkClient != nullptr) {
|
||||||
|
delete m_NetworkClient;
|
||||||
|
}
|
||||||
|
m_NetworkClient = new Client(m_World, m_EventBroker, std::make_unique<MultiplayerSnapshotFilter>(m_EventBroker));
|
||||||
|
m_NetworkClient->Connect(m_NetworkAddress, m_NetworkPort);
|
||||||
|
m_Renderer->SetWindowTitle(m_Renderer->WindowTitle() + " CLIENT");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e)
|
|||||||
if (e.EntityName == "ServerIdentityConnect") {
|
if (e.EntityName == "ServerIdentityConnect") {
|
||||||
EntityWrapper entity = e.Entity;
|
EntityWrapper entity = e.Entity;
|
||||||
EntityWrapper serverIdentityEntity = entity.FirstParentWithComponent("ServerIdentity");
|
EntityWrapper serverIdentityEntity = entity.FirstParentWithComponent("ServerIdentity");
|
||||||
if(serverIdentityEntity.Valid()) {
|
if (serverIdentityEntity.Valid()) {
|
||||||
Events::ConnectRequest event;
|
Events::ConnectRequest event;
|
||||||
event.IP = (std::string)serverIdentityEntity["ServerIdentity"]["IP"];
|
event.IP = (std::string)serverIdentityEntity["ServerIdentity"]["IP"];
|
||||||
event.Port = (int)serverIdentityEntity["ServerIdentity"]["Port"];
|
event.Port = (int)serverIdentityEntity["ServerIdentity"]["Port"];
|
||||||
@@ -44,7 +44,13 @@ bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e)
|
|||||||
|
|
||||||
bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
||||||
{
|
{
|
||||||
if(e.Command == "Play" && e.Value == 1) {
|
if (e.Command == "Host" && e.Value == 1) {
|
||||||
|
printf("Sending event...\n");
|
||||||
|
m_EventBroker->Publish(Events::BecomeServer());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (e.Command == "Play" && e.Value == 1) {
|
||||||
|
m_EventBroker->Publish(Events::BecomeClient());
|
||||||
auto menus = m_World->GetComponents("Menu");
|
auto menus = m_World->GetComponents("Menu");
|
||||||
if (menus == nullptr) {
|
if (menus == nullptr) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -64,7 +70,7 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(!m_OpenSubMenu.HasComponent("ServerList")) {
|
} else if (!m_OpenSubMenu.HasComponent("ServerList")) {
|
||||||
//Menu is open, but not the right one, delete the old one and open a new one.
|
//Menu is open, but not the right one, delete the old one and open a new one.
|
||||||
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
||||||
m_OpenSubMenu = EntityWrapper::Invalid;
|
m_OpenSubMenu = EntityWrapper::Invalid;
|
||||||
@@ -85,7 +91,7 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
|||||||
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
||||||
m_OpenSubMenu = EntityWrapper::Invalid;
|
m_OpenSubMenu = EntityWrapper::Invalid;
|
||||||
}
|
}
|
||||||
} else if (e.Command == "RefreshServerList" && e.Value == 1){
|
} else if (e.Command == "RefreshServerList" && e.Value == 1) {
|
||||||
Events::SearchForServers event;
|
Events::SearchForServers event;
|
||||||
m_EventBroker->Publish(event);
|
m_EventBroker->Publish(event);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user