• Advertisement
Sign in to follow this  

SFML 2.0 Game Config file

This topic is 1900 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey,

Does any one have any tutorials or example scripts which uses SFML 2.0 where you can load data from a text file to use in a script?

Can't seem to find any examples out there for it.

Share this post


Link to post
Share on other sites
Advertisement
SFML is a sound, graphics, and networking API. You wouldn't use SFML for loading files, you'd use either the C++ standard library (see [url="http://www.cplusplus.com/reference/iostream/fstream/"]fstream[/url]), or a third party library.
(I'm assuming you're using C++, since you didn't mention what language you are using)

Also, you say, "use in a script", but your thread's title says, "game config file". A script and a config file are two different things. A scripting language is a type of programming language, and it'd be "ran"/"executed" and do things like call functions. A config file is usually static data that is "read" into the program and then used to initialize some variables in the program's code. A script file can be a config file (though it's unusual), but not vice-versa.

Could you give a more specific example of how you'd like this config file or script to look like, and what it'd do? [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img]

Share this post


Link to post
Share on other sites
The idea was :

I would make a class which loaded a file called Settings.txt

Example data of this file:

Name = Dave
MaxFPS = 60


So then in my main function i call load setting class then i have all the information available to use so for example:

Config["Name"] would equal Dave
Config["MaxFPS"] would equal 60


I started an attempt at it here, this is in my[b] settings.h[/b], i found this on the internet but its quite ugly and not totally easy to understand how it works. (Granted its not working yet).

[source lang="cpp"]
#include <fstream>
#include <cctype>
using namespace std;

// trim from start
static inline std::string &ltrim(std::string &s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
return s;
}

// trim from end
static inline std::string &rtrim(std::string &s) {
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
return s;
}

// trim from both ends
static inline std::string &trim(std::string &s) {
return ltrim(rtrim(s));
}

std::map<string,string> loadSettings(){

ifstream file("settings.txt");
string line;

std::map<string, string> config;
while(std::getline(file, line))
{
int pos = line.find('=');
if(pos != string::npos)
{
string key = line.substr(0, pos);
string value = line.substr(pos + 1);
config[trim(key)] = trim(value);
}
}
return (config);
}[/source]

In my [b]main.cpp [/b]i have yet to work out how i retrieve back the information - im not sure i have the correct data type for the function for a start. Also its not in a class.

Share this post


Link to post
Share on other sites
If you're on windows, you can use the [url="http://msdn.microsoft.com/en-us/library/windows/desktop/ms724353(v=vs.85).aspx"]GetPrivateProfileString[/url] function from the Win32 api to read ini files.

Share this post


Link to post
Share on other sites
That is rather simple usage of the C++ standard library, thefollower. If you do not have a good idea what it is doing then I would advise you to take a few steps back.

That said, the function simply returns an std::map<std::string, std::string> (see [url=http://www.cplusplus.com/reference/stl/map/]documentation[/url]). A simple usage would be:
[code]
typedef std::map<std::string, std::string> SettingsType;
SettingsType settings = loadSettings();
SettingsType::const_iterator it = settings.begin();
SettingsType::const_iterator it_end = settings.end();
for (; it != it_end; ++it)
std::cout << "Key '" << it->first << "' maps to value '" << it->second << "'\n";

// alternatively:
std::cout << "Value for key 'Name': '" << settings["Name"] << "'\n";
[/code]
The first code fragment will output all key/value pairs which were read from the config file. The alternative version will print the value corresponding to the key 'Name' (or an empty string if there is no such key in the map).

Share this post


Link to post
Share on other sites
FWIW, I do this via xml files, and read the data using tinyxml. If you are interested, you can check my old blog (link is in my signature) for some examples.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement