Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of TeleporterBeamQoL v1.0.1
plugins/CryptidLabs-TeleporterBeamQoL/TeleporterBeamQoL.dll
Decompiled 3 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using Microsoft.CodeAnalysis; using On.RoR2; using RiskOfOptions; using RiskOfOptions.Options; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("CryptidLabs")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TeleporterBeamQoL")] [assembly: AssemblyTitle("TeleporterBeamQoL")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace TeleporterBeamQoL { [BepInPlugin("com.cryptidlabs.teleporterbeamqol", "Teleporter Beam QoL", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class Plugin : BaseUnityPlugin { private sealed class BeamColorController : MonoBehaviour { public TeleporterInteraction Teleporter; private ParticleSystemRenderer beamRenderer; private bool activated; private bool completed; private float hue; private float displayedSpeed; public void MarkActivated() { activated = true; completed = false; if (pluginEnabled.Value) { ((Component)this).gameObject.SetActive(true); } } public void MarkCompleted() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) completed = true; if (pluginEnabled.Value && staticOnCompletion.Value) { ((Component)this).gameObject.SetActive(true); ApplyColor(GetStaticColor()); } } private void Awake() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) beamRenderer = ((Component)this).GetComponentInChildren<ParticleSystemRenderer>(true); displayedSpeed = Mathf.Max(0f, rgbSpeed.Value); ApplyColor(GetStaticColor()); } private void Update() { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) if (!pluginEnabled.Value) { return; } if ((Object)(object)Teleporter != (Object)null && (Teleporter.isCharged || Teleporter.chargeFraction >= 0.999f)) { completed = true; } if (completed && staticOnCompletion.Value) { ((Component)this).gameObject.SetActive(true); ApplyColor(GetStaticColor()); return; } if (!rgbCycleEnabled.Value) { ApplyColor(GetStaticColor()); return; } if (rainbowOnActivation.Value && !activated) { ApplyColor(GetStaticColor()); return; } float num = Mathf.Max(0f, rgbSpeed.Value); if (slowDownWithCharge.Value && (Object)(object)Teleporter != (Object)null) { float num2 = Mathf.Clamp01(minSpeedMultiplier.Value); float num3 = 1f - (1f - num2) * Mathf.Clamp01(Teleporter.chargeFraction); num *= num3; } if (smoothSpeedChanges.Value) { displayedSpeed = Mathf.MoveTowards(displayedSpeed, num, Mathf.Max(0.001f, speedChangeRate.Value) * Time.deltaTime); } else { displayedSpeed = num; } hue = Mathf.Repeat(hue + displayedSpeed * Time.deltaTime, 1f); Color color = Color.HSVToRGB(hue, 1f, 1f); color.a = staticColor.Value.a; ApplyColor(ApplyBrightness(color)); } private void ApplyColor(Color color) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)beamRenderer == (Object)null) { beamRenderer = ((Component)this).GetComponentInChildren<ParticleSystemRenderer>(true); } if (!((Object)(object)beamRenderer == (Object)null)) { Material material = ((Renderer)beamRenderer).material; if (!((Object)(object)material == (Object)null)) { material.SetColor("_TintColor", color); material.SetColor("_Color", color); } } } } [CompilerGenerated] private static class <>O { public static hook_Awake <0>__TeleporterInteraction_Awake; public static hook_OnInteractionBegin <1>__TeleporterInteraction_OnInteractionBegin; public static Action<TeleporterInteraction> <2>__OnTeleporterCharged; } public const string PluginGuid = "com.cryptidlabs.teleporterbeamqol"; public const string PluginName = "Teleporter Beam QoL"; public const string PluginVersion = "1.0.1"; private const string OriginalTeleporterBeamGuid = "com.rob.TeleporterBeam"; private static ConfigEntry<bool> pluginEnabled; private static ConfigEntry<bool> rgbCycleEnabled; private static ConfigEntry<bool> rainbowOnActivation; private static ConfigEntry<bool> staticOnCompletion; private static ConfigEntry<bool> slowDownWithCharge; private static ConfigEntry<bool> smoothSpeedChanges; private static ConfigEntry<float> rgbSpeed; private static ConfigEntry<float> minSpeedMultiplier; private static ConfigEntry<float> speedChangeRate; private static ConfigEntry<float> beamBrightness; private static ConfigEntry<Color> staticColor; private static ConfigEntry<string> staticColorHex; private static ConfigEntry<bool> legacyConfigMigrated; private void Awake() { //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Expected O, but got Unknown //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Expected O, but got Unknown pluginEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "Enabled", true, "Master toggle for Teleporter Beam QoL behavior."); rgbCycleEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "RGB Cycle Enabled", true, "Cycle the teleporter beam through the full color spectrum."); rainbowOnActivation = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "Rainbow On Activation", true, "Start the full-spectrum rainbow when the teleporter is activated instead of while it is idle."); staticOnCompletion = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "Static On Completion", true, "Switch the beam back to Static Color after the teleporter finishes charging."); slowDownWithCharge = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "Slow Down With Charge", true, "Reduce rainbow cycle speed as the teleporter charge timer fills."); smoothSpeedChanges = ((BaseUnityPlugin)this).Config.Bind<bool>("Teleporter Beam", "Smooth Speed Changes", true, "Smooth RGB speed changes so charge-speed effects such as Focused Convergence do not make the beam lurch."); rgbSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter Beam", "RGB Cycle Speed", 0.02f, "Full-spectrum hue cycles per second."); minSpeedMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter Beam", "Minimum Speed Multiplier", 0.15f, "Lowest speed multiplier at full charge when slowdown is enabled. Use 0 to 1."); speedChangeRate = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter Beam", "Speed Change Rate", 0.02f, "Maximum RGB speed adjustment per second when Smooth Speed Changes is enabled."); beamBrightness = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter Beam", "Beam Brightness", 0.45f, "Multiplies the beam color before the glow shader. Lower this if colors look white or overexposed."); staticColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Teleporter Beam", "Static Color", new Color(72f / 85f, 0.7058824f, 0.972549f, 1f), "Static beam color before activation, whenever RGB cycling is disabled, and after completion when Static On Completion is enabled."); staticColorHex = ((BaseUnityPlugin)this).Config.Bind<string>("Teleporter Beam", "Static Color Hex", "#D8B4F8", "Optional hex override for Static Color. Use #RRGGBB or #RRGGBBAA. Leave blank to use the color picker value."); legacyConfigMigrated = ((BaseUnityPlugin)this).Config.Bind<bool>("Migration", "Legacy Config Migrated", false, "Internal flag used after importing settings from a previously patched TeleporterBeam config."); MigrateLegacyPatchedConfig(); object obj = <>O.<0>__TeleporterInteraction_Awake; if (obj == null) { hook_Awake val = TeleporterInteraction_Awake; <>O.<0>__TeleporterInteraction_Awake = val; obj = (object)val; } TeleporterInteraction.Awake += (hook_Awake)obj; object obj2 = <>O.<1>__TeleporterInteraction_OnInteractionBegin; if (obj2 == null) { hook_OnInteractionBegin val2 = TeleporterInteraction_OnInteractionBegin; <>O.<1>__TeleporterInteraction_OnInteractionBegin = val2; obj2 = (object)val2; } TeleporterInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2; TeleporterInteraction.onTeleporterChargedGlobal += OnTeleporterCharged; RegisterRiskOfOptions(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Teleporter Beam QoL loaded."); } private static void MigrateLegacyPatchedConfig() { //IL_010f: Unknown result type (might be due to invalid IL or missing references) if (legacyConfigMigrated.Value) { return; } string path = Path.Combine(Paths.ConfigPath, "com.rob.TeleporterBeam.cfg"); if (!File.Exists(path)) { legacyConfigMigrated.Value = true; return; } Dictionary<string, string> dictionary = ReadLegacyTeleporterBeamSection(path); if (TryGetBool(dictionary, "RGB Cycle Enabled", out var result)) { rgbCycleEnabled.Value = result; } if (TryGetFloat(dictionary, "RGB Cycle Speed", out var result2)) { rgbSpeed.Value = result2; } if (TryGetBool(dictionary, "Rainbow On Activation", out var result3)) { rainbowOnActivation.Value = result3; } if (TryGetBool(dictionary, "Slow Down With Charge", out var result4)) { slowDownWithCharge.Value = result4; } if (TryGetFloat(dictionary, "Minimum Speed Multiplier", out var result5)) { minSpeedMultiplier.Value = result5; } if (TryGetFloat(dictionary, "Beam Brightness", out var result6)) { beamBrightness.Value = result6; } if (dictionary.TryGetValue("Static Color Hex", out var value)) { staticColorHex.Value = value; } if (dictionary.TryGetValue("Static Color", out var value2) && TryParseHexColor(value2, out var color)) { staticColor.Value = color; } legacyConfigMigrated.Value = true; } private static Dictionary<string, string> ReadLegacyTeleporterBeamSection(string path) { Dictionary<string, string> dictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); bool flag = false; string[] array = File.ReadAllLines(path); for (int i = 0; i < array.Length; i++) { string text = array[i].Trim(); if (text.Length == 0 || text.StartsWith("#", StringComparison.Ordinal)) { continue; } if (text.StartsWith("[", StringComparison.Ordinal) && text.EndsWith("]", StringComparison.Ordinal)) { flag = string.Equals(text, "[Teleporter Beam]", StringComparison.OrdinalIgnoreCase); } else if (flag) { int num = text.IndexOf('='); if (num > 0) { dictionary[text.Substring(0, num).Trim()] = text.Substring(num + 1).Trim(); } } } return dictionary; } private static bool TryGetBool(Dictionary<string, string> values, string key, out bool result) { result = false; if (values.TryGetValue(key, out var value)) { return bool.TryParse(value, out result); } return false; } private static bool TryGetFloat(Dictionary<string, string> values, string key, out float result) { result = 0f; if (values.TryGetValue(key, out var value)) { return float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out result); } return false; } private void OnDestroy() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown object obj = <>O.<0>__TeleporterInteraction_Awake; if (obj == null) { hook_Awake val = TeleporterInteraction_Awake; <>O.<0>__TeleporterInteraction_Awake = val; obj = (object)val; } TeleporterInteraction.Awake -= (hook_Awake)obj; object obj2 = <>O.<1>__TeleporterInteraction_OnInteractionBegin; if (obj2 == null) { hook_OnInteractionBegin val2 = TeleporterInteraction_OnInteractionBegin; <>O.<1>__TeleporterInteraction_OnInteractionBegin = val2; obj2 = (object)val2; } TeleporterInteraction.OnInteractionBegin -= (hook_OnInteractionBegin)obj2; TeleporterInteraction.onTeleporterChargedGlobal -= OnTeleporterCharged; } private static void TeleporterInteraction_Awake(orig_Awake orig, TeleporterInteraction self) { orig.Invoke(self); TryAttachController(self); } private static void TeleporterInteraction_OnInteractionBegin(orig_OnInteractionBegin orig, TeleporterInteraction self, Interactor activator) { orig.Invoke(self, activator); BeamColorController beamColorController = TryAttachController(self); if ((Object)(object)beamColorController != (Object)null) { beamColorController.MarkActivated(); } } private static void OnTeleporterCharged(TeleporterInteraction teleporter) { BeamColorController beamColorController = TryAttachController(teleporter); if ((Object)(object)beamColorController != (Object)null) { beamColorController.MarkCompleted(); } } private static BeamColorController TryAttachController(TeleporterInteraction teleporter) { if ((Object)(object)teleporter == (Object)null) { return null; } ModelLocator component = ((Component)teleporter).GetComponent<ModelLocator>(); Transform val = (((Object)(object)component != (Object)null) ? component.modelTransform : null); Transform val2 = (((Object)(object)val != (Object)null) ? val.Find("TeleporterBeam") : null); if ((Object)(object)val2 == (Object)null) { return null; } BeamColorController beamColorController = ((Component)val2).GetComponent<BeamColorController>(); if ((Object)(object)beamColorController == (Object)null) { beamColorController = ((Component)val2).gameObject.AddComponent<BeamColorController>(); } beamColorController.Teleporter = teleporter; return beamColorController; } private static Color GetStaticColor() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) Color color; Color color2 = ((!TryParseHexColor(staticColorHex.Value, out color)) ? staticColor.Value : color); return ApplyBrightness(color2); } private static Color ApplyBrightness(Color color) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(0f, beamBrightness.Value); return new Color(color.r * num, color.g * num, color.b * num, color.a); } private static bool TryParseHexColor(string value, out Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) color = default(Color); if (string.IsNullOrWhiteSpace(value)) { return false; } string text = value.Trim(); if (!text.StartsWith("#", StringComparison.Ordinal)) { text = "#" + text; } return ColorUtility.TryParseHtmlString(text, ref color); } private static void RegisterRiskOfOptions() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Expected O, but got Unknown //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Expected O, but got Unknown //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Expected O, but got Unknown //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { ModSettingsManager.SetModDescription("Adds RGB cycling, static color controls, brightness, charge slowdown, and static-on-completion behavior for ParticleSystem's TeleporterBeam.", "com.cryptidlabs.teleporterbeamqol", "Teleporter Beam QoL"); Sprite val = LoadSprite(Path.Combine(GetPluginDirectory(), "icon.png"), "TeleporterBeamQoLIcon"); if ((Object)(object)val != (Object)null) { ModSettingsManager.SetModIcon(val, "com.cryptidlabs.teleporterbeamqol", "Teleporter Beam QoL"); } AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(pluginEnabled)); AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(rgbCycleEnabled)); AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(rainbowOnActivation)); AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(staticOnCompletion)); AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(slowDownWithCharge)); AddRiskOfOptionsOption((BaseOption)new CheckBoxOption(smoothSpeedChanges)); AddRiskOfOptionsOption((BaseOption)new StepSliderOption(rgbSpeed)); AddRiskOfOptionsOption((BaseOption)new StepSliderOption(minSpeedMultiplier)); AddRiskOfOptionsOption((BaseOption)new StepSliderOption(speedChangeRate)); AddRiskOfOptionsOption((BaseOption)new StepSliderOption(beamBrightness)); AddRiskOfOptionsOption((BaseOption)new ColorOption(staticColor)); AddRiskOfOptionsOption((BaseOption)new StringInputFieldOption(staticColorHex)); } } private static void AddRiskOfOptionsOption(BaseOption option) { ModSettingsManager.AddOption(option, "com.cryptidlabs.teleporterbeamqol", "Teleporter Beam QoL"); } private static Sprite LoadSprite(string path, string spriteName) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) if (!File.Exists(path)) { return null; } byte[] array = File.ReadAllBytes(path); Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false); if (!ImageConversion.LoadImage(val, array)) { return null; } ((Object)val).name = spriteName; ((Texture)val).wrapMode = (TextureWrapMode)1; return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), (float)((Texture)val).width); } private static string GetPluginDirectory() { return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? Paths.PluginPath; } } }