mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-22 08:58:43 +00:00
464 lines
13 KiB
C++
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 ();
|
|
}
|
|
}
|