99 lines
3.6 KiB
C++
99 lines
3.6 KiB
C++
#include "../Game/Systems/MainMenuSystem.h"
|
|
|
|
MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer)
|
|
: System(params)
|
|
, ImpureSystem()
|
|
, m_Renderer(renderer)
|
|
{
|
|
EVENT_SUBSCRIBE_MEMBER(m_EPressed, &MainMenuSystem::OnButtonPress);
|
|
EVENT_SUBSCRIBE_MEMBER(m_EReleased, &MainMenuSystem::OnButtonRelease);
|
|
EVENT_SUBSCRIBE_MEMBER(m_EClicked, &MainMenuSystem::OnButtonClick);
|
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &MainMenuSystem::OnInputCommand);
|
|
}
|
|
|
|
void MainMenuSystem::Update(double dt)
|
|
{
|
|
|
|
}
|
|
|
|
bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e)
|
|
{
|
|
if (e.EntityName == "ServerIdentityConnect") {
|
|
EntityWrapper entity = e.Entity;
|
|
EntityWrapper serverIdentityEntity = entity.FirstParentWithComponent("ServerIdentity");
|
|
if (serverIdentityEntity.Valid()) {
|
|
Events::ConnectRequest event;
|
|
event.IP = (std::string)serverIdentityEntity["ServerIdentity"]["IP"];
|
|
event.Port = (int)serverIdentityEntity["ServerIdentity"]["Port"];
|
|
printf("\n ----Request Server Connect----\nIP: %s\nPort: %i\n ------------------------------", event.IP, event.Port);
|
|
m_EventBroker->Publish(event);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool MainMenuSystem::OnButtonRelease(const Events::ButtonReleased& e)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
|
{
|
|
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");
|
|
if (menus == nullptr) {
|
|
return 0;
|
|
}
|
|
|
|
if (m_OpenSubMenu == EntityWrapper::Invalid) {
|
|
//No submenu is open, open one.
|
|
for (auto& menu : *menus) {
|
|
EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID);
|
|
auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner");
|
|
if (!serverListSpawner.HasComponent("Spawner")) {
|
|
return 0;
|
|
}
|
|
m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner);
|
|
Events::SearchForServers event;
|
|
m_EventBroker->Publish(event);
|
|
break;
|
|
}
|
|
|
|
} else if (!m_OpenSubMenu.HasComponent("ServerList")) {
|
|
//Menu is open, but not the right one, delete the old one and open a new one.
|
|
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
|
m_OpenSubMenu = EntityWrapper::Invalid;
|
|
|
|
for (auto& menu : *menus) {
|
|
EntityWrapper menuEntity = EntityWrapper(m_World, menu.EntityID);
|
|
auto serverListSpawner = menuEntity.FirstChildByName(e.Command + "Spawner");
|
|
if (!serverListSpawner.HasComponent("Spawner")) {
|
|
return 0;
|
|
}
|
|
m_OpenSubMenu = SpawnerSystem::Spawn(serverListSpawner, serverListSpawner);
|
|
Events::SearchForServers event;
|
|
m_EventBroker->Publish(event);
|
|
break;
|
|
}
|
|
} else {
|
|
//Serverlist submenu is open, close it.
|
|
m_World->DeleteEntity(m_OpenSubMenu.ID);
|
|
m_OpenSubMenu = EntityWrapper::Invalid;
|
|
}
|
|
} else if (e.Command == "RefreshServerList" && e.Value == 1) {
|
|
Events::SearchForServers event;
|
|
m_EventBroker->Publish(event);
|
|
}
|
|
return true;
|
|
} |