Move advanced map yaml to their own files.

This commit is contained in:
Paul Chote
2016-02-22 20:59:14 +00:00
parent e313ce62f0
commit b969d61466
9 changed files with 108 additions and 65 deletions

View File

@@ -165,6 +165,8 @@ namespace OpenRA.Mods.TS.UtilityCommands
var filename = args[1];
var file = new IniFile(File.Open(args[1], FileMode.Open));
var map = GenerateMapHeader(filename, file, modData);
var dest = Path.GetFileNameWithoutExtension(args[1]) + ".oramap";
var package = new ZipFile(modData.DefaultFileSystem, dest, true);
ReadTiles(map, file);
ReadActors(map, file, "Structures");
@@ -173,13 +175,11 @@ namespace OpenRA.Mods.TS.UtilityCommands
ReadTerrainActors(map, file);
ReadWaypoints(map, file);
ReadOverlay(map, file);
ReadLighting(map, file);
ReadLighting(map, package, file);
var mapPlayers = new MapPlayers(map.Rules, spawnCount);
map.PlayerDefinitions = mapPlayers.ToMiniYaml();
var dest = Path.GetFileNameWithoutExtension(args[1]) + ".oramap";
var package = new ZipFile(modData.DefaultFileSystem, dest, true);
map.Save(package);
Console.WriteLine(dest + " saved.");
}
@@ -431,29 +431,32 @@ namespace OpenRA.Mods.TS.UtilityCommands
}
}
void ReadLighting(Map map, IniFile file)
void ReadLighting(Map map, IReadWritePackage package, IniFile file)
{
var lightingTypes = new[] { "Red", "Green", "Blue", "Ambient" };
var lightingSection = file.GetSection("Lighting");
var lightingNodes = new List<MiniYamlNode>();
var lightingNode = new MiniYamlNode("GlobalLightingPaletteEffect", new MiniYaml("", new List<MiniYamlNode>()));
var worldNode = new MiniYamlNode("World", new MiniYaml("", new List<MiniYamlNode>() { lightingNode }));
foreach (var kv in lightingSection)
{
if (lightingTypes.Contains(kv.Key))
{
var val = FieldLoader.GetValue<float>(kv.Key, kv.Value);
if (val != 1.0f)
lightingNodes.Add(new MiniYamlNode(kv.Key, FieldSaver.FormatValue(val)));
lightingNode.Value.Nodes.Add(new MiniYamlNode(kv.Key, FieldSaver.FormatValue(val)));
}
else
Console.WriteLine("Ignoring unknown lighting type: `{0}`".F(kv.Key));
}
if (lightingNodes.Any())
if (lightingNode.Value.Nodes.Any())
{
map.RuleDefinitions.Add(new MiniYamlNode("World", new MiniYaml("", new List<MiniYamlNode>()
{
new MiniYamlNode("GlobalLightingPaletteEffect", new MiniYaml("", lightingNodes))
})));
// HACK: bypassing the readonly modifier here is still better than leaving this mutable by everyone
typeof(Map).GetField("RuleDefinitions").SetValue(map, new[] { "rules.yaml" });
var rulesText = new List<MiniYamlNode>() { worldNode }.ToLines(false).JoinWith("\n");
package.Update("rules.yaml", System.Text.Encoding.ASCII.GetBytes(rulesText));
}
}
}