#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 TechTree TechTree; public static Dictionary Info; public static Dictionary Weapons; public static Dictionary Voices; public static Dictionary Music; public static Dictionary TileSets; public static void LoadRules(Manifest m, Map map) { 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, map.Music, (k, _) => new MusicInfo(k.Value)); TileSets = new Dictionary(); foreach (var file in m.TileSets) { var t = new TileSet(file); TileSets.Add(t.Id,t); } TechTree = new TechTree(); } static Dictionary LoadYamlRules(string[] files, Dictionarydict, Func, Dictionary, T> f) { var y = files.Select(a => MiniYaml.FromFile(a)).Aggregate(dict,MiniYaml.Merge); return y.ToDictionary(kv => kv.Key.ToLowerInvariant(), kv => f(kv, y)); } public static IEnumerable Categories() { return Info.Values.Select( x => x.Category ).Distinct().Where( g => g != null ).ToList(); } } }