Panda3D uses a configuration file named Config.prc.
Panda supplies functions to easily read values out of Config.prc, and to
alter their values in memory (the modified values are not written back out
to disk). The ability to read an alter configuration settings programmatically has two major uses:
- Storing your own configuration data.
- Tweaking Panda's behavior.
By "storing your own configuration data," I mean that your game might
have its own settings that need to be stored. Rather than writing your
own configuration file parser, you might consider adding your
configuration data to the panda configuration file instead.
Suppose hypothetically that you are writing an online game, and your
online game connects to a server. You need a configuration file to tell
you the name of the server. Open up the "Config.prc" file and add the following line at the end of the file.
my-game-server pandagame.com
|
Note that I invented the variable name "my-game-server" out of thin air,
this variable is not recognized by panda in any way. Therefore, this
line has no effect on panda whatsoever.
To manipulate this variable programmatically,
use code not unlike the following, which creates an object of
class ConfigVariableString and then manipulates it using the
methods setValue and getValue :
from pandac.PandaModules import ConfigVariableString
mygameserver = ConfigVariableString("my-game-server","127.0.0.1")
print "Server specified in config file: ", mygameserver.getValue()
# allow the user to change servers on the command-line:
if (sys.argv[1]=="--server"): mygameserver.setValue(sys.argv[2])
print "Server that we will use: ", mygameserver.getValue()
|
The second parameter to the ConfigVariableString constructor is the default value that should be returned, in case the line "my-game-server" does not appear in any Config.prc file. There is also an optional third parameter, which is a description of the purpose of the variable; this string will be displayed when the user executes the command print cvMgr .
The types of configuration variable are:
ConfigVariableString
ConfigVariableInt
ConfigVariableBool
ConfigVariableDouble
ConfigVariableFilename
ConfigVariableList
ConfigVariableSearchPath
|
Most of these follow the same form as ConfigVariableString, above, except that the default value (and the parameter from setValue() and getValue()) is of the indicated type, rather than a string. The two exceptions are ConfigVariableList and ConfigVariableSearchPath; these types of variables do not accept a default value to the constructor, since the default value in both cases is always the empty list or search path.
To display the current value of a particular variable interactively (in this example, for a string-type variable), type the following:
print ConfigVariableString('my-game-server')
|
Panda3D will automatically load any *.prc files it finds in its standard config directory at startup. You can view a list of the files it has actually loaded with the following command:
It is helpful to do this to ensure that you are editing the correct Config.prc file.
Sometimes, it is desirable to load an additional
configuration file from disk, by giving an explicit filename. To do so, use "loadPrcFile". Note that
Panda Filename Syntax uses a forward slash, even under Windows:
from pandac.PandaModules import loadPrcFile
loadPrcFile("config/Config.prc")
|
The filename you specify is searched for along the model-path, in the same way that an egg or bam file is searched for when you use loader.loadModel() .
You can also use "loadPrcFileData" to load a string that you define in your Python code, as if it were the contents read from a disk file. The loadPrcFileData() call requires two parameters; the first parameter is an arbitrary string name to assign to this "file" (and it can be the empty string if you don't care), while the second parameter is the contents of the file itself. This second parameter should contain newlines between variable definitions if you want to set the value of more than one variable.
For example, let's say that panda's configuration file contains this line:
By default, panda programs will run in a window, not fullscreen. However, if you do this:
from pandac.PandaModules import loadPrcFileData
loadPrcFileData("", "fullscreen 1")
import direct.directbase.DirectStart
|
Then by the time you load direct.directbase.DirectStart , you will
have changed the fullscreen-flag to true, and your program will run
full-screen. There are other ways to go to fullscreen, this is not
necessarily the most straightforward, but it illustrates the point.
|