/** * \file configuration.cpp * \brief CConfiguration * \date 2008-11-26 14:12GMT * \author Jan Boon (Kaetemi) * CConfiguration */ /* * Copyright (C) 2008 by authors * * This file is part of NEVRAX SNOWBALLS. * NEVRAX SNOWBALLS is free software: you can redistribute it 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. * * NEVRAX SNOWBALLS 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NEVRAX SNOWBALLS; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ #include #include "configuration.h" // STL includes // NeL includes // #include #include #include #include // Project includes #include "snowballs_client.h" #include "snowballs_config.h" using namespace std; using namespace NLMISC; namespace SBCLIENT { void CConfiguration::setAndCallback(const std::string &varName, void (*cb)(CConfigFile::CVar &var)) { ConfigFile->setCallback(varName, cb); cb(*ConfigFile->getVarPtr(varName)); } void CConfiguration::dropCallback(const std::string &varName) { ConfigFile->setCallback(varName, NULL); } bool CConfiguration::init() { nlassert(!ConfigFile); ConfigFile = new CConfigFile(); nlassert(ConfigFile); ConfigFile->load(SBCLIENT_CONFIG_FILE); // set the search paths (kinda important) CConfigFile::CVar *var; var = ConfigFile->getVarPtr("SearchPaths"); uint varsize = var->size(); for (uint i = 0; i < varsize; ++i) CPath::addSearchPath(var->asString(i), true, false); var = ConfigFile->getVarPtr("RemapExtensions"); varsize = var->size(); for (uint i = 0; i < varsize; i += 2) CPath::remapExtension(var->asString(i), var->asString(i + 1), true); return true; } bool CConfiguration::release() { // save and release the config file if (ConfigFile) { if (ConfigFile->exists("SaveConfig") && ConfigFile->getVarPtr("SaveConfig")->asBool()) { ConfigFile->save(); } delete ConfigFile; ConfigFile = NULL; } else nlwarning("!ConfigFile"); // release the search paths etc CPath::releaseInstance(); return true; } void CConfiguration::updateUtilities() { CConfigFile::checkConfigFiles(); } float CConfiguration::getValue(const string &varName, float defaultValue) { if (ConfigFile->exists(varName)) return ConfigFile->getVar(varName).asFloat(); CConfigFile::CVar varToCopy; varToCopy.forceAsDouble((double)defaultValue); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } double CConfiguration::getValue(const string &varName, double defaultValue) { if (ConfigFile->exists(varName)) return ConfigFile->getVar(varName).asDouble(); CConfigFile::CVar varToCopy; varToCopy.forceAsDouble(defaultValue); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } int CConfiguration::getValue(const string &varName, int defaultValue) { if (ConfigFile->exists(varName)) return ConfigFile->getVar(varName).asInt(); CConfigFile::CVar varToCopy; varToCopy.forceAsInt(defaultValue); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } string CConfiguration::getValue(const string &varName, const string &defaultValue) { if (ConfigFile->exists(varName)) return ConfigFile->getVar(varName).asString(); CConfigFile::CVar varToCopy; varToCopy.forceAsString(defaultValue); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } ucstring CConfiguration::getValue(const string &varName, const ucstring &defaultValue) { if (ConfigFile->exists(varName)) return ucstring::makeFromUtf8(ConfigFile->getVar(varName).asString()); CConfigFile::CVar varToCopy; varToCopy.forceAsString(defaultValue.toUtf8()); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } bool CConfiguration::getValue(const string &varName, bool defaultValue) { if (ConfigFile->exists(varName)) return ConfigFile->getVar(varName).asBool(); CConfigFile::CVar varToCopy; varToCopy.forceAsInt(defaultValue ? 1 : 0); ConfigFile->insertVar(varName, varToCopy); return defaultValue; } CRGBA CConfiguration::getValue(const string &varName, const CRGBA &defaultValue) { if (ConfigFile->exists(varName)) { return getValue(ConfigFile->getVar(varName), defaultValue); } else { // create a new value only if one doesn't exist CConfigFile::CVar varToCopy; varToCopy.forceAsInt(defaultValue.R); varToCopy.setAsInt(defaultValue.G, 1); varToCopy.setAsInt(defaultValue.B, 2); varToCopy.setAsInt(defaultValue.A, 3); ConfigFile->insertVar(varName, varToCopy); } return defaultValue; } CRGBA CConfiguration::getValue(const CConfigFile::CVar &var, const CRGBA &defaultValue) { if (var.size() >= 3) { if (var.size() > 4) nlwarning("RGBA value in config value '%s' is too long, ignoring unused values"); return CRGBA(var.asInt(0), var.asInt(1), var.asInt(2), var.size() >= 4 ? var.asInt(3) : 255); } nlwarning("Invalid RGBA value in config value '%s', reverting to default { %i, %i, %i, %i }", var.Name.c_str(), (sint)defaultValue.R, (sint)defaultValue.G, (sint)defaultValue.B, (sint)defaultValue.A); return defaultValue; } } /* namespace SBCLIENT */ /* end of file */