Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }