ReactorPluginManager() { VanillaReactorMaxType = Enum.GetValues(typeof(EReactorType)).Length; Logger.Info($"MaxTypeint = {VanillaReactorMaxType - 1}"); foreach (PulsarPlugin plugin in PluginManager.Instance.GetAllPlugins()) { Assembly asm = plugin.GetType().Assembly; Type ReactorPlugin = typeof(ReactorPlugin); foreach (Type t in asm.GetTypes()) { if (ReactorPlugin.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract) { Logger.Info("Loading reactor from assembly"); ReactorPlugin ReactorPluginHandler = (ReactorPlugin)Activator.CreateInstance(t); if (GetReactorIDFromName(ReactorPluginHandler.Name) == -1) { ReactorTypes.Add(ReactorPluginHandler); Logger.Info($"Added reactor: '{ReactorPluginHandler.Name}' with ID '{GetReactorIDFromName(ReactorPluginHandler.Name)}'"); } else { Logger.Info($"Could not add reactor from {plugin.Name} with the duplicate name of '{ReactorPluginHandler.Name}'"); } } } } }
public static PLReactor CreateReactor(int Subtype, int level) { PLReactor InReactor; if (Subtype >= Instance.VanillaReactorMaxType) { InReactor = new PLReactor(EReactorType.E_REAC_ID_MAX, level); int subtypeformodded = Subtype - Instance.VanillaReactorMaxType; if (Global.DebugLogging) { Logger.Info($"Subtype for modded is {subtypeformodded}"); } if (subtypeformodded <= Instance.ReactorTypes.Count && subtypeformodded > -1) { if (Global.DebugLogging) { Logger.Info("Creating reactor from list info"); } ReactorPlugin ReactorType = Instance.ReactorTypes[Subtype - Instance.VanillaReactorMaxType]; InReactor.SubType = Subtype; InReactor.Name = ReactorType.Name; InReactor.Desc = ReactorType.Description; InReactor.GetType().GetField("m_IconTexture", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, ReactorType.IconTexture); InReactor.EnergyOutputMax = ReactorType.EnergyOutputMax; InReactor.EnergySignatureAmt = ReactorType.EnergySignatureAmount; InReactor.TempMax = ReactorType.MaxTemp; InReactor.EmergencyCooldownTime = ReactorType.EmergencyCooldownTime; InReactor.HeatOutput = ReactorType.HeatOutput; InReactor.GetType().GetField("m_MarketPrice", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, (ObscuredInt)ReactorType.MarketPrice); InReactor.CargoVisualPrefabID = ReactorType.CargoVisualID; InReactor.CanBeDroppedOnShipDeath = ReactorType.CanBeDroppedOnShipDeath; InReactor.Experimental = ReactorType.Experimental; InReactor.Unstable = ReactorType.Unstable; InReactor.Contraband = ReactorType.Contraband; InReactor.GetType().GetField("OriginalEnergyOutputMax", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, InReactor.EnergyOutputMax); InReactor.GetType().GetField("Price_LevelMultiplierExponent", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InReactor, (ObscuredFloat)ReactorType.Price_LevelMultiplierExponent); } } else { InReactor = new PLReactor((EReactorType)Subtype, level); } return(InReactor); }