diff --git a/data/gui/dialogs/custom_camera_settings.stkgui b/data/gui/dialogs/custom_camera_settings.stkgui
index dba6d062c..bf56ac480 100644
--- a/data/gui/dialogs/custom_camera_settings.stkgui
+++ b/data/gui/dialogs/custom_camera_settings.stkgui
@@ -86,15 +86,14 @@
-
+
+
+
+
+
diff --git a/data/gui/dialogs/custom_video_settings.stkgui b/data/gui/dialogs/custom_video_settings.stkgui
index 0f8c77e7f..dfb758aaf 100644
--- a/data/gui/dialogs/custom_video_settings.stkgui
+++ b/data/gui/dialogs/custom_video_settings.stkgui
@@ -171,8 +171,13 @@
-
+
-
+
+
+
+
diff --git a/data/gui/dialogs/kart_color_slider.stkgui b/data/gui/dialogs/kart_color_slider.stkgui
index 423d96a1e..b94caedb7 100644
--- a/data/gui/dialogs/kart_color_slider.stkgui
+++ b/data/gui/dialogs/kart_color_slider.stkgui
@@ -1,20 +1,26 @@
+
-
+
-
+
-
+
-
-
+
+
+
+
+
diff --git a/src/modes/overworld.cpp b/src/modes/overworld.cpp
index 0724155fb..a8c7bd0b3 100644
--- a/src/modes/overworld.cpp
+++ b/src/modes/overworld.cpp
@@ -75,8 +75,8 @@ void OverWorld::enterOverWorld()
RaceManager::get()->setDifficulty(RaceManager::DIFFICULTY_BEST);
}
- // Use keyboard 0 by default (FIXME: let player choose?)
- InputDevice* device = input_manager->getDeviceManager()->getKeyboard(0);
+ // Use the last used device
+ InputDevice* device = input_manager->getDeviceManager()->getLatestUsedDevice();
// Create player and associate player with keyboard
StateManager::get()->createActivePlayer(PlayerManager::getCurrentPlayer(),
diff --git a/src/states_screens/dialogs/custom_camera_settings.cpp b/src/states_screens/dialogs/custom_camera_settings.cpp
index b2256cb77..3db4b0439 100644
--- a/src/states_screens/dialogs/custom_camera_settings.cpp
+++ b/src/states_screens/dialogs/custom_camera_settings.cpp
@@ -20,8 +20,10 @@
#include "config/user_config.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
#include "guiengine/widgets/label_widget.hpp"
+#include "guiengine/widgets/ribbon_widget.hpp"
#include "guiengine/widgets/spinner_widget.hpp"
#include "states_screens/options/options_screen_ui.hpp"
+#include "states_screens/state_manager.hpp"
#include "utils/translation.hpp"
#include "graphics/central_settings.hpp"
#include "graphics/irr_driver.hpp"
@@ -115,61 +117,72 @@ void CustomCameraSettingsDialog::beforeAddingWidgets()
GUIEngine::EventPropagation CustomCameraSettingsDialog::processEvent(const std::string& eventSource)
{
#ifndef SERVER_ONLY
- if (eventSource == "close")
+ if (eventSource == "buttons")
{
- UserConfigParams::m_camera_forward_smoothing = getWidget("camera_smoothing")->getState();
- UserConfigParams::m_reverse_look_use_soccer_cam = getWidget("use_soccer_camera")->getState();
- if (UserConfigParams::m_camera_present == 1) // Standard camera, only smoothing and follow soccer is customizable
- {
- UserConfigParams::m_saved_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
- UserConfigParams::m_standard_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+ const std::string& selection = getWidget("buttons")->
+ getSelectionIDString(PLAYER_ID_GAME_MASTER);
- }
- else if (UserConfigParams::m_camera_present == 2) // Drone chase camera, only smoothing and follow soccer is customizable
+ if (selection == "apply")
{
- UserConfigParams::m_drone_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
- UserConfigParams::m_drone_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+ UserConfigParams::m_camera_forward_smoothing = getWidget("camera_smoothing")->getState();
+ UserConfigParams::m_reverse_look_use_soccer_cam = getWidget("use_soccer_camera")->getState();
+ if (UserConfigParams::m_camera_present == 1) // Standard camera, only smoothing and follow soccer is customizable
+ {
+ UserConfigParams::m_saved_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
+ UserConfigParams::m_standard_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+
+ }
+ else if (UserConfigParams::m_camera_present == 2) // Drone chase camera, only smoothing and follow soccer is customizable
+ {
+ UserConfigParams::m_drone_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
+ UserConfigParams::m_drone_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+ }
+ else // Custom camera, everything is customizable
+ {
+ UserConfigParams::m_camera_fov = getWidget("fov")->getValue();
+ UserConfigParams::m_camera_distance = getWidget("camera_distance")->getFloatValue();
+ UserConfigParams::m_camera_forward_up_angle = getWidget("camera_angle")->getValue();
+ UserConfigParams::m_camera_backward_distance = getWidget("backward_camera_distance")->getFloatValue();
+ UserConfigParams::m_camera_backward_up_angle = getWidget("backward_camera_angle")->getValue();
+ UserConfigParams::m_saved_camera_fov = UserConfigParams::m_camera_fov;
+ UserConfigParams::m_saved_camera_distance = UserConfigParams::m_camera_distance;
+ UserConfigParams::m_saved_camera_forward_up_angle = UserConfigParams::m_camera_forward_up_angle;
+ UserConfigParams::m_saved_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
+ UserConfigParams::m_saved_camera_backward_distance = UserConfigParams::m_camera_backward_distance;
+ UserConfigParams::m_saved_camera_backward_up_angle = UserConfigParams::m_camera_backward_up_angle;
+ UserConfigParams::m_saved_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+ }
+ OptionsScreenUI::getInstance()->updateCameraPresetSpinner();
+ m_self_destroy = true;
+ return GUIEngine::EVENT_BLOCK;
}
- else // Custom camera, everything is customizable
+ else if (selection == "reset") // discard all the changes
{
- UserConfigParams::m_camera_fov = getWidget("fov")->getValue();
- UserConfigParams::m_camera_distance = getWidget("camera_distance")->getFloatValue();
- UserConfigParams::m_camera_forward_up_angle = getWidget("camera_angle")->getValue();
- UserConfigParams::m_camera_backward_distance = getWidget("backward_camera_distance")->getFloatValue();
- UserConfigParams::m_camera_backward_up_angle = getWidget("backward_camera_angle")->getValue();
- UserConfigParams::m_saved_camera_fov = UserConfigParams::m_camera_fov;
- UserConfigParams::m_saved_camera_distance = UserConfigParams::m_camera_distance;
- UserConfigParams::m_saved_camera_forward_up_angle = UserConfigParams::m_camera_forward_up_angle;
- UserConfigParams::m_saved_camera_forward_smoothing = UserConfigParams::m_camera_forward_smoothing;
- UserConfigParams::m_saved_camera_backward_distance = UserConfigParams::m_camera_backward_distance;
- UserConfigParams::m_saved_camera_backward_up_angle = UserConfigParams::m_camera_backward_up_angle;
- UserConfigParams::m_saved_reverse_look_use_soccer_cam = UserConfigParams::m_reverse_look_use_soccer_cam;
+ if (UserConfigParams::m_camera_present == 1) // Standard camera
+ {
+ getWidget("camera_smoothing")->setState(UserConfigParams::m_standard_camera_forward_smoothing);
+ getWidget("use_soccer_camera")->setState(UserConfigParams::m_standard_reverse_look_use_soccer_cam);
+ }
+ else if (UserConfigParams::m_camera_present == 2) // Drone chase camera
+ {
+ getWidget("camera_smoothing")->setState(UserConfigParams::m_drone_camera_forward_smoothing);
+ getWidget("use_soccer_camera")->setState(UserConfigParams::m_drone_reverse_look_use_soccer_cam);
+ }
+ else // Custom camera
+ {
+ getWidget("fov")->setValue(UserConfigParams::m_saved_camera_fov);
+ getWidget("camera_distance")->setFloatValue(UserConfigParams::m_saved_camera_distance);
+ getWidget("camera_angle")->setValue(UserConfigParams::m_saved_camera_forward_up_angle);
+ getWidget("camera_smoothing")->setState(UserConfigParams::m_saved_camera_forward_smoothing);
+ getWidget("backward_camera_distance")->setFloatValue(UserConfigParams::m_saved_camera_backward_distance);
+ getWidget("backward_camera_angle")->setValue(UserConfigParams::m_saved_camera_backward_up_angle);
+ getWidget("use_soccer_camera")->setState(UserConfigParams::m_saved_reverse_look_use_soccer_cam);
+ }
}
- OptionsScreenUI::getInstance()->updateCameraPresetSpinner();
- m_self_destroy = true;
- return GUIEngine::EVENT_BLOCK;
- }
- else if (eventSource == "reset") // discard all the changes
- {
- if (UserConfigParams::m_camera_present == 1) // Standard camera
+ else if (selection == "cancel")
{
- getWidget("camera_smoothing")->setState(UserConfigParams::m_standard_camera_forward_smoothing);
- getWidget("use_soccer_camera")->setState(UserConfigParams::m_standard_reverse_look_use_soccer_cam);
- }
- else if (UserConfigParams::m_camera_present == 2) // Drone chase camera
- {
- getWidget("camera_smoothing")->setState(UserConfigParams::m_drone_camera_forward_smoothing);
- getWidget("use_soccer_camera")->setState(UserConfigParams::m_drone_reverse_look_use_soccer_cam);
- }
- else // Custom camera
- {
- getWidget("fov")->setValue(UserConfigParams::m_saved_camera_fov);
- getWidget("camera_distance")->setFloatValue(UserConfigParams::m_saved_camera_distance);
- getWidget("camera_angle")->setValue(UserConfigParams::m_saved_camera_forward_up_angle);
- getWidget("camera_smoothing")->setState(UserConfigParams::m_saved_camera_forward_smoothing);
- getWidget("backward_camera_distance")->setFloatValue(UserConfigParams::m_saved_camera_backward_distance);
- getWidget("backward_camera_angle")->setValue(UserConfigParams::m_saved_camera_backward_up_angle);
- getWidget("use_soccer_camera")->setState(UserConfigParams::m_saved_reverse_look_use_soccer_cam);
+ ModalDialog::dismiss();
+ return GUIEngine::EVENT_BLOCK;
}
}
#endif
diff --git a/src/states_screens/dialogs/custom_video_settings.cpp b/src/states_screens/dialogs/custom_video_settings.cpp
index 49ca4621c..e27ccf422 100644
--- a/src/states_screens/dialogs/custom_video_settings.cpp
+++ b/src/states_screens/dialogs/custom_video_settings.cpp
@@ -19,8 +19,10 @@
#include "config/user_config.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
+#include "guiengine/widgets/ribbon_widget.hpp"
#include "guiengine/widgets/spinner_widget.hpp"
#include "states_screens/options/options_screen_video.hpp"
+#include "states_screens/state_manager.hpp"
#include "utils/translation.hpp"
#include "graphics/central_settings.hpp"
#include "graphics/irr_driver.hpp"
@@ -116,70 +118,81 @@ void CustomVideoSettingsDialog::beforeAddingWidgets()
GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::string& eventSource)
{
#ifndef SERVER_ONLY
- if (eventSource == "close")
+ if (eventSource == "buttons")
{
- bool advanced_pipeline = getWidget("dynamiclight")->getState();
- UserConfigParams::m_dynamic_lights = advanced_pipeline;
+ const std::string& selection = getWidget("buttons")->
+ getSelectionIDString(PLAYER_ID_GAME_MASTER);
- UserConfigParams::m_dof =
- advanced_pipeline && getWidget("dof")->getState();
-
- UserConfigParams::m_motionblur =
- advanced_pipeline && getWidget("motionblur")->getState();
-
- if (advanced_pipeline)
+ if (selection == "apply")
{
- UserConfigParams::m_shadows_resolution =
- getWidget("shadows")->getValue() * 512;
+ bool advanced_pipeline = getWidget("dynamiclight")->getState();
+ UserConfigParams::m_dynamic_lights = advanced_pipeline;
+
+ UserConfigParams::m_dof =
+ advanced_pipeline && getWidget("dof")->getState();
+
+ UserConfigParams::m_motionblur =
+ advanced_pipeline && getWidget("motionblur")->getState();
+
+ if (advanced_pipeline)
+ {
+ UserConfigParams::m_shadows_resolution =
+ getWidget("shadows")->getValue() * 512;
+ }
+ else
+ {
+ UserConfigParams::m_shadows_resolution = 0;
+ }
+
+ UserConfigParams::m_mlaa =
+ advanced_pipeline && getWidget("mlaa")->getState();
+
+ UserConfigParams::m_ssao =
+ advanced_pipeline && getWidget("ssao")->getState();
+
+ UserConfigParams::m_light_shaft =
+ advanced_pipeline && getWidget("lightshaft")->getState();
+
+ UserConfigParams::m_degraded_IBL =
+ !advanced_pipeline || !getWidget("ibl")->getState();
+
+ UserConfigParams::m_glow =
+ advanced_pipeline && getWidget("glow")->getState();
+
+ UserConfigParams::m_bloom =
+ advanced_pipeline && getWidget("bloom")->getState();
+
+ UserConfigParams::m_light_scatter =
+ advanced_pipeline && getWidget("lightscattering")->getState();
+
+ UserConfigParams::m_texture_compression =
+ getWidget("texture_compression")->getState();
+
+ UserConfigParams::m_particles_effects =
+ getWidget("particles_effects")->getValue();
+
+ UserConfigParams::m_animated_characters =
+ getWidget("animated_characters")->getState();
+
+ const int val =
+ getWidget("geometry_detail")->getValue();
+ UserConfigParams::m_geometry_level = val == 2 ? 0 : val == 0 ? 2 : 1;
+
+ OptionsScreenVideo::setImageQuality(getWidget
+ ("image_quality")->getValue());
+
+ user_config->saveConfig();
+
+ ModalDialog::dismiss();
+ OptionsScreenVideo::getInstance()->updateGfxSlider();
+ OptionsScreenVideo::getInstance()->updateBlurSlider();
+ return GUIEngine::EVENT_BLOCK;
}
- else
+ else if (selection == "cancel")
{
- UserConfigParams::m_shadows_resolution = 0;
+ ModalDialog::dismiss();
+ return GUIEngine::EVENT_BLOCK;
}
-
- UserConfigParams::m_mlaa =
- advanced_pipeline && getWidget("mlaa")->getState();
-
- UserConfigParams::m_ssao =
- advanced_pipeline && getWidget("ssao")->getState();
-
- UserConfigParams::m_light_shaft =
- advanced_pipeline && getWidget("lightshaft")->getState();
-
- UserConfigParams::m_degraded_IBL =
- !advanced_pipeline || !getWidget("ibl")->getState();
-
- UserConfigParams::m_glow =
- advanced_pipeline && getWidget("glow")->getState();
-
- UserConfigParams::m_bloom =
- advanced_pipeline && getWidget("bloom")->getState();
-
- UserConfigParams::m_light_scatter =
- advanced_pipeline && getWidget("lightscattering")->getState();
-
- UserConfigParams::m_texture_compression =
- getWidget("texture_compression")->getState();
-
- UserConfigParams::m_particles_effects =
- getWidget("particles_effects")->getValue();
-
- UserConfigParams::m_animated_characters =
- getWidget("animated_characters")->getState();
-
- const int val =
- getWidget("geometry_detail")->getValue();
- UserConfigParams::m_geometry_level = val == 2 ? 0 : val == 0 ? 2 : 1;
-
- OptionsScreenVideo::setImageQuality(getWidget
- ("image_quality")->getValue());
-
- user_config->saveConfig();
-
- ModalDialog::dismiss();
- OptionsScreenVideo::getInstance()->updateGfxSlider();
- OptionsScreenVideo::getInstance()->updateBlurSlider();
- return GUIEngine::EVENT_BLOCK;
}
else if (eventSource == "dynamiclight")
{
diff --git a/src/states_screens/dialogs/kart_color_slider_dialog.cpp b/src/states_screens/dialogs/kart_color_slider_dialog.cpp
index 60313bc38..d6150a9d3 100644
--- a/src/states_screens/dialogs/kart_color_slider_dialog.cpp
+++ b/src/states_screens/dialogs/kart_color_slider_dialog.cpp
@@ -28,6 +28,7 @@
#include "guiengine/engine.hpp"
#include "guiengine/widgets/label_widget.hpp"
#include "guiengine/widgets/model_view_widget.hpp"
+#include "guiengine/widgets/ribbon_widget.hpp"
#include "guiengine/widgets/spinner_widget.hpp"
#include "states_screens/state_manager.hpp"
#include "utils/string_utils.hpp"
@@ -51,6 +52,8 @@ KartColorSliderDialog::KartColorSliderDialog(PlayerProfile* pp)
m_toggle_slider->addLabel(original_color);
m_toggle_slider->addLabel(choose_color);
+ m_buttons_widget = getWidget("buttons");
+
if (m_player_profile->getDefaultKartColor() != 0.0f)
{
m_toggle_slider->setValue(1);
@@ -111,26 +114,8 @@ void KartColorSliderDialog::beforeAddingWidgets()
model_location.setScale(core::vector3df(scale, scale, scale));
// Add the kart model (including wheels and speed weight objects)
- const bool has_win_anime =
- (((kart_model.getFrame(KartModel::AF_WIN_LOOP_START) > -1 ||
- kart_model.getFrame(KartModel::AF_WIN_START) > -1) &&
- kart_model.getFrame(KartModel::AF_WIN_END) > -1) ||
- (kart_model.getFrame(KartModel::AF_SELECTION_START) > -1 &&
- kart_model.getFrame(KartModel::AF_SELECTION_END) > -1));
m_model_view->addModel(kart_model.getModel(), model_location,
- has_win_anime ?
- kart_model.getFrame(KartModel::AF_SELECTION_START) > -1 ?
- kart_model.getFrame(KartModel::AF_SELECTION_START) :
- kart_model.getFrame(KartModel::AF_WIN_LOOP_START) > -1 ?
- kart_model.getFrame(KartModel::AF_WIN_LOOP_START) :
- kart_model.getFrame(KartModel::AF_WIN_START) :
- kart_model.getBaseFrame(),
- has_win_anime ?
- kart_model.getFrame(KartModel::AF_SELECTION_END) > -1 ?
- kart_model.getFrame(KartModel::AF_SELECTION_END) :
- kart_model.getFrame(KartModel::AF_WIN_END) :
- kart_model.getBaseFrame(),
- kart_model.getAnimationSpeed());
+ kart_model.getBaseFrame(), kart_model.getBaseFrame());
model_location.setScale(core::vector3df(1.0f, 1.0f, 1.0f));
for (unsigned i = 0; i < 4; i++)
@@ -191,14 +176,25 @@ GUIEngine::EventPropagation
m_model_view->getModelViewRenderInfo()->setHue(float(
m_color_slider->getValue()) / 100.0f);
}
- else if (eventSource == "close")
+ else if (eventSource == "buttons")
{
- float color = 0.0f;
- if (m_toggle_slider->getValue() == 1)
- color = float(m_color_slider->getValue()) / 100.0f;
- m_player_profile->setDefaultKartColor(color);
- ModalDialog::dismiss();
- return GUIEngine::EVENT_BLOCK;
+ const std::string& selection = m_buttons_widget->
+ getSelectionIDString(PLAYER_ID_GAME_MASTER);
+
+ if (selection == "apply")
+ {
+ float color = 0.0f;
+ if (m_toggle_slider->getValue() == 1)
+ color = float(m_color_slider->getValue()) / 100.0f;
+ m_player_profile->setDefaultKartColor(color);
+ ModalDialog::dismiss();
+ return GUIEngine::EVENT_BLOCK;
+ }
+ else if (selection == "cancel")
+ {
+ ModalDialog::dismiss();
+ return GUIEngine::EVENT_BLOCK;
+ }
}
return GUIEngine::EVENT_LET;
} // processEvent
diff --git a/src/states_screens/dialogs/kart_color_slider_dialog.hpp b/src/states_screens/dialogs/kart_color_slider_dialog.hpp
index a40a20d99..cc977f6f8 100644
--- a/src/states_screens/dialogs/kart_color_slider_dialog.hpp
+++ b/src/states_screens/dialogs/kart_color_slider_dialog.hpp
@@ -27,6 +27,7 @@ namespace GUIEngine
{
class CheckBoxWidget;
class ModelViewWidget;
+ class RibbonWidget;
class SpinnerWidget;
}
@@ -44,6 +45,8 @@ private:
GUIEngine::SpinnerWidget* m_color_slider;
+ GUIEngine::RibbonWidget* m_buttons_widget;
+
void toggleSlider();
public:
KartColorSliderDialog(PlayerProfile* pp);
diff --git a/src/states_screens/edit_gp_screen.cpp b/src/states_screens/edit_gp_screen.cpp
index f0032fc52..824292bfd 100644
--- a/src/states_screens/edit_gp_screen.cpp
+++ b/src/states_screens/edit_gp_screen.cpp
@@ -372,3 +372,20 @@ void EditGPScreen::enableButtons()
edit_button->setActive(m_selected >= 0);
remove_button->setActive(m_selected >= 0);
} // enableButtons
+
+bool EditGPScreen::onEscapePressed()
+{
+ if (m_modified)
+ {
+ m_action = "back";
+ new MessageDialog(
+ _("Do you want to save your changes?"),
+ MessageDialog::MESSAGE_DIALOG_CONFIRM,
+ this, false);
+ }
+ else
+ {
+ back();
+ }
+ return false;
+}
diff --git a/src/states_screens/edit_gp_screen.hpp b/src/states_screens/edit_gp_screen.hpp
index 61fad3955..2884593e6 100644
--- a/src/states_screens/edit_gp_screen.hpp
+++ b/src/states_screens/edit_gp_screen.hpp
@@ -79,7 +79,10 @@ public:
/** \brief implement callback from parent class GUIEngine::Screen */
virtual void eventCallback(GUIEngine::Widget* widget, const std::string& name,
const int playerID) OVERRIDE;
-
+
+ /** \brief implement callback from parent class GUIEngine::Screen */
+ virtual bool onEscapePressed() OVERRIDE;
+
/** \brief implement callback from parent class GUIEngine::Screen */
virtual void beforeAddingWidget() OVERRIDE;
diff --git a/src/states_screens/main_menu_screen.cpp b/src/states_screens/main_menu_screen.cpp
index 6bc67ed4b..45d8f5c79 100644
--- a/src/states_screens/main_menu_screen.cpp
+++ b/src/states_screens/main_menu_screen.cpp
@@ -277,12 +277,11 @@ void MainMenuScreen::startTutorial()
RaceManager::get()->setDifficulty(RaceManager::DIFFICULTY_EASY);
RaceManager::get()->setReverseTrack(false);
- // Use keyboard 0 by default (FIXME: let player choose?)
- InputDevice* device = input_manager->getDeviceManager()->getKeyboard(0);
+ // Use the last used device
+ InputDevice* device = input_manager->getDeviceManager()->getLatestUsedDevice();
- // Create player and associate player with keyboard
- StateManager::get()->createActivePlayer(PlayerManager::getCurrentPlayer(),
- device);
+ // Create player and associate player with device
+ StateManager::get()->createActivePlayer(PlayerManager::getCurrentPlayer(), device);
if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL)
{
@@ -292,8 +291,7 @@ void MainMenuScreen::startTutorial()
}
RaceManager::get()->setPlayerKart(0, UserConfigParams::m_default_kart);
- // ASSIGN should make sure that only input from assigned devices
- // is read.
+ // ASSIGN should make sure that only input from assigned devices is read
input_manager->getDeviceManager()->setAssignMode(ASSIGN);
input_manager->getDeviceManager()
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );