Allow maps to override options. Closes #3646.

Also set sensible defaults for most of the maps and mini games.
This commit is contained in:
Paul Chote
2013-08-17 10:54:54 +12:00
parent ca90b2e6f1
commit d76a8c2950
22 changed files with 437 additions and 28 deletions

View File

@@ -16,10 +16,36 @@ using System.Linq;
using System.Security.Cryptography;
using System.Text;
using OpenRA.FileFormats;
using OpenRA.Network;
using OpenRA.Traits;
namespace OpenRA
{
public class MapOptions
{
public bool? Cheats;
public bool? Crates;
public bool? Fog;
public bool? Shroud;
public bool? FragileAlliances;
public bool ConfigurableStartingUnits = true;
public string[] Difficulties;
public void UpdateServerSettings(Session.Global settings)
{
if (Cheats.HasValue)
settings.AllowCheats = Cheats.Value;
if (Crates.HasValue)
settings.Crates = Crates.Value;
if (Fog.HasValue)
settings.Fog = Fog.Value;
if (Shroud.HasValue)
settings.Shroud = Shroud.Value;
if (FragileAlliances.HasValue)
settings.FragileAlliances = FragileAlliances.Value;
}
}
public class Map
{
[FieldLoader.Ignore] IFolder container;
@@ -37,9 +63,20 @@ namespace OpenRA
public string Description;
public string Author;
public string Tileset;
public string[] Difficulties;
public bool AllowStartUnitConfig = true;
[FieldLoader.LoadUsing("LoadOptions")]
public MapOptions Options;
static object LoadOptions(MiniYaml y)
{
var options = new MapOptions();
if (y.NodesDict.ContainsKey("Options"))
FieldLoader.Load(options, y.NodesDict["Options"]);
return options;
}
[FieldLoader.Ignore] public Lazy<Dictionary<string, ActorReference>> Actors;
public int PlayerCount { get { return Players.Count(p => p.Value.Playable); } }
@@ -177,7 +214,7 @@ namespace OpenRA
"Description",
"Author",
"Tileset",
"Difficulties",
"Options",
"MapSize",
"Bounds",
"UseAsShellmap",