private static void RefreshAfters(GadgetInfo gadget) { foreach (GadgetInfo info in LoadOrderTree.Find(gadget).FlattenUniqueByBreadth().Where(x => x != gadget && x.Gadget.Enabled).Distinct()) { SetEnabled(info, false); SetEnabled(info, true); } }
private static void DisableDependents(GadgetInfo gadget) { foreach (GadgetInfo dependent in gadget.Dependents) { if (dependent.Gadget.Enabled) { SetEnabled(dependent, false); } } }
private static void DisableDependents(GadgetInfo gadget) { foreach (GadgetInfo dependent in gadget.Dependents) { if (dependent.Gadget.Enabled) { GadgetLoader.Logger.Log("Disabling Gadget Dependent of " + gadget + ": " + dependent); SetEnabled(dependent, false); } } }
private static void EnableDependencies(GadgetInfo gadget) { foreach (GadgetInfo dependency in gadget.Dependencies) { if (!dependency.Gadget.Enabled) { GadgetLoader.Logger.Log("Enabling Gadget Dependency of " + gadget + ": " + dependency); SetEnabled(dependency, true); } } }
/// <summary> /// Sets the Enabled status of the given gadget. Note that this can be queried using Gadget.Enabled. /// </summary> public static void SetEnabled(GadgetInfo gadget, bool enabled) { if (enabled && !gadget.Mod.Enabled) { GadgetMods.SetEnabled(gadget.Mod, true); } if (!SetEnabledInternal(gadget, enabled)) { return; } }
internal sealed override void UnregisterGadget(GadgetInfo gadget) { foreach (KeyValuePair <int, E> entry in Singleton.IDRegistry.Where(x => x.Value.RegistryName.Split(':')[0] == gadget.Attribute.Name).ToList()) { OnUnregister(entry.Value); Singleton.IDRegistry.Remove(entry.Key); } foreach (KeyValuePair <string, E> entry in Singleton.NameRegistry.Where(x => x.Value.RegistryName.Split(':')[0] == gadget.Attribute.Name).ToList()) { Singleton.NameRegistry.Remove(entry.Key); } }
private static bool SetEnabledInternal(GadgetInfo gadget, bool enabled) { try { if (gadget.Gadget.Enabled == enabled) { return(false); } bool wasBatchLoading = GadgetLoader.BatchLoading; GadgetLoader.BatchLoading = true; if (enabled) { if (gadget.Attribute.AllowRuntimeReloading) { EnableDependencies(gadget); RefreshAfters(gadget); } } else { DisableDependents(gadget); } GadgetCoreConfig.enabledGadgets[gadget.Attribute.Name] = enabled; if (gadget.Attribute.AllowRuntimeReloading || !enabled) { gadget.Gadget.Enabled = enabled; } GadgetLoader.BatchLoading = wasBatchLoading; GadgetLoader.QueuedGadgets.Add(gadget); if (!GadgetLoader.BatchLoading) { if (enabled) { if (gadget.Attribute.AllowRuntimeReloading) { GadgetLoader.EnableQueuedGadgets(); } } else { GadgetLoader.DisableQueuedGadgets(); } GadgetCoreConfig.Update(); } return(true); } catch (Exception e) { GadgetLoader.Logger.LogError("Error " + (enabled ? "enabling" : "disabling") + " Gadget `" + gadget.Attribute.Name + "`: " + e); return(false); } }
internal static void RegisterGadget(GadgetInfo mod) { mod.Gadget.Enabled = GadgetCoreConfig.enabledGadgets.ContainsKey(mod.Attribute.Name) ? GadgetCoreConfig.enabledGadgets[mod.Attribute.Name] : (GadgetCoreConfig.enabledGadgets[mod.Attribute.Name] = mod.Attribute.EnableByDefault); gadgets.Add(mod.Attribute.Name, mod); foreach (string name in mod.Gadget.GetPreviousModNames()) { previousNames[name] = mod; } if (!GadgetLoader.BatchLoading) { SortGadgets(); } }
internal static void UnregisterGadget(GadgetInfo mod) { gadgets.Remove(mod.Attribute.Name); foreach (Registry reg in GameRegistry.ListAllRegistries()) { reg.UnregisterGadget(mod); } mod.Mod.m_LoadedGadgets.Remove(mod); mod.Mod.m_UnloadedGadgets.Add(mod); if (!GadgetLoader.BatchLoading) { SortGadgets(); } }
internal static void RegisterGadget(GadgetInfo mod) { if (gadgets.ContainsKey(mod.Attribute.Name)) { throw new InvalidOperationException("Failed to register Gadget: Another Gadget by the same name has already been registered!"); } mod.Gadget.Enabled = GadgetCoreConfig.enabledGadgets.ContainsKey(mod.Attribute.Name) ? GadgetCoreConfig.enabledGadgets[mod.Attribute.Name] : (GadgetCoreConfig.enabledGadgets[mod.Attribute.Name] = mod.Attribute.EnableByDefault); gadgets.Add(mod.Attribute.Name, mod); foreach (string name in mod.Gadget.GetPreviousModNames()) { previousNames[name] = mod; } if (!GadgetLoader.BatchLoading) { SortGadgets(); } }
internal static void UnregisterGadget(GadgetInfo mod) { gadgets.Remove(mod.Attribute.Name); foreach (MultiTreeList <GadgetInfo> node in LoadOrderTree.FindAll(mod)) { node.RemoveFromTree(); } foreach (Registry reg in GameRegistry.ListAllRegistries()) { reg.UnregisterGadget(mod); } mod.Mod.m_LoadedGadgets.Remove(mod); mod.Mod.m_UnloadedGadgets.Add(mod); if (!GadgetLoader.BatchLoading) { SortGadgets(); } }
/// <summary> /// Reloads the given Gadget. /// </summary> public static void ReloadGadget(GadgetInfo gadget) { SetEnabled(gadget, false); SetEnabled(gadget, true); }