public static Ruleset LoadDefaults(ModData modData) { var m = modData.Manifest; var fs = modData.DefaultFileSystem; Ruleset ruleset = null; Action f = () => { var actors = MergeOrDefault("Manifest,Rules", fs, m.Rules, null, null, k => new ActorInfo(modData.ObjectCreator, k.Key.ToLowerInvariant(), k.Value), filterNode: n => n.Key.StartsWith(ActorInfo.AbstractActorPrefix, StringComparison.Ordinal)); var weapons = MergeOrDefault("Manifest,Weapons", fs, m.Weapons, null, null, k => new WeaponInfo(k.Key.ToLowerInvariant(), k.Value)); var voices = MergeOrDefault("Manifest,Voices", fs, m.Voices, null, null, k => new SoundInfo(k.Value)); var notifications = MergeOrDefault("Manifest,Notifications", fs, m.Notifications, null, null, k => new SoundInfo(k.Value)); var music = MergeOrDefault("Manifest,Music", fs, m.Music, null, null, k => new MusicInfo(k.Key, k.Value)); var modelSequences = MergeOrDefault("Manifest,ModelSequences", fs, m.ModelSequences, null, null, k => k); // The default ruleset does not include a preferred tileset or sequence set ruleset = new Ruleset(actors, weapons, voices, notifications, music, null, null, modelSequences); }; if (modData.IsOnMainThread) { modData.HandleLoadingProgress(); var loader = new Task(f); loader.Start(); // Animate the loadscreen while we wait while (!loader.Wait(40)) { modData.HandleLoadingProgress(); } } else { f(); } return(ruleset); }
public static Ruleset Load(ModData modData, IReadOnlyFileSystem fileSystem, string tileSet, MiniYaml mapRules, MiniYaml mapWeapons, MiniYaml mapVoices, MiniYaml mapNotifications, MiniYaml mapMusic, MiniYaml mapSequences, MiniYaml mapModelSequences) { var m = modData.Manifest; var dr = modData.DefaultRules; Ruleset ruleset = null; Action f = () => { var actors = MergeOrDefault("Rules", fileSystem, m.Rules, mapRules, dr.Actors, k => new ActorInfo(modData.ObjectCreator, k.Key.ToLowerInvariant(), k.Value), filterNode: n => n.Key.StartsWith(ActorInfo.AbstractActorPrefix, StringComparison.Ordinal)); var weapons = MergeOrDefault("Weapons", fileSystem, m.Weapons, mapWeapons, dr.Weapons, k => new WeaponInfo(k.Key.ToLowerInvariant(), k.Value)); var voices = MergeOrDefault("Voices", fileSystem, m.Voices, mapVoices, dr.Voices, k => new SoundInfo(k.Value)); var notifications = MergeOrDefault("Notifications", fileSystem, m.Notifications, mapNotifications, dr.Notifications, k => new SoundInfo(k.Value)); var music = MergeOrDefault("Music", fileSystem, m.Music, mapMusic, dr.Music, k => new MusicInfo(k.Key, k.Value)); // TODO: Add support for merging custom tileset modifications var ts = modData.DefaultTileSets[tileSet]; // TODO: Top-level dictionary should be moved into the Ruleset instead of in its own object var sequences = mapSequences == null ? modData.DefaultSequences[tileSet] : new SequenceProvider(fileSystem, modData, ts, mapSequences); var modelSequences = dr.ModelSequences; if (mapModelSequences != null) { modelSequences = MergeOrDefault("ModelSequences", fileSystem, m.ModelSequences, mapModelSequences, dr.ModelSequences, k => k); } ruleset = new Ruleset(actors, weapons, voices, notifications, music, ts, sequences, modelSequences); }; if (modData.IsOnMainThread) { modData.HandleLoadingProgress(); var loader = new Task(f); loader.Start(); // Animate the loadscreen while we wait while (!loader.Wait(40)) { modData.HandleLoadingProgress(); } } else { f(); } return(ruleset); }