#region Copyright & License Information /* * Copyright 2007-2010 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, * see LICENSE. */ #endregion using System; using System.Collections.Generic; using System.Linq; using OpenRA.FileFormats; using OpenRA.GameRules; namespace OpenRA { public static class Rules { public static Dictionary Info; public static Dictionary Weapons; public static Dictionary Voices; public static Dictionary Music; public static Dictionary Movies; public static Dictionary TileSets; public static void LoadRules(Manifest m, Map map) { // Added support to extend the list of rules (add it to m.LocalRules) Info = LoadYamlRules(m.Rules, map.Rules, (k, y) => new ActorInfo(k.Key.ToLowerInvariant(), k.Value, y)); Weapons = LoadYamlRules(m.Weapons, map.Weapons, (k, _) => new WeaponInfo(k.Key.ToLowerInvariant(), k.Value)); Voices = LoadYamlRules(m.Voices, map.Voices, (k, _) => new VoiceInfo(k.Value)); Music = LoadYamlRules(m.Music, new List(), (k, _) => new MusicInfo(k.Key, k.Value)); Movies = LoadYamlRules(m.Movies, new List(), (k, v) => k.Value.Value); TileSets = new Dictionary(); foreach (var file in m.TileSets) { var t = new TileSet(file); TileSets.Add(t.Id,t); } } static Dictionary LoadYamlRules(string[] files, List dict, Func, T> f) { var y = files.Select(a => MiniYaml.FromFile(a)).Aggregate(dict,MiniYaml.Merge); var yy = y.ToDictionary( x => x.Key, x => x.Value ); return y.ToDictionary(kv => kv.Key.ToLowerInvariant(), kv => f(kv, yy)); } } }