stk-code_catmod/src/states_screens/dialogs/custom_video_settings.cpp
2015-01-11 00:45:38 +01:00

255 lines
9.9 KiB
C++

// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2009-2013 Marianne Gagnon
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "states_screens/dialogs/custom_video_settings.hpp"
#include "config/user_config.hpp"
#include "guiengine/widgets/check_box_widget.hpp"
#include "guiengine/widgets/spinner_widget.hpp"
#include "states_screens/options_screen_video.hpp"
#include "utils/translation.hpp"
#include "graphics/central_settings.hpp"
#include "graphics/irr_driver.hpp"
#include <IGUIEnvironment.h>
using namespace GUIEngine;
using namespace irr;
using namespace irr::core;
using namespace irr::gui;
// -----------------------------------------------------------------------------
CustomVideoSettingsDialog::CustomVideoSettingsDialog(const float w, const float h) :
ModalDialog(w, h)
{
loadFromFile("custom_video_settings.stkgui");
updateActivation();
}
// -----------------------------------------------------------------------------
CustomVideoSettingsDialog::~CustomVideoSettingsDialog()
{
}
// -----------------------------------------------------------------------------
void CustomVideoSettingsDialog::beforeAddingWidgets()
{
getWidget<CheckBoxWidget>("anim_gfx")->setState(UserConfigParams::m_graphical_effects);
getWidget<CheckBoxWidget>("weather_gfx")->setState(UserConfigParams::m_weather_effects);
getWidget<CheckBoxWidget>("dof")->setState(UserConfigParams::m_dof);
getWidget<CheckBoxWidget>("hd-textures")->setState(UserConfigParams::m_high_definition_textures);
SpinnerWidget* kart_anim = getWidget<SpinnerWidget>("steering_animations");
kart_anim->addLabel(_("Disabled")); // 0
//I18N: animations setting (only karts with human players are animated)
kart_anim->addLabel(_("Human players only")); // 1
//I18N: animations setting (all karts are animated)
kart_anim->addLabel(_("Enabled for all")); // 2
kart_anim->setValue(UserConfigParams::m_show_steering_animations);
SpinnerWidget* filtering = getWidget<SpinnerWidget>("filtering");
int value = 0;
if (UserConfigParams::m_anisotropic == 2) value = 2;
else if (UserConfigParams::m_anisotropic == 4) value = 3;
else if (UserConfigParams::m_anisotropic == 8) value = 4;
else if (UserConfigParams::m_anisotropic == 16) value = 5;
else if (UserConfigParams::m_trilinear) value = 1;
filtering->addLabel(_("Bilinear")); // 0
filtering->addLabel(_("Trilinear")); // 1
filtering->addLabel(_("Anisotropic x2")); // 2
filtering->addLabel(_("Anisotropic x4")); // 3
filtering->addLabel(_("Anisotropic x8")); // 4
filtering->addLabel(_("Anisotropic x16")); // 5
filtering->setValue(value);
SpinnerWidget* shadows = getWidget<SpinnerWidget>("shadows");
shadows->addLabel(_("Disabled")); // 0
shadows->addLabel(_("low")); // 1
shadows->addLabel(_("high")); // 2
if (CVS->supportsShadows())
shadows->setValue(UserConfigParams::m_shadows_resolution / 512);
else
shadows->setValue(0);
getWidget<CheckBoxWidget>("dynamiclight")->setState(UserConfigParams::m_dynamic_lights);
getWidget<CheckBoxWidget>("lightshaft")->setState(UserConfigParams::m_light_shaft);
getWidget<CheckBoxWidget>("global_illumination")->setState(UserConfigParams::m_gi);
getWidget<CheckBoxWidget>("motionblur")->setState(UserConfigParams::m_motionblur);
getWidget<CheckBoxWidget>("mlaa")->setState(UserConfigParams::m_mlaa);
getWidget<CheckBoxWidget>("glow")->setState(UserConfigParams::m_glow);
getWidget<CheckBoxWidget>("ssao")->setState(UserConfigParams::m_ssao);
getWidget<CheckBoxWidget>("bloom")->setState(UserConfigParams::m_bloom);
if (CVS->isEXTTextureCompressionS3TCUsable())
{
getWidget<CheckBoxWidget>("texture_compression")->setState(UserConfigParams::m_texture_compression);
}
else
{
CheckBoxWidget* cb_tex_cmp = getWidget<CheckBoxWidget>("texture_compression");
cb_tex_cmp->setState(false);
cb_tex_cmp->setDeactivated();
}
if (!CVS->supportsGlobalIllumination())
{
shadows->setDeactivated();
getWidget<CheckBoxWidget>("global_illumination")->setDeactivated();
}
}
// -----------------------------------------------------------------------------
GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::string& eventSource)
{
if (eventSource == "close")
{
bool advanced_pipeline = getWidget<CheckBoxWidget>("dynamiclight")->getState();
UserConfigParams::m_dynamic_lights = advanced_pipeline;
UserConfigParams::m_dof =
advanced_pipeline && getWidget<CheckBoxWidget>("dof")->getState();
UserConfigParams::m_motionblur =
advanced_pipeline && getWidget<CheckBoxWidget>("motionblur")->getState();
if (advanced_pipeline && CVS->supportsShadows())
{
UserConfigParams::m_shadows_resolution =
getWidget<SpinnerWidget>("shadows")->getValue() * 512;
}
else
{
UserConfigParams::m_shadows_resolution = 0;
}
UserConfigParams::m_mlaa =
advanced_pipeline && getWidget<CheckBoxWidget>("mlaa")->getState();
UserConfigParams::m_ssao =
advanced_pipeline && getWidget<CheckBoxWidget>("ssao")->getState();
UserConfigParams::m_light_shaft =
advanced_pipeline && getWidget<CheckBoxWidget>("lightshaft")->getState();
UserConfigParams::m_gi =
advanced_pipeline && CVS->supportsGlobalIllumination() &&
getWidget<CheckBoxWidget>("global_illumination")->getState();
UserConfigParams::m_glow =
advanced_pipeline && getWidget<CheckBoxWidget>("glow")->getState();
UserConfigParams::m_bloom =
advanced_pipeline && getWidget<CheckBoxWidget>("bloom")->getState();
UserConfigParams::m_texture_compression =
getWidget<CheckBoxWidget>("texture_compression")->getState();
UserConfigParams::m_graphical_effects =
getWidget<CheckBoxWidget>("anim_gfx")->getState();
UserConfigParams::m_weather_effects =
getWidget<CheckBoxWidget>("weather_gfx")->getState();
UserConfigParams::m_high_definition_textures =
getWidget<CheckBoxWidget>("hd-textures")->getState();
UserConfigParams::m_show_steering_animations =
getWidget<SpinnerWidget>("steering_animations")->getValue();
switch (getWidget<SpinnerWidget>("filtering")->getValue())
{
case 0:
UserConfigParams::m_anisotropic = 0;
UserConfigParams::m_trilinear = false;
break;
case 1:
UserConfigParams::m_anisotropic = 0;
UserConfigParams::m_trilinear = true;
break;
case 2:
UserConfigParams::m_anisotropic = 2;
UserConfigParams::m_trilinear = true;
break;
case 3:
UserConfigParams::m_anisotropic = 4;
UserConfigParams::m_trilinear = true;
break;
case 4:
UserConfigParams::m_anisotropic = 8;
UserConfigParams::m_trilinear = true;
break;
case 5:
UserConfigParams::m_anisotropic = 16;
UserConfigParams::m_trilinear = true;
break;
}
user_config->saveConfig();
ModalDialog::dismiss();
OptionsScreenVideo::getInstance()->updateGfxSlider();
return GUIEngine::EVENT_BLOCK;
}
else if (eventSource == "dynamiclight")
{
updateActivation();
}
return GUIEngine::EVENT_LET;
} // processEvent
// -----------------------------------------------------------------------------
void CustomVideoSettingsDialog::updateActivation()
{
if(getWidget<CheckBoxWidget>("dynamiclight")->getState())
{
getWidget<CheckBoxWidget>("motionblur")->setActivated();
getWidget<CheckBoxWidget>("dof")->setActivated();
getWidget<SpinnerWidget>("shadows")->setActivated();
getWidget<CheckBoxWidget>("mlaa")->setActivated();
getWidget<CheckBoxWidget>("ssao")->setActivated();
getWidget<CheckBoxWidget>("lightshaft")->setActivated();
getWidget<CheckBoxWidget>("global_illumination")->setActivated();
getWidget<CheckBoxWidget>("glow")->setActivated();
getWidget<CheckBoxWidget>("bloom")->setActivated();
}
else
{
getWidget<CheckBoxWidget>("motionblur")->setDeactivated();
getWidget<CheckBoxWidget>("dof")->setDeactivated();
getWidget<SpinnerWidget>("shadows")->setDeactivated();
getWidget<CheckBoxWidget>("mlaa")->setDeactivated();
getWidget<CheckBoxWidget>("ssao")->setDeactivated();
getWidget<CheckBoxWidget>("lightshaft")->setDeactivated();
getWidget<CheckBoxWidget>("global_illumination")->setDeactivated();
getWidget<CheckBoxWidget>("glow")->setDeactivated();
getWidget<CheckBoxWidget>("bloom")->setDeactivated();
}
if (!CVS->supportsShadows() && !CVS->supportsGlobalIllumination())
{
getWidget<SpinnerWidget>("shadows")->setDeactivated();
getWidget<CheckBoxWidget>("global_illumination")->setDeactivated();
}
} // updateActivation