Plugin Configuration
There is a system in place that allows you to designate configurable values for a plugin or the component of a plugin.
Both of these methods use the ConfigAttribute
. It is either assembly-level or class-level. If you put it on the assembly-level, if the plugin is included, the configurable item will show up. If you put it on a component (World, Environment, or Game Controller), the config item will only show up if that component is used.
Using the configuration
Let's say you have two config items. A world waterlevel, and an assembly-wide setting about difficulty.
In your assemblyinfo, put something like this:
- snippet.csharp
[assembly: Config("difficulty", "Game difficulty", 1, Description="Sets the difficulty of the game")]
On your world, you might do something like:
- snippet.csharp
[Config("waterlevel", "Water Level", 10)] [WorldGenerator(...)] public class MyGenerator : WorldGeneratorBase { ... }
To retrieve the value (whether set directly, or defaulting), you inject ISettings
. eg, back to the World generator case:
- snippet.csharp
public class MyGenerator : WorldGeneratorBase { [Dependency] private readonly ISettings _settings; private float _waterlevel; public MyGenerator(...) { this.InjectDependencies(); _waterLevel = _settings.Get<int>("waterlevel"); } ... }
The same applies to the difficulty.
Specifying settings on startup
For singleplayer, settings appear on the last screen of the New-Game configuration.
For multiplayer, there are two ways to introduce settings.
- In your
empeld.config
file, add abag
entry for all settings. eg.bag=waterlevel:30,difficulty:0
- When you start the game add a
--bag
parameter, and do the same thing