Пример #1
0
 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);
     }
 }
Пример #2
0
 private static void DisableDependents(GadgetInfo gadget)
 {
     foreach (GadgetInfo dependent in gadget.Dependents)
     {
         if (dependent.Gadget.Enabled)
         {
             SetEnabled(dependent, false);
         }
     }
 }
Пример #3
0
 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);
         }
     }
 }
Пример #4
0
 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);
         }
     }
 }
Пример #5
0
 /// <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;
     }
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
 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);
     }
 }
Пример #8
0
 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();
     }
 }
Пример #9
0
 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();
     }
 }
Пример #10
0
 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();
     }
 }
Пример #11
0
 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();
     }
 }
Пример #12
0
 /// <summary>
 /// Reloads the given Gadget.
 /// </summary>
 public static void ReloadGadget(GadgetInfo gadget)
 {
     SetEnabled(gadget, false);
     SetEnabled(gadget, true);
 }