diff --git a/code/nel/include/nel/gui/ctrl_button.h b/code/nel/include/nel/gui/ctrl_button.h index 02b827329..1910ea72a 100644 --- a/code/nel/include/nel/gui/ctrl_button.h +++ b/code/nel/include/nel/gui/ctrl_button.h @@ -51,7 +51,7 @@ namespace NLGUI xmlNodePtr serialize( xmlNodePtr parentNode, const char *type ) const; // Init part - virtual bool parse (xmlNodePtr cur,CInterfaceGroup * parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup * parentGroup); virtual void updateCoords(); diff --git a/code/nel/include/nel/gui/ctrl_text_button.h b/code/nel/include/nel/gui/ctrl_text_button.h index 4f5251a8b..69898639d 100644 --- a/code/nel/include/nel/gui/ctrl_text_button.h +++ b/code/nel/include/nel/gui/ctrl_text_button.h @@ -49,7 +49,7 @@ namespace NLGUI xmlNodePtr serialize( xmlNodePtr parentNode, const char *type ) const; // Init part - virtual bool parse (xmlNodePtr cur,CInterfaceGroup * parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup * parentGroup); virtual void checkCoords(); virtual void updateCoords(); diff --git a/code/nel/include/nel/gui/dbgroup_combo_box.h b/code/nel/include/nel/gui/dbgroup_combo_box.h index 1aac8bb1f..87e6d758a 100644 --- a/code/nel/include/nel/gui/dbgroup_combo_box.h +++ b/code/nel/include/nel/gui/dbgroup_combo_box.h @@ -64,7 +64,7 @@ namespace NLGUI uint getTextPos(uint nId) const; const ucstring &getTexture(uint i) const; void setGrayed(uint i, bool g); - const bool getGrayed(uint i) const; + bool getGrayed(uint i) const; void removeText(uint nPos); uint getNumTexts() const {return (uint)_Texts.size();} void sortText(); diff --git a/code/nel/src/gui/dbgroup_combo_box.cpp b/code/nel/src/gui/dbgroup_combo_box.cpp index 572d69ad4..184829e4c 100644 --- a/code/nel/src/gui/dbgroup_combo_box.cpp +++ b/code/nel/src/gui/dbgroup_combo_box.cpp @@ -321,7 +321,7 @@ namespace NLGUI } // *************************************************************************** - const bool CDBGroupComboBox::getGrayed(uint i) const + bool CDBGroupComboBox::getGrayed(uint i) const { if(i<_Grayed.size()) return _Grayed[i]; diff --git a/code/ryzom/client/src/interface_v3/interface_3d_scene.cpp b/code/ryzom/client/src/interface_v3/interface_3d_scene.cpp index d7fec407b..bb15d8d4b 100644 --- a/code/ryzom/client/src/interface_v3/interface_3d_scene.cpp +++ b/code/ryzom/client/src/interface_v3/interface_3d_scene.cpp @@ -786,7 +786,7 @@ CInterface3DCharacter::~CInterface3DCharacter() } // ---------------------------------------------------------------------------- -bool CInterface3DCharacter::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DCharacter::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; @@ -808,7 +808,7 @@ bool CInterface3DCharacter::parse (xmlNodePtr cur, CInterface3DScene *parentGrou _Char3D = new CCharacter3D; _Char3D->copyAnimation(copyAnim); - _Char3D->init (parentGroup->getScene()); + _Char3D->init (dynamic_cast(parentGroup)->getScene()); _Char3D->setPos (pos.x, pos.y, pos.z); _Char3D->setRotEuler ( rot.x * ((float)(NLMISC::Pi / 180)), rot.y * ((float)(NLMISC::Pi / 180)), @@ -1073,7 +1073,7 @@ CInterface3DIG::~CInterface3DIG() } // ---------------------------------------------------------------------------- -bool CInterface3DIG::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DIG::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; @@ -1095,8 +1095,8 @@ bool CInterface3DIG::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) setRotX (_Rot.x); setRotY (_Rot.y); setRotZ (_Rot.z); - _IG->addToScene (*parentGroup->getScene(), CViewRenderer::getInstance()->getDriver() ); - parentGroup->getScene()->setToGlobalInstanceGroup (_IG); + _IG->addToScene (*dynamic_cast(parentGroup)->getScene(), CViewRenderer::getInstance()->getDriver() ); + dynamic_cast(parentGroup)->getScene()->setToGlobalInstanceGroup (_IG); return true; } @@ -1235,7 +1235,7 @@ CInterface3DShape::~CInterface3DShape() } // ---------------------------------------------------------------------------- -bool CInterface3DShape::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DShape::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; @@ -1249,7 +1249,7 @@ bool CInterface3DShape::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) ptr = xmlGetProp (cur, (xmlChar*)"name"); if (ptr) _Name = toLower((const char*)ptr); - _Instance = parentGroup->getScene()->createInstance(_Name); + _Instance = dynamic_cast(parentGroup)->getScene()->createInstance(_Name); if (_Instance.empty()) return false; @@ -1385,7 +1385,7 @@ void CInterface3DShape::setName (const std::string &ht) // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- -bool CInterface3DCamera::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DCamera::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; @@ -1422,12 +1422,12 @@ CInterface3DLight::~CInterface3DLight() } // ---------------------------------------------------------------------------- -bool CInterface3DLight::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DLight::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; - _Light = parentGroup->getScene()->createPointLight(); + _Light = dynamic_cast(parentGroup)->getScene()->createPointLight(); CXMLAutoPtr ptr((const char*)xmlGetProp (cur, (xmlChar*)"pos")); if (ptr) _Pos = convertVector(ptr); @@ -1514,7 +1514,7 @@ CInterface3DFX::~CInterface3DFX() } // ---------------------------------------------------------------------------- -bool CInterface3DFX::parse (xmlNodePtr cur, CInterface3DScene *parentGroup) +bool CInterface3DFX::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup) { if (!CInterfaceElement::parse(cur, parentGroup)) return false; diff --git a/code/ryzom/client/src/interface_v3/interface_3d_scene.h b/code/ryzom/client/src/interface_v3/interface_3d_scene.h index cabfb0184..5343390c8 100644 --- a/code/ryzom/client/src/interface_v3/interface_3d_scene.h +++ b/code/ryzom/client/src/interface_v3/interface_3d_scene.h @@ -148,7 +148,7 @@ public: CInterface3DCharacter(); virtual ~CInterface3DCharacter(); - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); virtual void checkCoords(); @@ -236,7 +236,7 @@ public: virtual ~CInterface3DShape(); - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); NL3D::UInstance getShape() { return _Instance; } @@ -295,7 +295,7 @@ public: virtual ~CInterface3DIG(); - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); NL3D::UInstanceGroup *getIG() { return _IG; } @@ -357,7 +357,7 @@ public: _Dist = 0; } - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); float getFOV() { return _FOV; } NLMISC::CVector getPos() { return _Pos; } NLMISC::CVector getTarget() { return _Target; } @@ -436,7 +436,7 @@ public: virtual ~CInterface3DLight(); - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); float getPosX() const { return _Pos.x; } float getPosY() const { return _Pos.y; } @@ -498,7 +498,7 @@ public: virtual ~CInterface3DFX(); - virtual bool parse (xmlNodePtr cur, CInterface3DScene *parentGroup); + virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup); virtual void checkCoords(); diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp index 1e1e19521..780e6a87c 100644 --- a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp +++ b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.cpp @@ -38,29 +38,32 @@ void CDisplaySettingsDetailsWidget::load() { CSystem &s = CSystem::GetInstance(); - landscapeSlider->setValue( getQuality( qualityToLandscapeThreshold, s.config.getFloat( "LandscapeThreshold" ) ) ); - landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToZFar, s.config.getFloat( "Vision" ) ) ) ); - landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToLandscapeTileNear, s.config.getFloat( "LandscapeTileNear" ) ) ) ); - landscapeSlider->setValue( std::min( landscapeSlider->value(), getQuality( qualityToMicrovegetDensity, s.config.getFloat( "MicroVegetDensity" ) ) ) ); - - charactersSlider->setValue( getQuality( qualityToSkinNbMaxPoly, s.config.getInt( "SkinNbMaxPoly" ) ) ); - charactersSlider->setValue( std::min( charactersSlider->value(), getQuality( qualityToNbMaxSkeletonNotCLod, s.config.getInt( "NbMaxSkeletonNotCLod" ) ) ) ); - charactersSlider->setValue( std::min( charactersSlider->value(), getQuality( qualityToCharacterFarClip, s.config.getFloat( "CharacterFarClip" ) ) ) ); - - fxSlider->setValue( getQuality( qualityToFxNbMaxPoly, s.config.getInt( "FxNbMaxPoly" ) ) ); - - int hdTextureInstalled = s.config.getInt( "HDTextureInstalled" ); - if( hdTextureInstalled == 1 ) - texturesSlider->setMaximum( QUALITY_NORMAL ); + // landscape + landscapeSlider->setValue(getQualityPresetFloat("LandscapeTileNear")); + landscapeSlider->setValue(std::min(landscapeSlider->value(), getQualityPresetFloat("LandscapeThreshold"))); + landscapeSlider->setValue(std::min(landscapeSlider->value(), getQualityPresetFloat("Vision"))); + landscapeSlider->setValue(std::min(landscapeSlider->value(), getQualityPresetFloat("MicroVegetDensity"))); + + // FX + fxSlider->setValue(getQualityPresetInteger("FxNbMaxPoly")); + + // characters + charactersSlider->setValue(getQualityPresetInteger("SkinNbMaxPoly")); + charactersSlider->setValue(std::min(charactersSlider->value(), getQualityPresetInteger("NbMaxSkeletonNotCLod"))); + charactersSlider->setValue(std::min(charactersSlider->value(), getQualityPresetFloat("CharacterFarClip"))); + + int hdTextureInstalled = s.config.getInt("HDTextureInstalled"); + if (hdTextureInstalled == 1) + texturesSlider->setMaximum(QUALITY_NORMAL); else - texturesSlider->setMaximum( QUALITY_MEDIUM ); + texturesSlider->setMaximum(QUALITY_MEDIUM); // Comment taken from the original config tool: // NB: if the player changes its client.cfg, mixing HDEntityTexture=1 and DivideTextureSizeBy2=1, it will // result to a low quality! - if( s.config.getInt( "DivideTextureSizeBy2" ) ) + if (s.config.getInt("DivideTextureSizeBy2")) texturesSlider->setValue( QUALITY_LOW ); - else if( s.config.getInt( "HDEntityTexture" ) && ( hdTextureInstalled == 1 ) ) + else if( s.config.getInt("HDEntityTexture") && ( hdTextureInstalled == 1 ) ) texturesSlider->setValue( QUALITY_NORMAL ); else texturesSlider->setValue( QUALITY_MEDIUM ); @@ -70,38 +73,30 @@ void CDisplaySettingsDetailsWidget::save() { CSystem &s = CSystem::GetInstance(); - s.config.setFloat( "Vision", qualityToZFar[ landscapeSlider->value() ] ); - s.config.setFloat( "LandscapeTileNear", qualityToLandscapeTileNear[ landscapeSlider->value() ] ); - s.config.setFloat( "LandscapeThreshold", qualityToLandscapeThreshold[ landscapeSlider->value() ] ); - - if( landscapeSlider->value() > QUALITY_LOW ) - s.config.setInt( "MicroVeget", 1 ); - else - s.config.setInt( "MicroVeget", 0 ); - - s.config.setFloat( "MicroVegetDensity", qualityToMicrovegetDensity[ landscapeSlider->value() ] ); - - - s.config.setInt( "SkinNbMaxPoly", qualityToSkinNbMaxPoly[ charactersSlider->value() ] ); - s.config.setInt( "NbMaxSkeletonNotCLod", qualityToNbMaxSkeletonNotCLod[ charactersSlider->value() ] ); - s.config.setFloat( "CharacterFarClip", qualityToCharacterFarClip[ charactersSlider->value() ] ); - - - s.config.setInt( "FxNbMaxPoly", qualityToFxNbMaxPoly[ fxSlider->value() ] ); - if( fxSlider->value() > QUALITY_LOW ) - { - s.config.setInt( "Shadows", 1 ); - s.config.setInt( "Bloom", 1 ); - s.config.setInt( "SquareBloom", 1 ); - } - else - { - s.config.setInt( "Shadows", 0 ); - s.config.setInt( "Bloom", 0 ); - s.config.setInt( "SquareBloom", 0 ); - } - - + // landscape + setFloatPreset("LandscapeTileNear", landscapeSlider->value()); + setFloatPreset("LandscapeThreshold", landscapeSlider->value()); + setFloatPreset("Vision", landscapeSlider->value()); + setIntegerPreset("MicroVeget", landscapeSlider->value()); + setFloatPreset("MicroVegetDensity", landscapeSlider->value()); + + // FX + setIntegerPreset("FxNbMaxPoly", fxSlider->value()); + setIntegerPreset("Cloud", fxSlider->value()); + setFloatPreset("CloudQuality", fxSlider->value()); + setIntegerPreset("CloudUpdate", fxSlider->value()); + setIntegerPreset("Shadows", fxSlider->value()); + setIntegerPreset("FXAA", fxSlider->value()); + setIntegerPreset("Bloom", fxSlider->value()); + setIntegerPreset("SquareBloom", fxSlider->value()); + setFloatPreset("DensityBloom", fxSlider->value()); + + // characters + setIntegerPreset("SkinNbMaxPoly", charactersSlider->value()); + setIntegerPreset("NbMaxSkeletonNotCLod", charactersSlider->value()); + setFloatPreset("CharacterFarClip", charactersSlider->value()); + + // misc if( texturesSlider->value() == QUALITY_NORMAL ) s.config.setInt( "HDEntityTexture", 1 ); else if( texturesSlider->value() == QUALITY_LOW ) @@ -144,71 +139,89 @@ void CDisplaySettingsDetailsWidget::onTexturesSliderChange( int value ) emit changed(); } -const float CDisplaySettingsDetailsWidget::qualityToZFar[ QUALITY_STEP ] = +float CDisplaySettingsDetailsWidget::getPresetFloat(const std::string &variable, sint preset) { - 200.0f, - 400.0f, - 500.0f, - 800.0f -}; + CSystem &s = CSystem::GetInstance(); -const float CDisplaySettingsDetailsWidget::qualityToLandscapeTileNear[ QUALITY_STEP ] = -{ - 20.0f, - 100.0f, - 150.0f, - 200.0f -}; + // preset name + std::string varName = variable + NLMISC::toString("_ps%d", preset); + + return s.config.getFloat(varName.c_str()); +} -const float CDisplaySettingsDetailsWidget::qualityToLandscapeThreshold[ QUALITY_STEP ] = +int CDisplaySettingsDetailsWidget::getPresetInteger(const std::string &variable, sint preset) { - 100.0f, - 1000.0f, - 2000.0f, - 3000.0f -}; + CSystem &s = CSystem::GetInstance(); + + // preset name + std::string varName = variable + NLMISC::toString("_ps%d", preset); + return s.config.getInt(varName.c_str()); +} -const float CDisplaySettingsDetailsWidget::qualityToMicrovegetDensity[ QUALITY_STEP ] = +void CDisplaySettingsDetailsWidget::setFloatPreset(const std::string &variable, int preset) { - 10.0f, - 30.0f, - 80.0f, - 100.0f -}; + CSystem &s = CSystem::GetInstance(); + // take value of the preset and set it to variable + s.config.setFloat(variable.c_str(), getPresetFloat(variable, preset)); +} -const sint32 CDisplaySettingsDetailsWidget::qualityToSkinNbMaxPoly[ QUALITY_STEP ] = +void CDisplaySettingsDetailsWidget::setIntegerPreset(const std::string &variable, int preset) { - 10000, - 70000, - 100000, - 200000 -}; + CSystem &s = CSystem::GetInstance(); -const sint32 CDisplaySettingsDetailsWidget::qualityToNbMaxSkeletonNotCLod[ QUALITY_STEP ] = -{ - 10, - 50, - 125, - 255 -}; + // take value of the preset and set it to variable + s.config.setInt(variable.c_str(), getPresetInteger(variable, preset)); +} -const float CDisplaySettingsDetailsWidget::qualityToCharacterFarClip[ QUALITY_STEP ] = +int CDisplaySettingsDetailsWidget::getQualityPresetFloat(const std::string &variable) { - 50.0f, - 100.0f, - 200.0f, - 500.0f -}; + CSystem &s = CSystem::GetInstance(); -const sint32 CDisplaySettingsDetailsWidget::qualityToFxNbMaxPoly[ QUALITY_STEP ] = + float value = s.config.getFloat(variable.c_str()); + + // ascending order + if (getPresetFloat(variable, 0) < getPresetFloat(variable, QUALITY_STEP-1)) + { + uint32 i = 0; + while((i < QUALITY_STEP) && (getPresetFloat(variable, i) < value) ) + i++; + return i; + } + // descending order + else + { + uint32 i = 0; + while((i < QUALITY_STEP) && (getPresetFloat(variable, i) > value)) + i++; + return i; + } +} + +int CDisplaySettingsDetailsWidget::getQualityPresetInteger(const std::string &variable) { - 2000, - 10000, - 20000, - 50000 -}; + CSystem &s = CSystem::GetInstance(); + + float value = s.config.getFloat(variable.c_str()); + + // ascending order + if (getPresetFloat(variable, 0) < getPresetFloat(variable, QUALITY_STEP-1)) + { + uint32 i = 0; + while((i < QUALITY_STEP) && (getPresetFloat(variable, i) < value) ) + i++; + return i; + } + // descending order + else + { + uint32 i = 0; + while((i < QUALITY_STEP) && (getPresetFloat(variable, i) > value)) + i++; + return i; + } +} QString CDisplaySettingsDetailsWidget::getQualityString( uint32 quality ) { @@ -245,7 +258,7 @@ QString CDisplaySettingsDetailsWidget::getTextureQualityString( uint32 quality ) break; case TEXQUALITY_HIGH: - return tr( "High (128 MB)" ); + return tr( "High (more than 128 MB)" ); break; default: diff --git a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h index 2ae1de132..f831378f1 100644 --- a/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h +++ b/code/ryzom/tools/client/client_config_qt/display_settings_details_widget.h @@ -58,30 +58,48 @@ private slots: private: /** - @brief Looks up and returns the "quality" ( see the enums on the top), that belongs to the specified value. - @param table - The lookup table you want to use. - @param value - The value that we want to look up. + @brief Looks up and returns the "quality" ( see the enums on the top), that belongs to the specified float value. + @param variable - The config variable. @return Returns the "quality" that best fits the specified value. */ - template< typename T > - int getQuality( const T *table, T value ) - { - if( table[ 0 ] < table[ QUALITY_STEP - 1 ] ) - { - uint32 i = 0; - while( ( i < QUALITY_STEP ) && ( table[ i ] < value ) ) - i++; - return i; - } - else - { - uint32 i = 0; - while( ( i < QUALITY_STEP ) && ( table[ i ] > value ) ) - i++; - return i; - } - } + int getQualityPresetFloat(const std::string &variable); + /** + @brief Looks up and returns the "quality" ( see the enums on the top), that belongs to the specified integer value. + @param variable - The config variable. + @return Returns the "quality" that best fits the specified value. + */ + int getQualityPresetInteger(const std::string &variable); + + /** + @brief Return the float value of the variable depending on the preset. + @param variable - The config variable. + @param preset - The preset to use (0-3). + @return Returns the float value. + */ + float getPresetFloat(const std::string &variable, sint preset); + + /** + @brief Return the integer value of the variable depending on the preset. + @param variable - The config variable. + @param preset - The preset to use (0-3). + @return Returns the integer value. + */ + int getPresetInteger(const std::string &variable, sint preset); + + /** + @brief Define the float value of the variable depending on the predefined preset. + @param variable - The config variable. + @param preset - The preset to use (0-3). + */ + void setFloatPreset(const std::string &variable, int preset); + + /** + @brief Define the integer value of the variable depending on the predefined preset. + @param variable - The config variable. + @param preset - The preset to use (0-3). + */ + void setIntegerPreset(const std::string &variable, int preset); /** @brief Retrieves the string that belongs to the specified quality. @@ -97,22 +115,6 @@ private: @return Returns a string describing the texture quality, Returns an empty string if an invalid value is specified. */ static QString getTextureQualityString( uint32 quality ); - - - ///////////////////////// Landscape values /////////////////////// - static const float qualityToZFar[ QUALITY_STEP ]; - static const float qualityToLandscapeTileNear[ QUALITY_STEP ]; - static const float qualityToLandscapeThreshold[ QUALITY_STEP ]; - static const float qualityToMicrovegetDensity[ QUALITY_STEP ]; - - //////////////////////// Character values //////////////////////// - static const sint32 qualityToSkinNbMaxPoly[ QUALITY_STEP ]; - static const sint32 qualityToNbMaxSkeletonNotCLod[ QUALITY_STEP ]; - static const float qualityToCharacterFarClip[ QUALITY_STEP ]; - - /////////////////////// FX values //////////////////////////////// - static const sint32 qualityToFxNbMaxPoly[ QUALITY_STEP ]; - }; #endif // DISPLAYSETTINGSDETAILSWIDGET_H