Beispiel #1
0
        public static SingleModGroup?Load(JObject json, DirectoryInfo basePath)
        {
            var options = json["Options"];
            var ret     = new SingleModGroup
            {
                Name        = json[nameof(Name)]?.ToObject <string>() ?? string.Empty,
                Description = json[nameof(Description)]?.ToObject <string>() ?? string.Empty,
                Priority    = json[nameof(Priority)]?.ToObject <int>() ?? 0,
            };

            if (ret.Name.Length == 0)
            {
                return(null);
            }

            if (options != null)
            {
                foreach (var child in options.Children())
                {
                    var subMod = new SubMod();
                    subMod.Load(basePath, child, out _);
                    ret.OptionData.Add(subMod);
                }
            }

            return(ret);
        }
        public static MultiModGroup?Load(JObject json, DirectoryInfo basePath)
        {
            var options = json["Options"];
            var ret     = new MultiModGroup()
            {
                Name        = json[nameof(Name)]?.ToObject <string>() ?? string.Empty,
                Description = json[nameof(Description)]?.ToObject <string>() ?? string.Empty,
                Priority    = json[nameof(Priority)]?.ToObject <int>() ?? 0,
            };

            if (ret.Name.Length == 0)
            {
                return(null);
            }

            if (options != null)
            {
                foreach (var child in options.Children())
                {
                    if (ret.PrioritizedOptions.Count == IModGroup.MaxMultiOptions)
                    {
                        PluginLog.Warning($"Multi Group {ret.Name} has more than {IModGroup.MaxMultiOptions} options, ignoring excessive options.");
                        break;
                    }
                    var subMod = new SubMod();
                    subMod.Load(basePath, child, out var priority);
                    ret.PrioritizedOptions.Add((subMod, priority));
                }
            }

            return(ret);
        }
Beispiel #3
0
        private static SubMod SubModFromOption(DirectoryInfo basePath, OptionV0 option, HashSet <FullPath> seenMetaFiles)
        {
            var subMod = new SubMod {
                Name = option.OptionName
            };

            AddFilesToSubMod(subMod, basePath, option, seenMetaFiles);
            subMod.IncorporateMetaChanges(basePath, false);
            return(subMod);
        }
        private void DeleteVariation_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;

            if (btn != null)
            {
                SubMod fm = btn.CommandParameter as SubMod;
                if (fm != null)
                {
                    Configuration.SubMods.SubMods.Remove(fm);
                }
            }
        }
Beispiel #5
0
        private static void AddFilesToSubMod(SubMod mod, DirectoryInfo basePath, OptionV0 option, HashSet <FullPath> seenMetaFiles)
        {
            foreach (var(relPath, gamePaths) in option.OptionFiles)
            {
                var fullPath = new FullPath(basePath, relPath);
                foreach (var gamePath in gamePaths)
                {
                    mod.FileData.TryAdd(gamePath, fullPath);
                }

                if (fullPath.Extension is ".meta" or ".rgsp")
                {
                    seenMetaFiles.Add(fullPath);
                }
            }
        }
Beispiel #6
0
    // Create the data for a given sub mod from its data and the folder it is based on.
    internal static ISubMod CreateSubMod(DirectoryInfo baseFolder, DirectoryInfo optionFolder, OptionList option)
    {
        var list = optionFolder.EnumerateFiles("*.*", SearchOption.AllDirectories)
                   .Select(f => (Utf8GamePath.FromFile(f, optionFolder, out var gamePath, true), gamePath, new FullPath(f)))
                   .Where(t => t.Item1);

        var mod = new SubMod
        {
            Name = option.Name,
        };

        foreach (var(_, gamePath, file) in list)
        {
            mod.FileData.TryAdd(gamePath, file);
        }

        mod.IncorporateMetaChanges(baseFolder, true);
        return(mod);
    }
Beispiel #7
0
        private static void HandleMessage(byte[] received)
        {
            Handler handler;
            int     position = 0;
            SubMod  dest     = (SubMod)ByteConverter.GetByte(received, ref position);

            if (Handlers.TryGetValue(dest, out handler))
            {
                try { handler(received, position); }
                catch (Exception ex)
                {
                    Logger.AlwaysLog("Handler threw exception: " + ex, Logger.severity.ERROR);
                    Logger.AlwaysLog("Removing handler for " + dest, Logger.severity.ERROR);
                    Handlers.Remove(dest);
                }
            }
            else
            {
                Logger.AlwaysLog("No handler for " + dest, Logger.severity.WARNING);
            }
        }
Beispiel #8
0
        private void Activate_Click(object sender, RoutedEventArgs e)
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString());
            }
            Button btn = sender as Button;

            if (btn != null)
            {
                SubMod sm = btn.CommandParameter as SubMod;
                if (sm != null)
                {
                    Mod.ActivateSubMod(sm.Title);
                    ActiveModConfigurations.Current.SaveData();
                }
            }
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Ending {0}", MethodBase.GetCurrentMethod().ToString());
            }
        }
        private void AddVariation_Click(object sender, RoutedEventArgs e)
        {
            SubMod sm = new SubMod();

            Configuration.SubMods.SubMods.Add(sm);
        }
Beispiel #10
0
 /// <summary>
 /// Register a Handler for messages, can override a previous handler.
 /// </summary>
 public static void SetHandler(SubMod id, Handler messageHandler)
 {
     Handlers[id] = messageHandler;
 }
Beispiel #11
0
 /// <summary>
 /// Register a Handler for messages, only register once or an exception will be thrown.
 /// </summary>
 public static void AddHandler(SubMod id, Handler messageHandler)
 {
     Handlers.Add(id, messageHandler);
 }