Further improved XML generation for user config + prepared infrastructure for saving challenges/players (groups)
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3628 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
6f2f918590
commit
b15cd04c5f
@ -92,6 +92,7 @@ bool SFXManager::sfxAllowed()
|
||||
*/
|
||||
void SFXManager::loadSfx()
|
||||
{
|
||||
// TODO : implement as XML
|
||||
const lisp::Lisp* root = 0;
|
||||
std::string sfx_config_name = file_manager->getSFXFile("sfx.config");
|
||||
try
|
||||
|
@ -57,6 +57,57 @@ static std::vector<UserConfigParam*> all_params;
|
||||
#define PARAM_DEFAULT(X) = X
|
||||
#include "config/user_config.hpp"
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
GroupUserConfigParam::GroupUserConfigParam(const char* groupName, const char* comment)
|
||||
{
|
||||
this->paramName = groupName;
|
||||
all_params.push_back(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
void GroupUserConfigParam::write(std::ofstream& stream) const
|
||||
{
|
||||
if(comment.size() > 0) stream << " <!-- " << comment.c_str() << " -->\n";
|
||||
stream << " <" << paramName << "\n";
|
||||
|
||||
const int children_amount = m_children.size();
|
||||
for(int n=0; n<children_amount; n++)
|
||||
{
|
||||
stream << " " << m_children[n]->paramName << "=\"" << m_children[n]->toString() << "\"\n";
|
||||
}
|
||||
stream << " />\n\n";
|
||||
}
|
||||
|
||||
void GroupUserConfigParam::readAsNode(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode( paramName );
|
||||
if(child == NULL)
|
||||
{
|
||||
//std::cout << "Couldn't find parameter group " << paramName << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
const int children_amount = m_children.size();
|
||||
for(int n=0; n<children_amount; n++)
|
||||
{
|
||||
m_children[n]->readAsProperty(child);
|
||||
}
|
||||
|
||||
}
|
||||
void GroupUserConfigParam::readAsProperty(const XMLNode* node)
|
||||
{
|
||||
}
|
||||
std::string GroupUserConfigParam::toString() const
|
||||
{
|
||||
return "";
|
||||
}
|
||||
void GroupUserConfigParam::addChild(UserConfigParam* child)
|
||||
{
|
||||
m_children.push_back(child);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
IntUserConfigParam::IntUserConfigParam(int defaultValue, const char* paramName, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
@ -64,6 +115,14 @@ IntUserConfigParam::IntUserConfigParam(int defaultValue, const char* paramName,
|
||||
all_params.push_back(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
IntUserConfigParam::IntUserConfigParam(int defaultValue, const char* paramName,
|
||||
GroupUserConfigParam* group, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
this->paramName = paramName;
|
||||
group->addChild(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
|
||||
void IntUserConfigParam::write(std::ofstream& stream) const
|
||||
{
|
||||
@ -71,7 +130,14 @@ void IntUserConfigParam::write(std::ofstream& stream) const
|
||||
stream << " <" << paramName << " value=\"" << value << "\" />\n\n";
|
||||
}
|
||||
|
||||
void IntUserConfigParam::read(const XMLNode* node)
|
||||
std::string IntUserConfigParam::toString() const
|
||||
{
|
||||
char buffer[16];
|
||||
sprintf(buffer, "%i", value);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void IntUserConfigParam::readAsNode(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode( paramName );
|
||||
if(child == NULL)
|
||||
@ -83,6 +149,10 @@ void IntUserConfigParam::read(const XMLNode* node)
|
||||
child->get( "value", &value );
|
||||
//std::cout << "read int " << paramName << ", value=" << value << std::endl;
|
||||
}
|
||||
void IntUserConfigParam::readAsProperty(const XMLNode* node)
|
||||
{
|
||||
node->get( paramName, &value );
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
@ -93,18 +163,37 @@ StringUserConfigParam::StringUserConfigParam(const char* defaultValue, const cha
|
||||
all_params.push_back(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
StringUserConfigParam::StringUserConfigParam(const char* defaultValue, const char* paramName,
|
||||
GroupUserConfigParam* group, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
this->paramName = paramName;
|
||||
group->addChild(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
|
||||
|
||||
void StringUserConfigParam::write(std::ofstream& stream) const
|
||||
{
|
||||
if(comment.size() > 0) stream << " <!-- " << comment.c_str() << " -->\n";
|
||||
stream << " <" << paramName << " value=\"" << value << "\" />\n\n";
|
||||
}
|
||||
void StringUserConfigParam::read(const XMLNode* node)
|
||||
void StringUserConfigParam::readAsNode(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode( paramName );
|
||||
if(child == NULL) return;
|
||||
|
||||
child->get( "value", &value );
|
||||
}
|
||||
void StringUserConfigParam::readAsProperty(const XMLNode* node)
|
||||
{
|
||||
node->get( paramName, &value );
|
||||
}
|
||||
|
||||
std::string StringUserConfigParam::toString() const
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
@ -115,12 +204,22 @@ BoolUserConfigParam::BoolUserConfigParam(bool defaultValue, const char* paramNam
|
||||
all_params.push_back(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
BoolUserConfigParam::BoolUserConfigParam(bool defaultValue, const char* paramName,
|
||||
GroupUserConfigParam* group, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
this->paramName = paramName;
|
||||
group->addChild(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
|
||||
|
||||
void BoolUserConfigParam::write(std::ofstream& stream) const
|
||||
{
|
||||
if(comment.size() > 0) stream << " <!-- " << comment.c_str() << " -->\n";
|
||||
stream << " <" << paramName << " value=\"" << (value ? "true" : "false" )<< "\" />\n\n";
|
||||
stream << " <" << paramName << " value=\"" << (value ? "true" : "false" ) << "\" />\n\n";
|
||||
}
|
||||
void BoolUserConfigParam::read(const XMLNode* node)
|
||||
void BoolUserConfigParam::readAsNode(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode( paramName );
|
||||
if(child == NULL) return;
|
||||
@ -139,28 +238,70 @@ void BoolUserConfigParam::read(const XMLNode* node)
|
||||
else
|
||||
std::cerr << "Unknown value for " << paramName << "; expected true or false\n";
|
||||
}
|
||||
void BoolUserConfigParam::readAsProperty(const XMLNode* node)
|
||||
{
|
||||
std::string textValue = "";
|
||||
node->get( paramName, &textValue );
|
||||
|
||||
if(textValue == "true")
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
else if(textValue == "false")
|
||||
{
|
||||
value = false;
|
||||
}
|
||||
else
|
||||
std::cerr << "Unknown value for " << paramName << "; expected true or false\n";
|
||||
}
|
||||
|
||||
std::string BoolUserConfigParam::toString() const
|
||||
{
|
||||
return (value ? "true" : "false" );
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
FloatUserConfigParam::FloatUserConfigParam(bool defaultValue, const char* paramName, const char* comment)
|
||||
FloatUserConfigParam::FloatUserConfigParam(float defaultValue, const char* paramName, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
this->paramName = paramName;
|
||||
all_params.push_back(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
FloatUserConfigParam::FloatUserConfigParam(float defaultValue, const char* paramName,
|
||||
GroupUserConfigParam* group, const char* comment)
|
||||
{
|
||||
this->value = defaultValue;
|
||||
this->paramName = paramName;
|
||||
group->addChild(this);
|
||||
if(comment != NULL) this->comment = comment;
|
||||
}
|
||||
|
||||
void FloatUserConfigParam::write(std::ofstream& stream) const
|
||||
{
|
||||
if(comment.size() > 0) stream << " <!-- " << comment.c_str() << " -->\n";
|
||||
stream << " <" << paramName << " value=\"" << value << "\" />\n\n";
|
||||
}
|
||||
void FloatUserConfigParam::read(const XMLNode* node)
|
||||
void FloatUserConfigParam::readAsNode(const XMLNode* node)
|
||||
{
|
||||
const XMLNode* child = node->getNode( paramName );
|
||||
if(child == NULL) return;
|
||||
|
||||
child->get( "value", &value );
|
||||
}
|
||||
void FloatUserConfigParam::readAsProperty(const XMLNode* node)
|
||||
{
|
||||
node->get( paramName, &value );
|
||||
}
|
||||
|
||||
std::string FloatUserConfigParam::toString() const
|
||||
{
|
||||
char buffer[16];
|
||||
sprintf(buffer, "%f", value);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
// =====================================================================================
|
||||
// =====================================================================================
|
||||
@ -302,6 +443,7 @@ void UserConfig::loadConfig(const std::string& filename)
|
||||
return;
|
||||
}
|
||||
|
||||
// ---- Read config file version
|
||||
int configFileVersion = CURRENT_CONFIG_VERSION;
|
||||
if(!root->get("version", &configFileVersion) < 1)
|
||||
{
|
||||
@ -347,10 +489,11 @@ void UserConfig::loadConfig(const std::string& filename)
|
||||
} // if configFileVersion<SUPPORTED_CONFIG_VERSION
|
||||
|
||||
|
||||
// ---- Read all other parameters
|
||||
const int paramAmount = all_params.size();
|
||||
for(int i=0; i<paramAmount; i++)
|
||||
{
|
||||
all_params[i]->read(root);
|
||||
all_params[i]->readAsNode(root);
|
||||
}
|
||||
|
||||
delete root;
|
||||
|
@ -58,13 +58,28 @@ class XMLNode;
|
||||
*/
|
||||
class UserConfigParam
|
||||
{
|
||||
friend class GroupUserConfigParam;
|
||||
protected:
|
||||
std::string paramName, comment;
|
||||
public:
|
||||
virtual ~UserConfigParam() {}
|
||||
virtual void write(std::ofstream& stream) const = 0;
|
||||
virtual void read(const XMLNode* node) = 0;
|
||||
virtual void readAsNode(const XMLNode* node) = 0;
|
||||
virtual void readAsProperty(const XMLNode* node) = 0;
|
||||
virtual std::string toString() const = 0;
|
||||
};
|
||||
|
||||
class GroupUserConfigParam : public UserConfigParam
|
||||
{
|
||||
std::vector<UserConfigParam*> m_children;
|
||||
public:
|
||||
GroupUserConfigParam(const char* name, const char* comment=NULL);
|
||||
void write(std::ofstream& stream) const;
|
||||
void readAsNode(const XMLNode* node);
|
||||
void readAsProperty(const XMLNode* node);
|
||||
|
||||
void addChild(UserConfigParam* child);
|
||||
std::string toString() const;
|
||||
};
|
||||
|
||||
class IntUserConfigParam : public UserConfigParam
|
||||
@ -72,8 +87,13 @@ class IntUserConfigParam : public UserConfigParam
|
||||
int value;
|
||||
public:
|
||||
IntUserConfigParam(int defaultValue, const char* paramName, const char* comment = NULL);
|
||||
IntUserConfigParam(int defaultValue, const char* paramName, GroupUserConfigParam* group, const char* comment = NULL);
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void read(const XMLNode* node);
|
||||
void readAsNode(const XMLNode* node);
|
||||
void readAsProperty(const XMLNode* node);
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
operator int() const { return value; }
|
||||
int& operator=(const int& v) { value = v; return value; }
|
||||
@ -84,8 +104,14 @@ class StringUserConfigParam : public UserConfigParam
|
||||
std::string value;
|
||||
public:
|
||||
StringUserConfigParam(const char* defaultValue, const char* paramName, const char* comment = NULL);
|
||||
StringUserConfigParam(const char* defaultValue, const char* paramName, GroupUserConfigParam* group, const char* comment = NULL);
|
||||
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void read(const XMLNode* node);
|
||||
void readAsNode(const XMLNode* node);
|
||||
void readAsProperty(const XMLNode* node);
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
operator std::string() const { return value; }
|
||||
std::string& operator=(const std::string& v) { value = v; return value; }
|
||||
@ -97,8 +123,14 @@ class BoolUserConfigParam : public UserConfigParam
|
||||
bool value;
|
||||
public:
|
||||
BoolUserConfigParam(bool defaultValue, const char* paramName, const char* comment = NULL);
|
||||
BoolUserConfigParam(bool defaultValue, const char* paramName, GroupUserConfigParam* group, const char* comment = NULL);
|
||||
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void read(const XMLNode* node);
|
||||
void readAsNode(const XMLNode* node);
|
||||
void readAsProperty(const XMLNode* node);
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
operator bool() const { return value; }
|
||||
bool& operator=(const bool& v) { value = v; return value; }
|
||||
@ -108,9 +140,14 @@ class FloatUserConfigParam : public UserConfigParam
|
||||
{
|
||||
float value;
|
||||
public:
|
||||
FloatUserConfigParam(bool defaultValue, const char* paramName, const char* comment = NULL);
|
||||
FloatUserConfigParam(float defaultValue, const char* paramName, const char* comment = NULL);
|
||||
FloatUserConfigParam(float defaultValue, const char* paramName, GroupUserConfigParam* group, const char* comment = NULL);
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void read(const XMLNode* node);
|
||||
void readAsNode(const XMLNode* node);
|
||||
void readAsProperty(const XMLNode* node);
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
operator float() const { return value; }
|
||||
float& operator=(const float& v) { value = v; return value; }
|
||||
@ -135,45 +172,54 @@ namespace UserConfigParams
|
||||
{
|
||||
|
||||
// ---- Audio
|
||||
PARAM_PREFIX GroupUserConfigParam m_audio_group
|
||||
PARAM_DEFAULT( GroupUserConfigParam("Audio", "Audio Settings") );
|
||||
|
||||
PARAM_PREFIX BoolUserConfigParam m_sfx
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "sfx_on", "Whether sound effects are enabled or not (true or false)") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "sfx_on", &m_audio_group, "Whether sound effects are enabled or not (true or false)") );
|
||||
PARAM_PREFIX BoolUserConfigParam m_music
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "music_on", "Whether musics are enabled or not (true or false)") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "music_on", &m_audio_group, "Whether musics are enabled or not (true or false)") );
|
||||
PARAM_PREFIX FloatUserConfigParam m_sfx_volume
|
||||
PARAM_DEFAULT( FloatUserConfigParam(1.0, "sfx_volume", "Volume for sound effects, see openal AL_GAIN for interpretation") );
|
||||
PARAM_DEFAULT( FloatUserConfigParam(1.0, "sfx_volume", &m_audio_group, "Volume for sound effects, see openal AL_GAIN for interpretation") );
|
||||
PARAM_PREFIX FloatUserConfigParam m_music_volume
|
||||
PARAM_DEFAULT( FloatUserConfigParam(0.7f, "music_volume", "music volume from 0 to 1") );
|
||||
PARAM_DEFAULT( FloatUserConfigParam(0.7f, "music_volume", &m_audio_group, "music volume from 0 to 1") );
|
||||
|
||||
// ---- Race setup
|
||||
PARAM_PREFIX GroupUserConfigParam m_race_setup_group
|
||||
PARAM_DEFAULT( GroupUserConfigParam("RaceSetup", "Race Setup Settings") );
|
||||
|
||||
PARAM_PREFIX IntUserConfigParam m_num_karts
|
||||
PARAM_DEFAULT( IntUserConfigParam(4, "numkarts", "Default number of karts. -1 means use all") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(4, "numkarts", &m_race_setup_group, "Default number of karts. -1 means use all") );
|
||||
PARAM_PREFIX IntUserConfigParam m_num_laps
|
||||
PARAM_DEFAULT( IntUserConfigParam(4, "numlaps", "Default number of laps.") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(4, "numlaps", &m_race_setup_group, "Default number of laps.") );
|
||||
PARAM_PREFIX IntUserConfigParam m_difficulty
|
||||
PARAM_DEFAULT( IntUserConfigParam(0, "difficulty", "Default race difficulty. 0=easy, 1=medium, 2=hard") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(0, "difficulty", &m_race_setup_group, "Default race difficulty. 0=easy, 1=medium, 2=hard") );
|
||||
|
||||
// ---- Video
|
||||
PARAM_PREFIX GroupUserConfigParam m_video_group
|
||||
PARAM_DEFAULT( GroupUserConfigParam("Video", "Video Settings") );
|
||||
|
||||
PARAM_PREFIX IntUserConfigParam m_width
|
||||
PARAM_DEFAULT( IntUserConfigParam(800, "width", "screen resolution width") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(800, "width", &m_video_group, "screen resolution width") );
|
||||
PARAM_PREFIX IntUserConfigParam m_height
|
||||
PARAM_DEFAULT( IntUserConfigParam(600, "height", "screen resolution height") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(600, "height", &m_video_group, "screen resolution height") );
|
||||
PARAM_PREFIX BoolUserConfigParam m_fullscreen
|
||||
PARAM_DEFAULT( BoolUserConfigParam(false, "fullscreen") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(false, "fullscreen", &m_video_group) );
|
||||
PARAM_PREFIX IntUserConfigParam m_prev_width
|
||||
PARAM_DEFAULT( IntUserConfigParam(800, "prev_width") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(800, "prev_width", &m_video_group) );
|
||||
PARAM_PREFIX IntUserConfigParam m_prev_height
|
||||
PARAM_DEFAULT( IntUserConfigParam(600, "prev_height") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(600, "prev_height", &m_video_group) );
|
||||
PARAM_PREFIX BoolUserConfigParam m_prev_windowed
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "prev_windowed") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "prev_windowed", &m_video_group) );
|
||||
|
||||
// TODO : adapt to be more powerful with irrlicht
|
||||
PARAM_PREFIX BoolUserConfigParam m_graphical_effects
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "gfx") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(true, "gfx", &m_video_group) );
|
||||
|
||||
PARAM_PREFIX BoolUserConfigParam m_display_fps
|
||||
PARAM_DEFAULT( BoolUserConfigParam(false, "show_fps", "Display frame per seconds") );
|
||||
PARAM_DEFAULT( BoolUserConfigParam(false, "show_fps", &m_video_group, "Display frame per seconds") );
|
||||
PARAM_PREFIX IntUserConfigParam m_max_fps
|
||||
PARAM_DEFAULT( IntUserConfigParam(120, "max_fps", "maximum fps, should be at least 60") );
|
||||
PARAM_DEFAULT( IntUserConfigParam(120, "max_fps", &m_video_group, "maximum fps, should be at least 60") );
|
||||
|
||||
// ---- Debug
|
||||
PARAM_PREFIX BoolUserConfigParam m_gamepad_debug PARAM_DEFAULT( BoolUserConfigParam(false, "gamepad_debug") );
|
||||
|
Loading…
Reference in New Issue
Block a user