khanat-opennel-code/code/ryzom/tools/sheets_packer/sheets_packer_cfg.cpp
2010-06-12 12:17:29 +02:00

464 lines
13 KiB
C++

// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
/////////////
// INCLUDE //
/////////////
#include "stdpch.h"
#if defined(NL_OS_WINDOWS)
#include <windows.h>
#endif
// Misc.
#include "nel/misc/config_file.h"
#include "nel/misc/bit_mem_stream.h"
// Client.
#include "sheets_packer_cfg.h"
#include "debug_client.h"
// 3D Interface.
//#include "nel/3d/u_driver.h"
//#include "nel/3d/u_scene.h"
// Game Share.
#include "game_share/time_weather_season/time_and_season.h"
///////////
// MACRO //
///////////
//-----------------------------------------------
/// Macro to read a Bool from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_BOOL(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
/* Value found, set the Variable */ \
if(varPtr) \
AppCfg.variableName = varPtr->asInt() ? true : false; \
/* Use the Default Value */ \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
//-----------------------------------------------
/// Macro to read an Int from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_INT(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
/* Value found, set the Variable */ \
if(varPtr) \
AppCfg.variableName = varPtr->asInt(); \
/* Use the Default Value */ \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
//-----------------------------------------------
/// Macro to read a Float from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_FLOAT(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
/* Value found, set the Variable */ \
if(varPtr) \
AppCfg.variableName = varPtr->asFloat(); \
/* Use the Default Value */ \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
//-----------------------------------------------
/// Macro to read a Double from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_DOUBLE(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
/* Value found, set the Variable */ \
if(varPtr) \
AppCfg.variableName = varPtr->asDouble(); \
/* Use the Default Value */ \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
//-----------------------------------------------
/// Macro to read a String from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_STRING(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
/* Value found, set the Variable */ \
if(varPtr) \
AppCfg.variableName = varPtr->asString(); \
/* Use the Default Value */ \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
//-----------------------------------------------
/// Macro to read a CVector from the CFG.
/// variableName : Variable Name to Read and Set.
//-----------------------------------------------
#define READ_CVECTOR(variableName) \
/* Read the Variable Value From Script */ \
varPtr = AppCfg.ConfigFile.getVarPtr(#variableName); \
if(varPtr) \
{ \
/* Check params */ \
if(varPtr->size()==3) \
{ \
AppCfg.variableName.x = varPtr->asFloat(0); \
AppCfg.variableName.y = varPtr->asFloat(1); \
AppCfg.variableName.z = varPtr->asFloat(2); \
} \
else \
nlwarning("CFG: Bad params for '"#variableName"' !!!"); \
} \
else \
nlwarning("CFG: Default value used for '"#variableName"' !!!"); \
///////////
// USING //
///////////
using namespace NLMISC;
//using namespace NL3D;
////////////
// GLOBAL //
////////////
CClientConfig AppCfg;
const std::string ConfigFileName = "sheets_packer.cfg";
////////////
// EXTERN //
////////////
//extern NL3D::UScene *Scene;
//extern NL3D::UDriver *Driver;
extern CRyzomTime RT;
/////////////
// METHODS //
/////////////
//---------------------------------------------------
// CClientConfig :
// Constructor.
//---------------------------------------------------
CClientConfig::CClientConfig()
{
SaveConfig = false;
PositionX = 0;
PositionY = 0;
Frequency = 60;
Windowed = false; // Default is windowed mode.
Width = 800; // Default Width for the window.
Height = 600; // Default Height for the window.
Depth = 32; // Default Bit per Pixel.
Contrast = 0.f; // Default Monitor Contrast.
Luminosity = 0.f; // Default Monitor Luminosity.
Gamma = 0.f; // Default Monitor Gamma.
PreDataPath.push_back("../../client/data/gamedev/language/"); // Default Path for the language data
DataPath.push_back("../../client/data/"); // Default Path for the Data.
DataPath.push_back("../../common/data_leveldesign/"); // Default Path for the Level Design Directory.
DataPath.push_back("../../common/data_common/"); // Default Path for the Level Design Directory.
UpdatePackedSheet = true; // Update packed sheet if needed
SceneName = "";
IdFilePath = "";
LanguageCode = "en"; // Default to english
FPExceptions = false; // Disable Floating Point Exceptions.
}// CClientConfig //
//---------------------------------------------------
// load :
// Load the client config file.
//---------------------------------------------------
void setValues()
{
nlinfo ("reloading the config file!");
CConfigFile::CVar *varPtr = 0;
///////////////////
// WINDOW CONFIG //
// Mode.
// SaveConfig
varPtr = AppCfg.ConfigFile.getVarPtr ("SaveConfig");
if (varPtr)
AppCfg.SaveConfig = varPtr->asInt() ? true : false;
else
nlwarning ("Default value used for 'SaveConfig' !!!");
// Window Positon
varPtr = AppCfg.ConfigFile.getVarPtr ("PositionX");
if (varPtr)
AppCfg.PositionX = varPtr->asInt();
else
nlwarning ("Default value used for 'PositionX' !!!");
varPtr = AppCfg.ConfigFile.getVarPtr ("PositionY");
if (varPtr)
AppCfg.PositionY = varPtr->asInt();
else
nlwarning ("Default value used for 'PositionY' !!!");
// Window frequency
varPtr = AppCfg.ConfigFile.getVarPtr ("Frequency");
if (varPtr)
AppCfg.Frequency = varPtr->asInt();
else
nlwarning ("Default value used for 'Frequency' !!!");
try
{
CConfigFile::CVar &cvFullScreen = AppCfg.ConfigFile.getVar("FullScreen");
AppCfg.Windowed = cvFullScreen.asInt() ? false : true;
}
catch(EUnknownVar &) {nlwarning("Default value used for 'Fullscreen' !!!");}
// Width
READ_INT(Width)
// Height
READ_INT(Height)
// Depth : Bit Per Pixel
READ_INT(Depth)
// Contrast
READ_FLOAT(Contrast)
// Luminosity
READ_FLOAT(Luminosity)
// Gamma
READ_FLOAT(Gamma)
//////////
// MISC //
// Pre Data Path.
try
{
CConfigFile::CVar &cvPreDataPath = AppCfg.ConfigFile.getVar("PreDataPath");
AppCfg.PreDataPath.clear ();
for (uint i = 0; i < cvPreDataPath.size(); i++)
AppCfg.PreDataPath.push_back(cvPreDataPath.asString(i));
}
catch(EUnknownVar &) {nlwarning("Default value used for 'PreDataPath' !!!");}
// Data Path.
try
{
AppCfg.DataPath.clear ();
CConfigFile::CVar &cvDataPath = AppCfg.ConfigFile.getVar("DataPath");
for (uint i = 0; i < cvDataPath.size(); i++)
AppCfg.DataPath.push_back(cvDataPath.asString(i));
}
catch(EUnknownVar &) {nlwarning("Default value used for 'DataPath' !!!");}
// UpdatePackedSheet
READ_BOOL(UpdatePackedSheet)
// SceneName
READ_STRING(SceneName)
// IdFile Path
READ_STRING(IdFilePath)
/////////////
// FILTERS //
createDebug ();
try
{
CConfigFile::CVar &cvTmp = AppCfg.ConfigFile.getVar("NegFiltersDebug");
for(uint k = 0; k < (uint)cvTmp.size(); ++k)
{
DebugLog->addNegativeFilter (cvTmp.asString(k).c_str());
}
}
catch(EUnknownVar &) {}
try
{
CConfigFile::CVar &cvTmp = AppCfg.ConfigFile.getVar("NegFiltersInfo");
for(uint k = 0; k < (uint)cvTmp.size(); ++k)
{
InfoLog->addNegativeFilter (cvTmp.asString(k).c_str());
}
}
catch(EUnknownVar &) {}
try
{
CConfigFile::CVar &cvTmp = AppCfg.ConfigFile.getVar("NegFiltersWarning");
for(uint k = 0; k < (uint)cvTmp.size(); ++k)
{
WarningLog->addNegativeFilter (cvTmp.asString(k).c_str());
}
}
catch(EUnknownVar &) {}
READ_STRING(LigoPrimitiveClass)
// LanguageCode
READ_STRING(LanguageCode)
READ_BOOL(FPExceptions)
//////////
// INIT //
// FPU
#ifdef NL_OS_WINDOWS
if(AppCfg.FPExceptions)
_control87(_EM_INVALID|_EM_DENORMAL/*|_EM_ZERODIVIDE|_EM_OVERFLOW*/|_EM_UNDERFLOW|_EM_INEXACT, _MCW_EM);
else
_control87(_EM_INVALID|_EM_DENORMAL|_EM_ZERODIVIDE|_EM_OVERFLOW|_EM_UNDERFLOW|_EM_INEXACT, _MCW_EM);
#endif // NL_OS_WINDOWS
/* if(Driver)
{
// Set the monitor color properties
CMonitorColorProperties monitorColor;
for(uint i=0; i<3; i++)
{
monitorColor.Contrast[i] = AppCfg.Contrast;
monitorColor.Luminosity[i] = AppCfg.Luminosity;
monitorColor.Gamma[i] = AppCfg.Gamma;
}
if(!Driver->setMonitorColorProperties(monitorColor))
nlwarning("reloadCFG: setMonitorColorProperties fails");
}
*/
}// load //
//-----------------------------------------------
// serial :
// Serialize CFG.
//-----------------------------------------------
void CClientConfig::serial(class NLMISC::IStream &f) throw(NLMISC::EStream)
{
// Start the opening of a new node named ClientCFG.
f.xmlPush("ClientCFG");
f.xmlPushBegin("Windowed");
f.xmlPushEnd();
f.serial(Windowed);
f.xmlPop();
f.xmlPushBegin("Width");
f.xmlPushEnd();
f.serial(Width);
f.xmlPop();
f.xmlPushBegin("Height");
f.xmlPushEnd();
f.serial(Height);
f.xmlPop();
f.xmlPushBegin("Depth");
f.xmlPushEnd();
f.serial(Depth);
f.xmlPop();
f.xmlPushBegin("Contrast");
f.xmlPushEnd();
f.serial(Contrast);
f.xmlPop();
f.xmlPushBegin("Luminosity");
f.xmlPushEnd();
f.serial(Luminosity);
f.xmlPop();
f.xmlPushBegin("Gamma");
f.xmlPushEnd();
f.serial(Gamma);
f.xmlPop();
// Close the serial for hte Client CFG.
f.xmlPop();
}// serial //
//-----------------------------------------------
// init :
//-----------------------------------------------
void CClientConfig::init(const std::string &configFileName)
{
if(!CFile::fileExists(configFileName))
nlwarning("CFG::init: '%s' Not Found !!!", configFileName.c_str ());
// if the config file will be modified, it calls automatically the function setValues()
AppCfg.ConfigFile.setCallback (setValues);
// load the config files
AppCfg.ConfigFile.load (configFileName);
}// init //
//-----------------------------------------------
// init :
//-----------------------------------------------
void CClientConfig::release ()
{
// Do we have to save the cfg file ?
if (AppCfg.SaveConfig)
{
// Are we in window mode ?
if (AppCfg.Windowed)
{
/* // Driver still alive ?
if (Driver && Driver->isActive ())
{
#ifdef NL_OS_WINDOWS
HWND hWnd = (HWND)Driver->getDisplay ();
// Get the window position
RECT window;
RECT client;
GetWindowRect (hWnd, &window);
GetClientRect (hWnd, &client);
// Save values
try
{
CConfigFile::CVar *varPtr = AppCfg.ConfigFile.getVarPtr ("PositionX");
if (varPtr)
varPtr->setAsInt (window.left);
varPtr = AppCfg.ConfigFile.getVarPtr ("PositionY");
if (varPtr)
varPtr->setAsInt (window.top);
varPtr = AppCfg.ConfigFile.getVarPtr ("Width");
if (varPtr)
varPtr->setAsInt (client.right - client.left);
varPtr = AppCfg.ConfigFile.getVarPtr ("Height");
if (varPtr)
varPtr->setAsInt (client.bottom - client.top);
}
catch (Exception &e)
{
nlwarning ("Error while set config file variables : %s", e.what ());
}
#endif // NL_OS_WINDOWS
}
*/ }
// Save it
AppCfg.ConfigFile.save ();
}
}