glest-source/source/glest_game/menu/menu_state_options_graphics.cpp
andy5995 643aff1aa3
glest_game/menu:reformat/restyle source code
* used 'indent -nut -i2 -bli0 -ppi 3 *`
2018-01-25 02:21:52 -06:00

1200 lines
46 KiB
C++

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2008 Martiño Figueroa
//
// You can redistribute this code and/or modify it under
// the terms of the GNU General Public License as published
// by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version
// ==============================================================
#include "menu_state_options_graphics.h"
#include "renderer.h"
#include "game.h"
#include "program.h"
#include "sound_renderer.h"
#include "core_data.h"
#include "config.h"
#include "menu_state_root.h"
#include "menu_state_options.h"
#include "util.h"
#include "menu_state_graphic_info.h"
#include "menu_state_keysetup.h"
#include "menu_state_options_graphics.h"
#include "menu_state_options_sound.h"
#include "menu_state_options_network.h"
#include "string_utils.h"
#include "metrics.h"
#include "leak_dumper.h"
using namespace
Shared::Util;
namespace
Glest
{
namespace
Game
{
// =====================================================
// class MenuStateOptions
// =====================================================
MenuStateOptionsGraphics::MenuStateOptionsGraphics (Program * program,
MainMenu * mainMenu,
ProgramState **
parentUI):
MenuState (program, mainMenu, "config"),
buttonOk ("Options_Graphics", "buttonOk"),
buttonReturn ("Options_Graphics", "buttonReturn"),
buttonAutoConfig ("Options_Graphics", "buttonAutoConfig"),
buttonVideoInfo ("Options_Graphics", "buttonVideoInfo"),
buttonKeyboardSetup ("Options_Graphics", "buttonKeyboardSetup"),
buttonVideoSection ("Options_Graphics", "buttonVideoSection"),
buttonAudioSection ("Options_Graphics", "buttonAudioSection"),
buttonMiscSection ("Options_Graphics", "buttonMiscSection"),
buttonNetworkSettings ("Options_Graphics", "buttonNetworkSettings"),
labelShadows ("Options_Graphics", "labelShadows"),
listBoxShadows ("Options_Graphics", "listBoxShadows"),
labelFilter ("Options_Graphics", "labelFilter"),
listBoxFilter ("Options_Graphics", "listBoxFilter"),
labelFilterMaxAnisotropy ("Options_Graphics", "labelFilterMaxAnisotropy"),
listBoxFilterMaxAnisotropy ("Options_Graphics",
"listBoxFilterMaxAnisotropy"),
labelTextures3D ("Options_Graphics", "labelTextures3D"),
checkBoxTextures3D ("Options_Graphics", "checkBoxTextures3D"),
labelLights ("Options_Graphics", "labelLights"),
listBoxLights ("Options_Graphics", "listBoxLights"),
labelUnitParticles ("Options_Graphics", "labelUnitParticles"),
checkBoxUnitParticles ("Options_Graphics", "checkBoxUnitParticles"),
labelTilesetParticles ("Options_Graphics", "labelTilesetParticles"),
checkBoxTilesetParticles ("Options_Graphics", "checkBoxTilesetParticles"),
labelAnimatedTilesetObjects ("Options_Graphics",
"labelAnimatedTilesetObjects"),
listBoxAnimatedTilesetObjects ("Options_Graphics",
"listBoxAnimatedTilesetObjects"),
labelScreenModes ("Options_Graphics", "labelScreenModes"),
listBoxScreenModes ("Options_Graphics", "listBoxScreenModes"),
labelFullscreenWindowed ("Options_Graphics", "labelFullscreenWindowed"),
checkBoxFullscreenWindowed ("Options_Graphics",
"checkBoxFullscreenWindowed"),
labelMapPreview ("Options_Graphics", "labelMapPreview"),
checkBoxMapPreview ("Options_Graphics", "checkBoxMapPreview"),
mainMessageBox ("Options_Graphics", "mainMessageBox"),
labelEnableTextureCompression ("Options_Graphics",
"labelEnableTextureCompression"),
checkBoxEnableTextureCompression ("Options_Graphics",
"checkBoxEnableTextureCompression"),
labelRainEffect ("Options_Graphics", "labelRainEffect"),
labelRainEffectSeparator ("Options_Graphics", "labelRainEffectSeparator"),
checkBoxRainEffect ("Options_Graphics", "checkBoxRainEffect"),
checkBoxRainEffectMenu ("Options_Graphics", "checkBoxRainEffectMenu"),
labelGammaCorrection ("Options_Graphics", "labelGammaCorrection"),
listBoxGammaCorrection ("Options_Graphics", "listBoxGammaCorrection"),
labelShadowIntensity ("Options_Graphics", "labelShadowIntensity"),
listBoxShadowIntensity ("Options_Graphics", "listBoxShadowIntensity"),
labelShadowTextureSize ("Options_Graphics", "labelShadowTextureSize"),
listBoxShadowTextureSize ("Options_Graphics", "listBoxShadowTextureSize"),
labelVideos ("Options_Graphics", "labelVideos"),
checkBoxVideos ("Options_Graphics", "checkBoxVideos"),
labelSelectionType ("Options_Graphics", "labelSelectionType"),
listBoxSelectionType ("Options_Graphics", "listBoxSelectionType")
{
try
{
containerName = "Options_Graphics";
this->
parentUI = parentUI;
Lang &
lang = Lang::getInstance ();
Config &
config = Config::getInstance ();
this->
console.
setOnlyChatMessagesInStoredLines (false);
screenModeChangedTimer = time (NULL); // just init
::Shared::PlatformCommon::getFullscreenVideoModes (&modeInfos,
!config.
getBool
("Windowed"));
int
leftLabelStart = 100;
int
leftColumnStart = leftLabelStart + 300;
int
buttonRowPos = 50;
int
buttonStartPos = 170;
int
lineOffset = 30;
int
tabButtonWidth = 200;
int
tabButtonHeight = 30;
mainMessageBox.
init (lang.getString ("Ok"));
mainMessageBox.
setEnabled (false);
mainMessageBoxState = 0;
buttonAudioSection.
init (0, 720, tabButtonWidth, tabButtonHeight);
buttonAudioSection.
setFont (CoreData::getInstance ().getMenuFontVeryBig ());
buttonAudioSection.
setFont3D (CoreData::getInstance ().getMenuFontVeryBig3D ());
buttonAudioSection.
setText (lang.getString ("Audio"));
// Video Section
buttonVideoSection.
init (200, 700, tabButtonWidth, tabButtonHeight + 20);
buttonVideoSection.
setFont (CoreData::getInstance ().getMenuFontVeryBig ());
buttonVideoSection.
setFont3D (CoreData::getInstance ().getMenuFontVeryBig3D ());
buttonVideoSection.
setText (lang.getString ("Video"));
//MiscSection
buttonMiscSection.
init (400, 720, tabButtonWidth, tabButtonHeight);
buttonMiscSection.
setFont (CoreData::getInstance ().getMenuFontVeryBig ());
buttonMiscSection.
setFont3D (CoreData::getInstance ().getMenuFontVeryBig3D ());
buttonMiscSection.
setText (lang.getString ("Misc"));
//NetworkSettings
buttonNetworkSettings.
init (600, 720, tabButtonWidth, tabButtonHeight);
buttonNetworkSettings.
setFont (CoreData::getInstance ().getMenuFontVeryBig ());
buttonNetworkSettings.
setFont3D (CoreData::getInstance ().getMenuFontVeryBig3D ());
buttonNetworkSettings.
setText (lang.getString ("Network"));
//KeyboardSetup
buttonKeyboardSetup.
init (800, 720, tabButtonWidth, tabButtonHeight);
buttonKeyboardSetup.
setFont (CoreData::getInstance ().getMenuFontVeryBig ());
buttonKeyboardSetup.
setFont3D (CoreData::getInstance ().getMenuFontVeryBig3D ());
buttonKeyboardSetup.
setText (lang.getString ("Keyboardsetup"));
int
currentLine = 650; // reset line pos
int
currentLabelStart = leftLabelStart; // set to right side
int
currentColumnStart = leftColumnStart; // set to right side
//resolution
labelScreenModes.
init (currentLabelStart, currentLine);
labelScreenModes.
setText (lang.getString ("Resolution"));
listBoxScreenModes.
init (currentColumnStart, currentLine, 200);
string
currentResString = config.getString ("ScreenWidth") + "x" +
config.getString ("ScreenHeight") + "-" +
intToStr (config.getInt ("ColorBits"));
bool
currentResolutionFound = false;
for (vector < ModeInfo >::const_iterator it = modeInfos.begin ();
it != modeInfos.end (); ++it)
{
if ((*it).getString () == currentResString)
{
currentResolutionFound = true;
}
listBoxScreenModes.
pushBackItem ((*it).getString ());
}
if (currentResolutionFound == false)
{
listBoxScreenModes.pushBackItem (currentResString);
}
listBoxScreenModes.setSelectedItem (currentResString);
currentLine -= lineOffset;
//FullscreenWindowed
labelFullscreenWindowed.init (currentLabelStart, currentLine);
checkBoxFullscreenWindowed.init (currentColumnStart, currentLine);
labelFullscreenWindowed.setText (lang.getString ("Windowed"));
checkBoxFullscreenWindowed.setValue (config.getBool ("Windowed"));
currentLine -= lineOffset;
//gammaCorrection
labelGammaCorrection.init (currentLabelStart, currentLine);
labelGammaCorrection.setText (lang.getString ("GammaCorrection"));
listBoxGammaCorrection.init (currentColumnStart, currentLine, 200);
for (float f = 0.5; f < 3.0f; f = f + 0.1f)
{
listBoxGammaCorrection.pushBackItem (floatToStr (f));
}
float
gammaValue = config.getFloat ("GammaValue", "1.0");
if (gammaValue == 0.0f)
gammaValue = 1.0f;
listBoxGammaCorrection.setSelectedItem (floatToStr (gammaValue),
false);
currentLine -= lineOffset;
//filter
labelFilter.init (currentLabelStart, currentLine);
labelFilter.setText (lang.getString ("Filter"));
listBoxFilter.init (currentColumnStart, currentLine, 200);
listBoxFilter.pushBackItem ("Bilinear");
listBoxFilter.pushBackItem ("Trilinear");
listBoxFilter.setSelectedItem (config.getString ("Filter"));
currentLine -= lineOffset;
//FilterMaxAnisotropy
labelFilterMaxAnisotropy.init (currentLabelStart, currentLine);
labelFilterMaxAnisotropy.setText (lang.
getString ("FilterMaxAnisotropy"));
listBoxFilterMaxAnisotropy.init (currentColumnStart, currentLine,
200);
listBoxFilterMaxAnisotropy.pushBackItem ("1");
listBoxFilterMaxAnisotropy.pushBackItem ("2");
listBoxFilterMaxAnisotropy.pushBackItem ("4");
listBoxFilterMaxAnisotropy.pushBackItem ("8");
listBoxFilterMaxAnisotropy.pushBackItem ("16");
listBoxFilterMaxAnisotropy.setSelectedItem (config.
getString
("FilterMaxAnisotropy",
"1"));
currentLine -= lineOffset;
//selectionType
labelSelectionType.init (currentLabelStart, currentLine);
labelSelectionType.setText (lang.getString ("SelectionType"));
listBoxSelectionType.init (currentColumnStart, currentLine, 250);
listBoxSelectionType.pushBackItem ("SelectBuffer (nvidia)");
listBoxSelectionType.pushBackItem ("ColorPicking (default)");
listBoxSelectionType.pushBackItem ("FrustumPicking (bad)");
const string
selectionType =
toLower (config.getString ("SelectionType", Config::colorPicking));
if (selectionType == Config::colorPicking)
listBoxSelectionType.setSelectedItemIndex (1);
else if (selectionType == Config::frustumPicking)
listBoxSelectionType.setSelectedItemIndex (2);
else
listBoxSelectionType.setSelectedItemIndex (0);
currentLine -= lineOffset;
//shadows
labelShadows.init (currentLabelStart, currentLine);
labelShadows.setText (lang.getString ("Shadows"));
listBoxShadows.init (currentColumnStart, currentLine, 250);
for (int i = 0; i < Renderer::sCount; ++i)
{
listBoxShadows.pushBackItem (lang.
getString (Renderer::
shadowsToStr (static_cast <
Renderer::
Shadows >
(i))));
}
string
str = config.getString ("Shadows");
listBoxShadows.
setSelectedItemIndex (clamp
(Renderer::strToShadows (str), 0,
Renderer::sCount - 1));
currentLine -= lineOffset;
//shadows
labelShadowTextureSize.init (currentLabelStart, currentLine);
labelShadowTextureSize.setText (lang.getString ("ShadowTextureSize"));
listBoxShadowTextureSize.init (currentColumnStart, currentLine, 200);
listBoxShadowTextureSize.pushBackItem ("256");
listBoxShadowTextureSize.pushBackItem ("512");
listBoxShadowTextureSize.pushBackItem ("1024");
listBoxShadowTextureSize.setSelectedItemIndex (1, false);
listBoxShadowTextureSize.
setSelectedItem (intToStr
(config.getInt ("ShadowTextureSize", "512")),
false);
currentLine -= lineOffset;
//shadows
labelShadowIntensity.init (currentLabelStart, currentLine);
labelShadowIntensity.setText (lang.getString ("ShadowIntensity"));
listBoxShadowIntensity.init (currentColumnStart, currentLine, 200);
for (float f = 0.5f; f < 3.0f; f = f + 0.1f)
{
listBoxShadowIntensity.pushBackItem (floatToStr (f));
}
float
shadowIntensity = config.getFloat ("ShadowIntensity", "1.0");
if (shadowIntensity <= 0.0f)
shadowIntensity = 1.0f;
listBoxShadowIntensity.setSelectedItem (floatToStr (shadowIntensity),
false);
currentLine -= lineOffset;
//textures 3d
labelTextures3D.init (currentLabelStart, currentLine);
checkBoxTextures3D.init (currentColumnStart, currentLine);
labelTextures3D.setText (lang.getString ("Textures3D"));
checkBoxTextures3D.setValue (config.getBool ("Textures3D"));
currentLine -= lineOffset;
//lights
labelLights.init (currentLabelStart, currentLine);
labelLights.setText (lang.getString ("MaxLights"));
listBoxLights.init (currentColumnStart, currentLine, 80);
for (int i = 1; i <= 8; ++i)
{
listBoxLights.pushBackItem (intToStr (i));
}
listBoxLights.
setSelectedItemIndex (clamp
(config.getInt ("MaxLights") - 1, 0, 7));
currentLine -= lineOffset;
//unit particles
labelUnitParticles.init (currentLabelStart, currentLine);
labelUnitParticles.setText (lang.getString ("ShowUnitParticles"));
checkBoxUnitParticles.init (currentColumnStart, currentLine);
checkBoxUnitParticles.setValue (config.
getBool ("UnitParticles", "true"));
currentLine -= lineOffset;
//tileset particles
labelTilesetParticles.init (currentLabelStart, currentLine);
labelTilesetParticles.setText (lang.
getString ("ShowTilesetParticles"));
checkBoxTilesetParticles.init (currentColumnStart, currentLine);
checkBoxTilesetParticles.setValue (config.
getBool ("TilesetParticles",
"true"));
currentLine -= lineOffset;
//animated tileset objects
labelAnimatedTilesetObjects.init (currentLabelStart, currentLine);
labelAnimatedTilesetObjects.setText (lang.
getString
("AnimatedTilesetObjects"));
listBoxAnimatedTilesetObjects.init (currentColumnStart, currentLine,
80);
listBoxAnimatedTilesetObjects.pushBackItem ("0");
listBoxAnimatedTilesetObjects.pushBackItem ("10");
listBoxAnimatedTilesetObjects.pushBackItem ("25");
listBoxAnimatedTilesetObjects.pushBackItem ("50");
listBoxAnimatedTilesetObjects.pushBackItem ("100");
listBoxAnimatedTilesetObjects.pushBackItem ("300");
listBoxAnimatedTilesetObjects.pushBackItem ("500");
listBoxAnimatedTilesetObjects.pushBackItem ("");
listBoxAnimatedTilesetObjects.setSelectedItem ("", true);
listBoxAnimatedTilesetObjects.setSelectedItem (config.
getString
("AnimatedTilesetObjects",
"-1"), false);
currentLine -= lineOffset;
//unit particles
labelMapPreview.init (currentLabelStart, currentLine);
labelMapPreview.setText (lang.getString ("ShowMapPreview"));
checkBoxMapPreview.init (currentColumnStart, currentLine);
checkBoxMapPreview.setValue (config.getBool ("MapPreview", "true"));
currentLine -= lineOffset;
// Texture Compression flag
labelEnableTextureCompression.init (currentLabelStart, currentLine);
labelEnableTextureCompression.setText (lang.
getString
("EnableTextureCompression"));
checkBoxEnableTextureCompression.init (currentColumnStart,
currentLine);
checkBoxEnableTextureCompression.setValue (config.
getBool
("EnableTextureCompression",
"false"));
currentLine -= lineOffset;
labelRainEffect.init (currentLabelStart, currentLine);
labelRainEffect.setText (lang.getString ("RainEffectMenuGame"));
checkBoxRainEffectMenu.init (currentColumnStart, currentLine);
checkBoxRainEffectMenu.setValue (config.
getBool ("RainEffectMenu", "true"));
labelRainEffectSeparator.init (currentColumnStart + 30, currentLine);
labelRainEffectSeparator.setText ("/");
checkBoxRainEffect.init (currentColumnStart + 42, currentLine);
checkBoxRainEffect.setValue (config.getBool ("RainEffect", "true"));
currentLine -= lineOffset;
labelVideos.init (currentLabelStart, currentLine);
labelVideos.setText (lang.getString ("EnableVideos"));
checkBoxVideos.init (currentColumnStart, currentLine);
checkBoxVideos.setValue (config.getBool ("EnableVideos", "true"));
// end
// external server port
// buttons
buttonOk.init (buttonStartPos, buttonRowPos, 100);
buttonOk.setText (lang.getString ("Save"));
buttonReturn.setText (lang.getString ("Return"));
buttonReturn.init (buttonStartPos + 110, buttonRowPos, 100);
buttonAutoConfig.setText (lang.getString ("AutoConfig"));
buttonAutoConfig.init (buttonStartPos + 230, buttonRowPos, 175);
buttonVideoInfo.setText (lang.getString ("VideoInfo"));
buttonVideoInfo.init (buttonStartPos + 415, buttonRowPos, 175); // was 620
GraphicComponent::applyAllCustomProperties (containerName);
}
catch (exception & e)
{
SystemFlags::OutputDebug (SystemFlags::debugError,
"In [%s::%s Line: %d] Error loading options: %s\n",
__FILE__, __FUNCTION__, __LINE__,
e.what ());
throw
megaglest_runtime_error (string ("Error loading options msg: ") +
e.what ());
}
}
void
MenuStateOptionsGraphics::reloadUI ()
{
Lang & lang = Lang::getInstance ();
mainMessageBox.init (lang.getString ("Ok"));
buttonAudioSection.setText (lang.getString ("Audio"));
buttonVideoSection.setText (lang.getString ("Video"));
buttonMiscSection.setText (lang.getString ("Misc"));
buttonNetworkSettings.setText (lang.getString ("Network"));
std::vector < string > listboxData;
listboxData.push_back ("None");
listboxData.push_back ("OpenAL");
labelScreenModes.setText (lang.getString ("Resolution"));
labelFullscreenWindowed.setText (lang.getString ("Windowed"));
labelFilter.setText (lang.getString ("Filter"));
listboxData.clear ();
listboxData.push_back ("Bilinear");
listboxData.push_back ("Trilinear");
listBoxFilter.setItems (listboxData);
labelFilterMaxAnisotropy.setText (lang.
getString ("FilterMaxAnisotropy"));
listboxData.clear ();
listboxData.push_back ("1");
listboxData.push_back ("2");
listboxData.push_back ("4");
listboxData.push_back ("8");
listboxData.push_back ("16");
listBoxFilterMaxAnisotropy.setItems (listboxData);
listboxData.clear ();
for (float f = 0.0; f < 2.1f; f = f + 0.1f)
{
listboxData.push_back (floatToStr (f));
}
listBoxGammaCorrection.setItems (listboxData);
listboxData.clear ();
for (float f = 0.5; f < 3.0f; f = f + 0.1f)
{
listboxData.push_back (floatToStr (f));
}
listBoxShadowIntensity.setItems (listboxData);
labelShadows.setText (lang.getString ("Shadows"));
labelShadowTextureSize.setText (lang.getString ("ShadowTextureSize"));
labelShadowIntensity.setText (lang.getString ("ShadowIntensity"));
labelGammaCorrection.setText (lang.getString ("GammaCorrection"));
listboxData.clear ();
for (int i = 0; i < Renderer::sCount; ++i)
{
listboxData.push_back (lang.
getString (Renderer::
shadowsToStr (static_cast <
Renderer::Shadows >
(i))));
}
listBoxShadows.setItems (listboxData);
labelTextures3D.setText (lang.getString ("Textures3D"));
labelLights.setText (lang.getString ("MaxLights"));
labelUnitParticles.setText (lang.getString ("ShowUnitParticles"));
labelTilesetParticles.setText (lang.getString ("ShowTilesetParticles"));
labelAnimatedTilesetObjects.setText (lang.
getString
("AnimatedTilesetObjects"));
labelMapPreview.setText (lang.getString ("ShowMapPreview"));
labelEnableTextureCompression.setText (lang.
getString
("EnableTextureCompression"));
labelRainEffect.setText (lang.getString ("RainEffectMenuGame"));
labelVideos.setText (lang.getString ("EnableVideos"));
buttonOk.setText (lang.getString ("Save"));
buttonReturn.setText (lang.getString ("Return"));
buttonAutoConfig.setText (lang.getString ("AutoConfig"));
buttonVideoInfo.setText (lang.getString ("VideoInfo"));
labelSelectionType.setText (lang.getString ("SelectionType"));
}
void
MenuStateOptionsGraphics::showMessageBox (const string & text,
const string & header,
bool toggle)
{
if (!toggle)
{
mainMessageBox.setEnabled (false);
}
if (!mainMessageBox.getEnabled ())
{
mainMessageBox.setText (text);
mainMessageBox.setHeader (header);
mainMessageBox.setEnabled (true);
}
else
{
mainMessageBox.setEnabled (false);
}
}
void
MenuStateOptionsGraphics::revertScreenMode ()
{
Config & config = Config::getInstance ();
//!!!
// Revert resolution or fullscreen
checkBoxFullscreenWindowed.setValue (config.getBool ("Windowed"));
string
currentResString = config.getString ("ScreenWidth") + "x" +
config.getString ("ScreenHeight") + "-" +
intToStr (config.getInt ("ColorBits"));
listBoxScreenModes.setSelectedItem (currentResString);
changeVideoModeFullScreen (!config.getBool ("Windowed"));
WindowGl *
window = this->program->getWindow ();
window->ChangeVideoMode (true,
config.getInt ("ScreenWidth"),
config.getInt ("ScreenHeight"),
!config.getBool ("Windowed"),
config.getInt ("ColorBits"),
config.getInt ("DepthBits"),
config.getInt ("StencilBits"),
config.getBool ("HardwareAcceleration",
"false"),
config.getBool ("FullScreenAntiAliasing",
"false"),
config.getFloat ("GammaValue", "0.0"));
Metrics::reload (this->program->getWindow ()->getScreenWidth (),
this->program->getWindow ()->getScreenHeight ());
window->setText (config.getString ("WindowTitle", "MegaGlest"));
this->mainMenu->init ();
}
void
MenuStateOptionsGraphics::update ()
{
if (mainMessageBox.getEnabled () && (mainMessageBoxState == 1))
{
int
waitTime = 10;
if ((time (NULL) - screenModeChangedTimer > waitTime))
{
mainMessageBoxState = 0;
mainMessageBox.setEnabled (false);
Lang & lang = Lang::getInstance ();
mainMessageBox.init (lang.getString ("Ok"));
revertScreenMode ();
}
else
{
Lang & lang = Lang::getInstance ();
int
timeToShow = waitTime - time (NULL) + screenModeChangedTimer;
// show timer in button
mainMessageBox.getButton (0)->setText (lang.getString ("Ok") +
" (" +
intToStr (timeToShow) + ")");
}
}
}
void
MenuStateOptionsGraphics::mouseClick (int x, int y,
MouseButton mouseButton)
{
Config & config = Config::getInstance ();
CoreData & coreData = CoreData::getInstance ();
SoundRenderer & soundRenderer = SoundRenderer::getInstance ();
if (mainMessageBox.getEnabled ())
{
int
button = 0;
if (mainMessageBox.mouseClick (x, y, button))
{
soundRenderer.playFx (coreData.getClickSoundA ());
if (button == 0)
{
if (mainMessageBoxState == 1)
{
mainMessageBoxState = 0;
mainMessageBox.setEnabled (false);
saveConfig ();
Lang & lang = Lang::getInstance ();
mainMessageBox.init (lang.getString ("Ok"));
//mainMenu->setState(new MenuStateOptions(program, mainMenu));
}
else
{
mainMessageBox.setEnabled (false);
Lang & lang = Lang::getInstance ();
mainMessageBox.init (lang.getString ("Ok"));
}
}
else
{
if (mainMessageBoxState == 1)
{
mainMessageBoxState = 0;
mainMessageBox.setEnabled (false);
Lang & lang = Lang::getInstance ();
mainMessageBox.init (lang.getString ("Ok"));
revertScreenMode ();
}
}
}
}
else if (buttonOk.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
Lang & lang = Lang::getInstance ();
bool
selectedFullscreenWindowed = checkBoxFullscreenWindowed.getValue ();
string
currentResolution =
config.getString ("ScreenWidth") + "x" +
config.getString ("ScreenHeight") + "-" +
intToStr (config.getInt ("ColorBits"));
string
selectedResolution = listBoxScreenModes.getSelectedItem ();
bool
currentFullscreenWindowed = config.getBool ("Windowed");
if (currentResolution != selectedResolution
|| currentFullscreenWindowed != selectedFullscreenWindowed)
{
changeVideoModeFullScreen (!selectedFullscreenWindowed);
const ModeInfo *
selectedMode = NULL;
for (vector < ModeInfo >::const_iterator it = modeInfos.begin ();
it != modeInfos.end (); ++it)
{
if ((*it).getString () == selectedResolution)
{
//config.setInt("ScreenWidth",(*it).width);
//config.setInt("ScreenHeight",(*it).height);
//config.setInt("ColorBits",(*it).depth);
selectedMode = &(*it);
}
}
if (selectedMode == NULL)
{ // if we cannot find the selectedResolution we try it with current one
for (vector < ModeInfo >::const_iterator it = modeInfos.begin ();
it != modeInfos.end (); ++it)
{
if ((*it).getString () == currentResolution)
{
//config.setInt("ScreenWidth",(*it).width);
//config.setInt("ScreenHeight",(*it).height);
//config.setInt("ColorBits",(*it).depth);
selectedMode = &(*it);
}
}
}
if (selectedMode == NULL)
{
throw
megaglest_runtime_error ("selectedMode == NULL");
}
#if defined(__APPLE__)
mainMessageBoxState = 1;
mainMessageBox.init (lang.getString ("Ok"),
lang.getString ("Cancel"));
screenModeChangedTimer = time (NULL);
showMessageBox (lang.getString ("RestartNeeded"),
lang.getString ("ResolutionChanged"), false);
#else
WindowGl *
window = this->program->getWindow ();
window->ChangeVideoMode (true,
selectedMode->width,
selectedMode->height,
!selectedFullscreenWindowed,
selectedMode->depth,
config.getInt ("DepthBits"),
config.getInt ("StencilBits"),
config.getBool ("HardwareAcceleration",
"false"),
config.getBool ("FullScreenAntiAliasing",
"false"),
strToFloat (listBoxGammaCorrection.
getSelectedItem ()));
Metrics::reload (this->program->getWindow ()->getScreenWidth (),
this->program->getWindow ()->getScreenHeight ());
this->mainMenu->init ();
mainMessageBoxState = 1;
mainMessageBox.init (lang.getString ("Ok"),
lang.getString ("Cancel"));
screenModeChangedTimer = time (NULL);
showMessageBox (lang.getString ("ResolutionChanged"),
lang.getString ("Notice"), false);
#endif
//No saveConfig() here! this is done by the messageBox
return;
}
saveConfig ();
return;
}
else if (buttonReturn.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
// reset the gamma to former value
string
currentGammaCorrection = config.getString ("GammaValue", "1.0");
string
selectedGammaCorrection = listBoxGammaCorrection.getSelectedItem ();
if (currentGammaCorrection != selectedGammaCorrection)
{
float
gammaValue = strToFloat (currentGammaCorrection);
if (gammaValue == 0.0f)
gammaValue = 1.0f;
if (gammaValue != 0.0)
{
program->getWindow ()->setGamma (gammaValue);
}
}
if (this->parentUI != NULL)
{
*this->parentUI = NULL;
delete *
this->
parentUI;
}
mainMenu->setState (new MenuStateRoot (program, mainMenu));
return;
}
else if (buttonKeyboardSetup.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
//mainMenu->setState(new MenuStateKeysetup(program, mainMenu)); // open keyboard shortcuts setup screen
//mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu)); // open keyboard shortcuts setup screen
//mainMenu->setState(new MenuStateOptionsNetwork(program, mainMenu)); // open keyboard shortcuts setup screen
mainMenu->setState (new MenuStateKeysetup (program, mainMenu, this->parentUI)); // open keyboard shortcuts setup screen
//showMessageBox("Not implemented yet", "Keyboard setup", false);
return;
}
else if (buttonAudioSection.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
mainMenu->setState (new MenuStateOptionsSound (program, mainMenu, this->parentUI)); // open keyboard shortcuts setup screen
return;
}
else if (buttonNetworkSettings.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
mainMenu->setState (new MenuStateOptionsNetwork (program, mainMenu, this->parentUI)); // open keyboard shortcuts setup screen
return;
}
else if (buttonMiscSection.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
mainMenu->setState (new MenuStateOptions (program, mainMenu, this->parentUI)); // open keyboard shortcuts setup screen
return;
}
else if (buttonVideoSection.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
//mainMenu->setState(new MenuStateOptionsGraphics(program, mainMenu,this->parentUI)); // open keyboard shortcuts setup screen
return;
}
else if (buttonAutoConfig.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
Renderer::getInstance ().autoConfig ();
//saveConfig();
mainMenu->setState (new MenuStateOptionsGraphics (program, mainMenu));
return;
}
else if (buttonVideoInfo.mouseClick (x, y))
{
soundRenderer.playFx (coreData.getClickSoundA ());
mainMenu->setState (new MenuStateGraphicInfo (program, mainMenu));
return;
}
else
{
listBoxSelectionType.mouseClick (x, y);
listBoxShadows.mouseClick (x, y);
listBoxAnimatedTilesetObjects.mouseClick (x, y);
listBoxShadowTextureSize.mouseClick (x, y);
listBoxShadowIntensity.mouseClick (x, y);
listBoxFilter.mouseClick (x, y);
listBoxFilterMaxAnisotropy.mouseClick (x, y);
if (listBoxGammaCorrection.mouseClick (x, y))
{
float
gammaValue =
strToFloat (listBoxGammaCorrection.getSelectedItem ());
if (gammaValue != 0.0)
{
program->getWindow ()->setGamma (gammaValue);
}
}
checkBoxTextures3D.mouseClick (x, y);
checkBoxUnitParticles.mouseClick (x, y);
checkBoxTilesetParticles.mouseClick (x, y);
checkBoxMapPreview.mouseClick (x, y);
listBoxLights.mouseClick (x, y);
listBoxScreenModes.mouseClick (x, y);
checkBoxFullscreenWindowed.mouseClick (x, y);
checkBoxEnableTextureCompression.mouseClick (x, y);
checkBoxRainEffect.mouseClick (x, y);
checkBoxRainEffectMenu.mouseClick (x, y);
checkBoxVideos.mouseClick (x, y);
}
}
void
MenuStateOptionsGraphics::mouseMove (int x, int y, const MouseState * ms)
{
if (mainMessageBox.getEnabled ())
{
mainMessageBox.mouseMove (x, y);
}
buttonOk.mouseMove (x, y);
buttonReturn.mouseMove (x, y);
buttonKeyboardSetup.mouseMove (x, y);
buttonAudioSection.mouseMove (x, y);
buttonNetworkSettings.mouseMove (x, y);
buttonMiscSection.mouseMove (x, y);
buttonVideoSection.mouseMove (x, y);
buttonAutoConfig.mouseMove (x, y);
buttonVideoInfo.mouseMove (x, y);
listBoxFilter.mouseMove (x, y);
listBoxFilterMaxAnisotropy.mouseMove (x, y);
listBoxGammaCorrection.mouseMove (x, y);
listBoxShadowIntensity.mouseMove (x, y);
listBoxSelectionType.mouseMove (x, y);
listBoxShadows.mouseMove (x, y);
checkBoxTextures3D.mouseMove (x, y);
checkBoxUnitParticles.mouseMove (x, y);
checkBoxTilesetParticles.mouseMove (x, y);
labelAnimatedTilesetObjects.mouseMove (x, y);
listBoxAnimatedTilesetObjects.mouseMove (x, y);
checkBoxTilesetParticles.mouseMove (x, y);
checkBoxMapPreview.mouseMove (x, y);
listBoxLights.mouseMove (x, y);
listBoxScreenModes.mouseMove (x, y);
checkBoxFullscreenWindowed.mouseMove (x, y);
checkBoxEnableTextureCompression.mouseMove (x, y);
checkBoxRainEffect.mouseMove (x, y);
checkBoxRainEffectMenu.mouseMove (x, y);
checkBoxVideos.mouseMove (x, y);
}
//bool MenuStateOptionsGraphics::isInSpecialKeyCaptureEvent() {
// return (activeInputLabel != NULL);
//}
//
//void MenuStateOptionsGraphics::keyDown(SDL_KeyboardEvent key) {
// if(activeInputLabel != NULL) {
// keyDownEditLabel(key, &activeInputLabel);
// }
//}
void
MenuStateOptionsGraphics::keyPress (SDL_KeyboardEvent c)
{
// if(activeInputLabel != NULL) {
// //printf("[%d]\n",c); fflush(stdout);
// if( &labelPlayerName == activeInputLabel ||
// &labelTransifexUser == activeInputLabel ||
// &labelTransifexPwd == activeInputLabel ||
// &labelTransifexI18N == activeInputLabel) {
// textInputEditLabel(c, &activeInputLabel);
// }
// }
// else {
Config & configKeys =
Config::getInstance (std::pair < ConfigType,
ConfigType > (cfgMainKeys, cfgUserKeys));
if (isKeyPressed (configKeys.getSDLKey ("SaveGUILayout"), c) == true)
{
GraphicComponent::saveAllCustomProperties (containerName);
//Lang &lang= Lang::getInstance();
//console.addLine(lang.getString("GUILayoutSaved") + " [" + (saved ? lang.getString("Yes") : lang.getString("No"))+ "]");
}
// }
}
void
MenuStateOptionsGraphics::render ()
{
Renderer & renderer = Renderer::getInstance ();
if (mainMessageBox.getEnabled ())
{
renderer.renderMessageBox (&mainMessageBox);
}
else
{
renderer.renderButton (&buttonOk);
renderer.renderButton (&buttonReturn);
renderer.renderButton (&buttonKeyboardSetup);
renderer.renderButton (&buttonVideoSection);
renderer.renderButton (&buttonAudioSection);
renderer.renderButton (&buttonMiscSection);
renderer.renderButton (&buttonNetworkSettings);
renderer.renderButton (&buttonAutoConfig);
renderer.renderButton (&buttonVideoInfo);
renderer.renderListBox (&listBoxShadows);
renderer.renderCheckBox (&checkBoxTextures3D);
renderer.renderCheckBox (&checkBoxUnitParticles);
renderer.renderCheckBox (&checkBoxTilesetParticles);
renderer.renderCheckBox (&checkBoxMapPreview);
renderer.renderListBox (&listBoxLights);
renderer.renderListBox (&listBoxFilter);
renderer.renderListBox (&listBoxFilterMaxAnisotropy);
renderer.renderListBox (&listBoxGammaCorrection);
renderer.renderListBox (&listBoxShadowIntensity);
renderer.renderLabel (&labelShadows);
renderer.renderLabel (&labelTextures3D);
renderer.renderLabel (&labelUnitParticles);
renderer.renderLabel (&labelTilesetParticles);
renderer.renderListBox (&listBoxAnimatedTilesetObjects);
renderer.renderLabel (&labelAnimatedTilesetObjects);
renderer.renderLabel (&labelMapPreview);
renderer.renderLabel (&labelLights);
renderer.renderLabel (&labelFilter);
renderer.renderLabel (&labelFilterMaxAnisotropy);
renderer.renderLabel (&labelGammaCorrection);
renderer.renderLabel (&labelShadowIntensity);
renderer.renderLabel (&labelScreenModes);
renderer.renderListBox (&listBoxScreenModes);
renderer.renderLabel (&labelFullscreenWindowed);
renderer.renderCheckBox (&checkBoxFullscreenWindowed);
renderer.renderLabel (&labelEnableTextureCompression);
renderer.renderCheckBox (&checkBoxEnableTextureCompression);
renderer.renderLabel (&labelRainEffect);
renderer.renderCheckBox (&checkBoxRainEffect);
renderer.renderLabel (&labelRainEffectSeparator);
renderer.renderCheckBox (&checkBoxRainEffectMenu);
renderer.renderLabel (&labelShadowTextureSize);
renderer.renderListBox (&listBoxShadowTextureSize);
renderer.renderLabel (&labelSelectionType);
renderer.renderListBox (&listBoxSelectionType);
renderer.renderLabel (&labelVideos);
renderer.renderCheckBox (&checkBoxVideos);
}
renderer.renderConsole (&console);
if (program != NULL)
program->renderProgramMsgBox ();
}
void
MenuStateOptionsGraphics::saveConfig ()
{
Config & config = Config::getInstance ();
Lang & lang = Lang::getInstance ();
//setActiveInputLable(NULL);
int
selectionTypeindex = listBoxSelectionType.getSelectedItemIndex ();
if (selectionTypeindex == 0)
{
config.setString ("SelectionType", Config::selectBufPicking);
}
else if (selectionTypeindex == 1)
{
config.setString ("SelectionType", Config::colorPicking);
}
else if (selectionTypeindex == 2)
{
config.setString ("SelectionType", Config::frustumPicking);
}
int
index = listBoxShadows.getSelectedItemIndex ();
config.setString ("Shadows",
Renderer::shadowsToStr (static_cast <
Renderer::Shadows > (index)));
string
texSizeString = listBoxShadowTextureSize.getSelectedItem ();
config.setInt ("ShadowTextureSize", strToInt (texSizeString));
config.setBool ("Windowed", checkBoxFullscreenWindowed.getValue ());
config.setString ("Filter", listBoxFilter.getSelectedItem ());
config.setInt ("FilterMaxAnisotropy",
strToInt (listBoxFilterMaxAnisotropy.
getSelectedItem ()));
config.setFloat ("GammaValue",
strToFloat (listBoxGammaCorrection.
getSelectedItem ()));
config.setFloat ("ShadowIntensity",
strToFloat (listBoxShadowIntensity.
getSelectedItem ()));
config.setBool ("Textures3D", checkBoxTextures3D.getValue ());
config.setBool ("UnitParticles", (checkBoxUnitParticles.getValue ()));
config.setBool ("TilesetParticles",
(checkBoxTilesetParticles.getValue ()));
config.setBool ("MapPreview", checkBoxMapPreview.getValue ());
config.setInt ("MaxLights", listBoxLights.getSelectedItemIndex () + 1);
if (listBoxAnimatedTilesetObjects.getSelectedItem () == "")
{
config.setInt ("AnimatedTilesetObjects", -1);
}
else
{
config.setInt ("AnimatedTilesetObjects",
atoi (listBoxAnimatedTilesetObjects.getSelectedItem ().
c_str ()));
}
config.setBool ("RainEffect", checkBoxRainEffect.getValue ());
config.setBool ("RainEffectMenu", checkBoxRainEffectMenu.getValue ());
config.setBool ("EnableTextureCompression",
checkBoxEnableTextureCompression.getValue ());
config.setBool ("EnableVideos", checkBoxVideos.getValue ());
string
currentResolution =
config.getString ("ScreenWidth") + "x" +
config.getString ("ScreenHeight");
string
selectedResolution = listBoxScreenModes.getSelectedItem ();
if (currentResolution != selectedResolution)
{
for (vector < ModeInfo >::const_iterator it = modeInfos.begin ();
it != modeInfos.end (); ++it)
{
if ((*it).getString () == selectedResolution)
{
config.setInt ("ScreenWidth", (*it).width);
config.setInt ("ScreenHeight", (*it).height);
config.setInt ("ColorBits", (*it).depth);
}
}
}
config.save ();
if (config.getBool ("DisableLuaSandbox", "false") == true)
{
LuaScript::setDisableSandbox (true);
}
Renderer::getInstance ().loadConfig ();
console.addLine (lang.getString ("SettingsSaved"));
}
//void MenuStateOptionsGraphics::setActiveInputLable(GraphicLabel *newLable) {
// MenuState::setActiveInputLabel(newLable,&activeInputLabel);
//
// if(newLable == &labelTransifexPwd) {
// labelTransifexPwd.setIsPassword(false);
// }
// else {
// labelTransifexPwd.setIsPassword(true);
// }
//}
}
} //end namespace