private void InitializeUpgradeHandlers()
        {
            QuickLogger.Debug($"UpgradeManager adding new UpgradeHandlers from external mods");
            // First, register upgrades from other mods.
            foreach (KeyValuePair <CreateUpgradeHandler, string> pair in HandlerCreators)
            {
                CreateUpgradeHandler upgradeHandlerCreator = pair.Key;
                string         assemblyName = pair.Value;
                UpgradeHandler upgrade      = upgradeHandlerCreator.Invoke(Cyclops);

                if (upgrade == null)
                {
                    QuickLogger.Warning($"UpgradeHandler from '{assemblyName}' was null");
                }
                else if (!KnownsUpgradeModules.ContainsKey(upgrade.TechType))
                {
                    upgrade.RegisterSelf(KnownsUpgradeModules);
                }
                else
                {
                    QuickLogger.Warning($"Duplicate UpgradeHandler for '{upgrade.TechType.AsString()}' from '{assemblyName}' was blocked");
                }
            }

            // Next, if no external mod has provided an UpgradeHandler for the vanilla upgrades, they will be added here.
            // This is to allow other mods to provide new functionality to the original upgrades.

            QuickLogger.Debug($"UpgradeManager adding default UpgradeHandlers for unmanaged vanilla upgrades");

            for (int i = 0; i < vanillaUpgrades.OriginalUpgradeIDs.Count; i++)
            {
                TechType upgradeID = vanillaUpgrades.OriginalUpgradeIDs[i];
                if (!KnownsUpgradeModules.ContainsKey(upgradeID))
                {
                    UpgradeHandler vanillaUpgrade = vanillaUpgrades.CreateUpgradeHandler(upgradeID, Cyclops);
                    vanillaUpgrade.RegisterSelf(KnownsUpgradeModules);
                }
            }

            upgradeHandlers = new UpgradeHandler[KnownsUpgradeModules.Count];

            int u = 0;

            foreach (UpgradeHandler upgrade in KnownsUpgradeModules.Values)
            {
                upgradeHandlers[u++] = upgrade;
            }

            QuickLogger.Debug("Attaching events to Engine Room Upgrade Console");

            if (engineRoomUpgradeConsole == null)
            {
                engineRoomUpgradeConsole = Cyclops.upgradeConsole.modules;
            }

            AttachEquipmentEvents(ref engineRoomUpgradeConsole);

            initialized       = true;
            TooLateToRegister = true;
        }
示例#2
0
        internal static void RegisterHandlerCreator(CreateUpgradeHandler createEvent, string assemblyName)
        {
            if (HandlerCreators.ContainsKey(createEvent))
            {
                QuickLogger.Warning($"Duplicate UpgradeHandlerCreator blocked from {assemblyName}");
                return;
            }

            QuickLogger.Info($"Received UpgradeHandlerCreator from {assemblyName}");
            HandlerCreators.Add(createEvent, assemblyName);
        }
 /// <summary>
 /// Registers a <see cref="CreateUpgradeHandler" /> method that creates a new <see cref="UpgradeHandler" /> on demand.<para />
 /// This method will be invoked only once for each Cyclops sub in the game world.
 /// </summary>
 /// <param name="createEvent">A method that takes no parameters a returns a new instance of an <see cref="UpgradeHandler" />.</param>
 public void CyclopsUpgradeHandler(CreateUpgradeHandler createEvent)
 {
     if (UpgradeManager.TooLateToRegister)
     {
         QuickLogger.Error("UpgradeHandlerCreators have already been invoked. This method should only be called during patch time.");
     }
     else
     {
         UpgradeManager.RegisterHandlerCreator(createEvent, Assembly.GetCallingAssembly().GetName().Name);
     }
 }