Add toggling of network splitscreen in online menu
This commit is contained in:
parent
6fca802c8e
commit
152dfe7c55
@ -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">
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user