Add toggling of network splitscreen in online menu

This commit is contained in:
Benau 2018-03-22 01:38:29 +08:00
parent 6fca802c8e
commit 152dfe7c55
3 changed files with 51 additions and 10 deletions

View File

@ -4,9 +4,22 @@
<header text_align="center" width="80%" align="center" text="Online"/>
<spacer height="15" width="10"/>
<button id="user-id" width="20%" height="fit" align="center"/>
<spacer height="20"/>
<box width="50%" height="10%" layout="vertical-row" align="center">
<div width="100%" height="fit" layout="horizontal-row" >
<label proportion="3" I18N="In the networking menu"
text="Enable splitscreen or handicap players" text_align="right"/>
<spacer width="50"/>
<div proportion="1" height="fit" layout="horizontal-row">
<checkbox id="enable-splitscreen" align="center" />
</div>
</div>
</box>
<spacer height="15" width="10"/>
<icon id="logo" align="center" proportion="4" width="100%" icon="gui/logo.png"/>
<spacer height="15" width="10"/>
<buttonbar id="menu_toprow" proportion="3" width="90%" align="center">

View File

@ -20,16 +20,11 @@
#include "config/player_manager.hpp"
#include "config/user_config.hpp"
#include "graphics/irr_driver.hpp"
#include "guiengine/scalable_font.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
#include "guiengine/widgets/label_widget.hpp"
#include "guiengine/widgets/list_widget.hpp"
#include "guiengine/widgets/ribbon_widget.hpp"
#include "input/device_manager.hpp"
#include "input/input_manager.hpp"
#include "input/keyboard_device.hpp"
#include "io/file_manager.hpp"
#include "main_loop.hpp"
#include "network/network_config.hpp"
#include "online/request_manager.hpp"
#include "states_screens/online_lan.hpp"
@ -39,10 +34,8 @@
#include "states_screens/state_manager.hpp"
#include "states_screens/user_screen.hpp"
#include "states_screens/dialogs/message_dialog.hpp"
#include "tracks/track_manager.hpp"
#include "utils/string_utils.hpp"
#include <string>
@ -64,6 +57,9 @@ OnlineScreen::OnlineScreen() : Screen("online/online.stkgui")
void OnlineScreen::loadedFromFile()
{
m_enable_splitscreen = getWidget<CheckBoxWidget>("enable-splitscreen");
assert(m_enable_splitscreen);
m_enable_splitscreen->setState(false);
} // loadedFromFile
// ----------------------------------------------------------------------------
@ -102,6 +98,15 @@ void OnlineScreen::init()
RibbonWidget* r = getWidget<RibbonWidget>("menu_toprow");
r->setFocusForPlayer(PLAYER_ID_GAME_MASTER);
// Pre-add a default single player profile in network
if (!m_enable_splitscreen->getState() &&
NetworkConfig::get()->getNetworkPlayers().empty())
{
NetworkConfig::get()->addNetworkPlayer(
input_manager->getDeviceManager()->getLatestUsedDevice(),
PlayerManager::getCurrentPlayer(), false/*handicap*/);
NetworkConfig::get()->doneAddingNetworkPlayers();
}
} // init
// ----------------------------------------------------------------------------
@ -148,6 +153,26 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
StateManager::get()->escapePressed();
return;
}
else if (name == "enable-splitscreen")
{
CheckBoxWidget* splitscreen = dynamic_cast<CheckBoxWidget*>(widget);
assert(splitscreen);
if (!splitscreen->getState())
{
// Default single player
NetworkConfig::get()->cleanNetworkPlayers();
NetworkConfig::get()->addNetworkPlayer(
input_manager->getDeviceManager()->getLatestUsedDevice(),
PlayerManager::getCurrentPlayer(), false/*handicap*/);
NetworkConfig::get()->doneAddingNetworkPlayers();
}
else
{
// Let lobby add the players
NetworkConfig::get()->cleanNetworkPlayers();
}
return;
}
RibbonWidget* ribbon = dynamic_cast<RibbonWidget*>(widget);
if (ribbon == NULL) return; // what's that event??
@ -193,6 +218,7 @@ void OnlineScreen::eventCallback(Widget* widget, const std::string& name,
*/
bool OnlineScreen::onEscapePressed()
{
NetworkConfig::get()->cleanNetworkPlayers();
NetworkConfig::get()->unsetNetworking();
return true;
} // onEscapePressed

View File

@ -20,7 +20,7 @@
#include "guiengine/screen.hpp"
namespace GUIEngine { class Widget; class ListWidget;
namespace GUIEngine { class CheckBoxWidget; class ListWidget;
class ButtonWidget; class IconButtonWidget; }
/**
@ -42,6 +42,8 @@ private:
/** Keep the widget to avoid looking it up every frame. */
GUIEngine::IconButtonWidget* m_online;
GUIEngine::CheckBoxWidget* m_enable_splitscreen;
OnlineScreen();
public: