#region Copyright & License Information /* * Copyright 2007-2011 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 COPYING. */ #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 Notifications; 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 SoundInfo(k.Value)); Notifications = LoadYamlRules(m.Notifications, map.Notifications, (k, _) => new SoundInfo(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(MiniYaml.FromFile).Aggregate(dict, MiniYaml.MergeLiberal); var yy = y.ToDictionary(x => x.Key, x => x.Value); return y.ToDictionaryWithConflictLog(kv => kv.Key.ToLowerInvariant(), kv => f(kv, yy), "LoadYamlRules", null, null); } public static IEnumerable> InstalledMusic { get { return Music.Where(m => m.Value.Exists); } } } }