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); }
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); } } }
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); } } }
// 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); }
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); } }
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); }
/// <summary> /// Register a Handler for messages, can override a previous handler. /// </summary> public static void SetHandler(SubMod id, Handler messageHandler) { Handlers[id] = messageHandler; }
/// <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); }