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 Black Phone 2 Mod v1.0.4
BlackPhone.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.AI; using UnityEngine.Rendering.PostProcessing; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Omniscye")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BlackPhone")] [assembly: AssemblyTitle("BlackPhone")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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; } } } [BepInPlugin("com.yourname.omniphonespawner", "OmniPhone Spawner", "2.0.0")] public class OmniPhoneBootstrap : BaseUnityPlugin { private Harmony _harmony; public static OmniPhoneBootstrap Instance; public static ConfigEntry<int> CFG_PhoneCount; public static ConfigEntry<bool> CFG_DebugWorldLabels; public static ConfigEntry<bool> CFG_SnapToGround; public static ConfigEntry<float> CFG_PostGenDelay; public static ConfigEntry<bool> CFG_LogVerbose; public static ConfigEntry<float> CFG_RotateXDeg; public static ConfigEntry<bool> CFG_OnlyOncePerLevel; public static ConfigEntry<bool> CFG_ShowPrompt; public static ConfigEntry<bool> CFG_ForceRingOnSpawn; public static ConfigEntry<float> CFG_FirstRingDelay; public static ConfigEntry<bool> CFG_RingOnlyWhenInteractable; public static ConfigEntry<float> CFG_InteractReadyMin; public static ConfigEntry<float> CFG_InteractReadyMax; public static ConfigEntry<float> CFG_ReactivationCooldown; public static ConfigEntry<string> CFG_DisabledLevels; internal static string[] DisabledLevelTokens = Array.Empty<string>(); internal static int GenSerialCounter = 0; internal static int LastSpawnedGenSerial = -1; internal static Level LastSpawnedLevelRef = null; internal static bool SpawnedThisLevel = false; private void Awake() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Expected O, but got Unknown //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Expected O, but got Unknown //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Expected O, but got Unknown //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Expected O, but got Unknown Instance = this; CFG_PhoneCount = ((BaseUnityPlugin)this).Config.Bind<int>("OmniPhone", "PhoneCount", 1, new ConfigDescription("How many phones to place per level.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 20), Array.Empty<object>())); CFG_DebugWorldLabels = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "DebugWorldLabels", false, "Show a tiny 'PhoneOm' label above each spawn."); CFG_SnapToGround = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "SnapToGround", true, "Raycast down to rest the phone on ground."); CFG_PostGenDelay = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "PostGenDelay", 8f, "Extra seconds to wait AFTER LevelGenerator has Generated=true."); CFG_LogVerbose = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "LogVerbose", false, "No-op in release."); CFG_RotateXDeg = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "RotateXDeg", 0f, "Extra world-space rotation to apply on the X axis after placement."); CFG_OnlyOncePerLevel = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "OnlyOncePerLevel", true, "When true, spawn at most once per actual Level (prevents repeated spawns during generation)."); CFG_ShowPrompt = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "ShowPrompt", false, "Show in-world interact prompt above the phone."); CFG_ForceRingOnSpawn = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "ForceRingOnSpawn", false, "Force the phone to ring shortly after it spawns (ignores Play On Awake on prefab)."); CFG_FirstRingDelay = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "FirstRingDelay", 1.25f, new ConfigDescription("Seconds after spawn before first ring if ForceRingOnSpawn is true.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10f), Array.Empty<object>())); CFG_RingOnlyWhenInteractable = ((BaseUnityPlugin)this).Config.Bind<bool>("OmniPhone", "RingOnlyWhenInteractable", true, "When true, the phone only rings during the window when it is actually interactable. Ring = 'click me'."); CFG_InteractReadyMin = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "InteractReadyMin", 30f, new ConfigDescription("Minimum seconds after spawn/cooldown before the phone becomes interactable.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 600f), Array.Empty<object>())); CFG_InteractReadyMax = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "InteractReadyMax", 300f, new ConfigDescription("Maximum seconds after spawn/cooldown before the phone becomes interactable.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 600f), Array.Empty<object>())); CFG_ReactivationCooldown = ((BaseUnityPlugin)this).Config.Bind<float>("OmniPhone", "ReactivationCooldown", 120f, new ConfigDescription("Seconds after the phone is answered before it can become interactable again.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 600f), Array.Empty<object>())); CFG_DisabledLevels = ((BaseUnityPlugin)this).Config.Bind<string>("OmniPhone", "DisableOnLevels", "Museum", "Comma/semicolon/pipe separated substrings. If the current level name contains any of these, the spawner will skip (e.g., 'Museum')."); DisabledLevelTokens = ParseDisabledTokens(CFG_DisabledLevels.Value); PhonePrefabManager.MaxPhonesPerLevel = CFG_PhoneCount.Value; PhonePrefabManager.DebugWorldLabels = CFG_DebugWorldLabels.Value; PhonePrefabManager.SnapToGround = CFG_SnapToGround.Value; PhonePrefabManager.RotateXDeg = CFG_RotateXDeg.Value; PhonePrefabManager.ShowPrompt = CFG_ShowPrompt.Value; PhonePrefabManager.ForceRingOnSpawn = CFG_ForceRingOnSpawn.Value; PhonePrefabManager.FirstRingDelay = Mathf.Max(0f, CFG_FirstRingDelay.Value); PhonePrefabManager.RingOnlyWhenInteractable = CFG_RingOnlyWhenInteractable.Value; PhonePrefabManager.InteractReadyMin = Mathf.Max(0f, CFG_InteractReadyMin.Value); PhonePrefabManager.InteractReadyMax = Mathf.Max(PhonePrefabManager.InteractReadyMin, CFG_InteractReadyMax.Value); PhonePrefabManager.ReactivateCooldown = Mathf.Max(0f, CFG_ReactivationCooldown.Value); _harmony = new Harmony("com.yourname.omniphonespawner"); _harmony.PatchAll(); SpawnWatchdog.Ensure(); } private void OnDestroy() { try { _harmony.UnpatchSelf(); } catch { } PhonePrefabManager.UnloadBundle(unloadAllLoadedObjects: true); } internal static void Log(string msg) { } internal static void LogWarn(string msg) { } private static string[] ParseDisabledTokens(string raw) { if (string.IsNullOrWhiteSpace(raw)) { return Array.Empty<string>(); } string[] array = (from s in raw.Split(new char[3] { ',', ';', '|' }, StringSplitOptions.RemoveEmptyEntries) select s.Trim().ToLowerInvariant() into s where s.Length > 0 select s).Distinct().ToArray(); return (array.Length == 0) ? Array.Empty<string>() : array; } internal static bool LevelIsDisabledByName(string levelName = null) { if (DisabledLevelTokens == null || DisabledLevelTokens.Length == 0) { return false; } string text = (levelName ?? Patch_LevelGenerator_Generate.SafeLevelName()) ?? ""; string text2 = text.ToLowerInvariant(); for (int i = 0; i < DisabledLevelTokens.Length; i++) { if (text2.Contains(DisabledLevelTokens[i])) { return true; } } return false; } } [HarmonyPatch(typeof(LevelGenerator), "Generate")] public static class Patch_LevelGenerator_Generate { [CompilerGenerated] private sealed class <CoSpawnAfterGen>d__2 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int genSerial; private LevelGenerator <lg>5__1; private float <timeout>5__2; private float <postDelay>5__3; private string <levelTag>5__4; private Level <curLevel>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <CoSpawnAfterGen>d__2(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <lg>5__1 = null; <levelTag>5__4 = null; <curLevel>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; goto IL_0050; case 1: <>1__state = -1; goto IL_0050; case 2: <>1__state = -1; goto IL_00b9; case 3: { <>1__state = -1; break; } IL_0050: if (LooksLikeMenuOrSplash()) { <>2__current = null; <>1__state = 1; return true; } <lg>5__1 = null; <timeout>5__2 = Time.time + 30f; goto IL_00b9; IL_00b9: if (Time.time < <timeout>5__2) { <lg>5__1 = LevelGenerator.Instance; if (!((Object)(object)<lg>5__1 != (Object)null) || !<lg>5__1.Generated) { <>2__current = null; <>1__state = 2; return true; } } if ((Object)(object)<lg>5__1 == (Object)null || !<lg>5__1.Generated) { return false; } <postDelay>5__3 = Mathf.Max(0f, OmniPhoneBootstrap.CFG_PostGenDelay.Value); if (<postDelay>5__3 > 0f) { <>2__current = (object)new WaitForSeconds(<postDelay>5__3); <>1__state = 3; return true; } break; } <levelTag>5__4 = SafeLevelName(); if (OmniPhoneBootstrap.LevelIsDisabledByName(<levelTag>5__4)) { return false; } if (OmniPhoneBootstrap.CFG_OnlyOncePerLevel.Value) { <curLevel>5__5 = null; try { <curLevel>5__5 = <lg>5__1.Level; } catch { } if ((Object)(object)<curLevel>5__5 != (Object)null && OmniPhoneBootstrap.SpawnedThisLevel && (Object)(object)OmniPhoneBootstrap.LastSpawnedLevelRef == (Object)(object)<curLevel>5__5) { return false; } <curLevel>5__5 = null; } if (OmniPhoneBootstrap.LastSpawnedGenSerial == genSerial) { return false; } DoTrySpawnForCurrentLevel(genSerial); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static void Prefix(LevelGenerator __instance) { OmniPhoneBootstrap.GenSerialCounter++; } private static void Postfix(LevelGenerator __instance) { int genSerialCounter = OmniPhoneBootstrap.GenSerialCounter; if ((Object)(object)OmniPhoneBootstrap.Instance != (Object)null) { ((MonoBehaviour)OmniPhoneBootstrap.Instance).StartCoroutine(CoSpawnAfterGen(genSerialCounter)); } } [IteratorStateMachine(typeof(<CoSpawnAfterGen>d__2))] private static IEnumerator CoSpawnAfterGen(int genSerial) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <CoSpawnAfterGen>d__2(0) { genSerial = genSerial }; } internal static void DoTrySpawnForCurrentLevel(int genSerial) { if (LooksLikeMenuOrSplash() || !PhonePrefabManager.EnsurePrefabLoaded()) { return; } string levelName = SafeLevelName(); if (OmniPhoneBootstrap.LevelIsDisabledByName(levelName)) { return; } Level val = null; try { val = (((Object)(object)LevelGenerator.Instance != (Object)null) ? LevelGenerator.Instance.Level : null); } catch { } if (!OmniPhoneBootstrap.CFG_OnlyOncePerLevel.Value || !((Object)(object)val != (Object)null) || !OmniPhoneBootstrap.SpawnedThisLevel || !((Object)(object)OmniPhoneBootstrap.LastSpawnedLevelRef == (Object)(object)val)) { PhonePrefabManager.ClearAllSpawnedPhones(); List<Transform> list = PhonePrefabManager.FindLikelyLevelPoints_CurrentWorld(); if (list.Count == 0) { PhonePrefabManager.SpawnFallbackNearLocal(); OmniPhoneBootstrap.LastSpawnedGenSerial = genSerial; OmniPhoneBootstrap.LastSpawnedLevelRef = val; OmniPhoneBootstrap.SpawnedThisLevel = true; } else { PhonePrefabManager.SpawnPhonesFromPoints(list); OmniPhoneBootstrap.LastSpawnedGenSerial = genSerial; OmniPhoneBootstrap.LastSpawnedLevelRef = val; OmniPhoneBootstrap.SpawnedThisLevel = true; } } } internal static bool LooksLikeMenuOrSplash() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) try { if (SemiFunc.IsMainMenu()) { return true; } if (SemiFunc.MenuLevel()) { return true; } } catch { } Scene activeScene = SceneManager.GetActiveScene(); string text = ((Scene)(ref activeScene)).name ?? string.Empty; if (text.IndexOf("Lobby", StringComparison.OrdinalIgnoreCase) >= 0) { return true; } if (text.IndexOf("Menu", StringComparison.OrdinalIgnoreCase) >= 0) { return true; } if (text.IndexOf("Title", StringComparison.OrdinalIgnoreCase) >= 0) { return true; } if (text.IndexOf("Splash", StringComparison.OrdinalIgnoreCase) >= 0) { return true; } return false; } internal static string SafeLevelName() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) try { RunManager instance = RunManager.instance; if ((Object)(object)instance != (Object)null && (Object)(object)instance.levelCurrent != (Object)null) { return ((Object)instance.levelCurrent).name; } } catch { } try { LevelGenerator instance2 = LevelGenerator.Instance; if ((Object)(object)instance2 != (Object)null && (Object)(object)instance2.Level != (Object)null) { return ((Object)instance2.Level).name; } } catch { } Scene activeScene = SceneManager.GetActiveScene(); return ((Scene)(ref activeScene)).name ?? "unknown"; } } [HarmonyPatch(typeof(RunManager), "ChangeLevel")] public static class Patch_RunManager_ChangeLevel { private static void Postfix() { OmniPhoneBootstrap.SpawnedThisLevel = false; OmniPhoneBootstrap.LastSpawnedLevelRef = null; OmniPhoneBootstrap.LastSpawnedGenSerial = -1; PhonePrefabManager.ClearAllSpawnedPhones(); } } public class SpawnWatchdog : MonoBehaviour { private static SpawnWatchdog _i; private float _nextCheckAt; internal static float Patch_LevelGenerator_Generate_CachedGeneratedAt = -1f; public static void Ensure() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)_i != (Object)null)) { GameObject val = new GameObject("[OmniPhoneSpawner] SpawnWatchdog"); Object.DontDestroyOnLoad((Object)(object)val); _i = val.AddComponent<SpawnWatchdog>(); } } private void Update() { if (Time.time < _nextCheckAt) { return; } _nextCheckAt = Time.time + 1f; int genSerialCounter = OmniPhoneBootstrap.GenSerialCounter; if (genSerialCounter <= 0 || OmniPhoneBootstrap.LastSpawnedGenSerial == genSerialCounter) { return; } LevelGenerator instance = LevelGenerator.Instance; if ((Object)(object)instance == (Object)null || !instance.Generated) { return; } if (Patch_LevelGenerator_Generate_CachedGeneratedAt < 0f) { Patch_LevelGenerator_Generate_CachedGeneratedAt = Time.time; } if (Time.time - Patch_LevelGenerator_Generate_CachedGeneratedAt < OmniPhoneBootstrap.CFG_PostGenDelay.Value) { return; } string levelName = Patch_LevelGenerator_Generate.SafeLevelName(); if (OmniPhoneBootstrap.LevelIsDisabledByName(levelName)) { return; } if (OmniPhoneBootstrap.CFG_OnlyOncePerLevel.Value) { try { Level level = instance.Level; if ((Object)(object)level != (Object)null && OmniPhoneBootstrap.SpawnedThisLevel && (Object)(object)OmniPhoneBootstrap.LastSpawnedLevelRef == (Object)(object)level) { return; } } catch { } } Patch_LevelGenerator_Generate.DoTrySpawnForCurrentLevel(genSerialCounter); } } public static class PhonePrefabManager { public class PhoneOmSeedHint : MonoBehaviour { public Vector3 SeedWorld; } private const string PrefabName = "PhoneOm"; private const string BundleBaseName = "omblackphone"; private static AssetBundle _loadedBundle; private static GameObject _cachedPrefab; private static readonly List<GameObject> _spawned = new List<GameObject>(); private static string _pluginDir; public static int MaxPhonesPerLevel = 1; public static bool DebugWorldLabels = false; public static bool SnapToGround = true; public static float RotateXDeg = -90f; public static bool ShowPrompt = false; public static bool ForceRingOnSpawn = false; public static float FirstRingDelay = 1.25f; public static bool RingOnlyWhenInteractable = true; public static float InteractReadyMin = 30f; public static float InteractReadyMax = 300f; public static float ReactivateCooldown = 120f; private static readonly string[] NEEDLES = new string[15] { "levelpoint", "level spawn", "levelspawn", "enemyspawn", "spawnpoint", "spawn point", "aispawn", "respawnpoint", "respawn", "wavespawn", "spawner", "ghostspawn", "eventspawn", "huntspawn", "ghostpoint" }; public static void ProbeBundleOnce() { } private static string GetPluginDir() { if (!string.IsNullOrEmpty(_pluginDir)) { return _pluginDir; } try { OmniPhoneBootstrap instance = OmniPhoneBootstrap.Instance; object obj; if (instance == null) { obj = null; } else { PluginInfo info = ((BaseUnityPlugin)instance).Info; obj = ((info != null) ? info.Location : null); } string text = (string)obj; if (string.IsNullOrEmpty(text)) { text = Assembly.GetExecutingAssembly().Location; } _pluginDir = Path.GetDirectoryName(text); if (string.IsNullOrEmpty(_pluginDir)) { _pluginDir = Directory.GetCurrentDirectory(); } } catch { _pluginDir = Directory.GetCurrentDirectory(); } return _pluginDir; } public static bool EnsurePrefabLoaded() { if ((Object)(object)_cachedPrefab != (Object)null) { return true; } string pluginDir = GetPluginDir(); string[] array = new string[4] { "omblackphone", "omblackphone.unity3d", "omblackphone.assetbundle", "omblackphone.bundle" }; for (int i = 0; i < array.Length; i++) { string text = Path.Combine(pluginDir, array[i]); if (!File.Exists(text)) { continue; } try { _loadedBundle = AssetBundle.LoadFromFile(text); if (!((Object)(object)_loadedBundle == (Object)null)) { GameObject val = _loadedBundle.LoadAsset<GameObject>("PhoneOm"); if ((Object)(object)val != (Object)null) { _cachedPrefab = val; return true; } GameObject val2 = ((IEnumerable<GameObject>)_loadedBundle.LoadAllAssets<GameObject>()).FirstOrDefault((Func<GameObject, bool>)((GameObject a) => Object.op_Implicit((Object)(object)a) && string.Equals(((Object)a).name, "PhoneOm", StringComparison.OrdinalIgnoreCase))); if ((Object)(object)val2 != (Object)null) { _cachedPrefab = val2; return true; } _loadedBundle.Unload(false); _loadedBundle = null; } } catch { if ((Object)(object)_loadedBundle != (Object)null) { try { _loadedBundle.Unload(false); } catch { } _loadedBundle = null; } } } return false; } public static void ClearAllSpawnedPhones() { for (int num = _spawned.Count - 1; num >= 0; num--) { GameObject val = _spawned[num]; if (Object.op_Implicit((Object)(object)val)) { Object.Destroy((Object)(object)val); } _spawned.RemoveAt(num); } } public static void UnloadBundle(bool unloadAllLoadedObjects = false) { ClearAllSpawnedPhones(); if ((Object)(object)_loadedBundle != (Object)null) { try { _loadedBundle.Unload(unloadAllLoadedObjects); } catch { } _loadedBundle = null; _cachedPrefab = null; } } internal static bool TryGetAudioClip(string name, out AudioClip clip) { string name2 = name; clip = null; try { if ((Object)(object)_loadedBundle == (Object)null) { return false; } clip = _loadedBundle.LoadAsset<AudioClip>(name2); if ((Object)(object)clip != (Object)null) { return true; } AudioClip[] source = _loadedBundle.LoadAllAssets<AudioClip>(); clip = ((IEnumerable<AudioClip>)source).FirstOrDefault((Func<AudioClip, bool>)((AudioClip a) => (Object)(object)a != (Object)null && string.Equals(((Object)a).name, name2, StringComparison.OrdinalIgnoreCase))); return (Object)(object)clip != (Object)null; } catch { clip = null; return false; } } private static bool LooksLikeSpawnType(string typeNameLower) { for (int i = 0; i < NEEDLES.Length; i++) { if (typeNameLower.Contains(NEEDLES[i])) { return true; } } return false; } private static bool LooksLikeSpawnName(string nameLower) { for (int i = 0; i < NEEDLES.Length; i++) { if (nameLower.Contains(NEEDLES[i])) { return true; } } return false; } public static List<Transform> FindLikelyLevelPoints_CurrentWorld() { List<Transform> list = new List<Transform>(128); MonoBehaviour[] array = Object.FindObjectsOfType<MonoBehaviour>(true); foreach (MonoBehaviour val in array) { if ((Object)(object)val == (Object)null) { continue; } GameObject gameObject = ((Component)val).gameObject; if (Object.op_Implicit((Object)(object)gameObject) && gameObject.activeInHierarchy && !((Object)gameObject).name.StartsWith("[OmniPhoneSpawner]")) { string typeNameLower = ((object)val).GetType().Name.ToLowerInvariant(); if (LooksLikeSpawnType(typeNameLower)) { list.Add(((Component)val).transform); } } } Transform[] array2 = Object.FindObjectsOfType<Transform>(true); foreach (Transform val2 in array2) { if ((Object)(object)val2 == (Object)null) { continue; } GameObject gameObject2 = ((Component)val2).gameObject; if (Object.op_Implicit((Object)(object)gameObject2) && gameObject2.activeInHierarchy && !((Object)gameObject2).name.StartsWith("[OmniPhoneSpawner]")) { string nameLower = ((Object)val2).name.ToLowerInvariant(); if (LooksLikeSpawnName(nameLower)) { list.Add(val2); } } } return list.Distinct().ToList(); } public static void SpawnPhonesFromPoints(List<Transform> points) { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) if (points == null || points.Count == 0) { SpawnFallbackNearLocal(); return; } for (int i = 0; i < points.Count; i++) { int num = Random.Range(i, points.Count); int index = i; int index2 = num; Transform value = points[num]; Transform value2 = points[i]; points[index] = value; points[index2] = value2; } int num2 = Mathf.Clamp(MaxPhonesPerLevel, 1, points.Count); int num3 = 0; NavMeshHit val3 = default(NavMeshHit); RaycastHit val5 = default(RaycastHit); for (int j = 0; j < points.Count; j++) { if (num3 >= num2) { break; } Transform val = points[j]; if ((Object)(object)val == (Object)null) { continue; } Vector3 val2 = val.position; Quaternion rotation = val.rotation; if (NavMesh.SamplePosition(val2, ref val3, 3f, -1)) { val2 = ((NavMeshHit)(ref val3)).position; } if (SnapToGround) { Vector3 val4 = val2 + Vector3.up * 2f; if (Physics.Raycast(val4, Vector3.down, ref val5, 6f, -1, (QueryTriggerInteraction)1)) { val2 = ((RaycastHit)(ref val5)).point + Vector3.up * 0.02f; } } if (HasGroundSupport(val2, 4f)) { SpawnOne(val2, rotation, num3, ((Object)val).name, val.position); num3++; } } if (num3 == 0) { SpawnFallbackNearLocal(); } } private static bool HasGroundSupport(Vector3 posOnMesh, float maxDown) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) Vector3 val = posOnMesh + Vector3.up * 1.5f; RaycastHit val2 = default(RaycastHit); return Physics.Raycast(val, Vector3.down, ref val2, 1.5f + maxDown, -1, (QueryTriggerInteraction)1); } public static void SpawnFallbackNearLocal() { //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_cachedPrefab == (Object)null && !EnsurePrefabLoaded()) { return; } PlayerAvatar val = FindLocalPlayer(); if ((Object)(object)val == (Object)null) { return; } Transform transform = ((Component)val).transform; float num = 6f; float num2 = ((Random.value < 0.5f) ? (-2f) : 2f); Vector3 val2 = transform.position - transform.forward * num + transform.right * num2; Quaternion baseRotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f); if (SnapToGround) { Vector3 val3 = val2 + Vector3.up * 2f; RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(val3, Vector3.down, ref val4, 6f, -1, (QueryTriggerInteraction)1)) { val2 = ((RaycastHit)(ref val4)).point + Vector3.up * 0.02f; } } SpawnOne(val2, baseRotation, 0, "FallbackNearLocal", val2); } private static void SpawnOne(Vector3 position, Quaternion baseRotation, int index, string label, Vector3 seedWorld) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_cachedPrefab == (Object)null) || EnsurePrefabLoaded()) { Quaternion val = Quaternion.Euler(RotateXDeg, 0f, 0f) * baseRotation; GameObject val2 = Object.Instantiate<GameObject>(_cachedPrefab, position, val); ((Object)val2).name = "PhoneOm (Level Point)"; if (DebugWorldLabels) { AttachLabel(val2.transform, "PhoneOm"); } Collider val3 = val2.GetComponentInChildren<Collider>(); if ((Object)(object)val3 == (Object)null) { val3 = (Collider)(object)val2.AddComponent<SphereCollider>(); } SphereCollider val4 = (SphereCollider)(object)((val3 is SphereCollider) ? val3 : null); if (val4 != null) { ((Collider)val4).isTrigger = true; val4.radius = Mathf.Max(1f, val4.radius); } else { val3.isTrigger = true; } if ((Object)(object)val2.GetComponent<PhoneOmBehaviour>() == (Object)null) { val2.AddComponent<PhoneOmBehaviour>(); } PhoneOmSeedHint phoneOmSeedHint = val2.AddComponent<PhoneOmSeedHint>(); phoneOmSeedHint.SeedWorld = seedWorld; if ((Object)(object)val2.GetComponent<PhoneOmInteractFX>() == (Object)null) { val2.AddComponent<PhoneOmInteractFX>(); } _spawned.Add(val2); } } private static void AttachLabel(Transform root, string text) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) try { GameObject val = new GameObject("Phone_Label"); val.transform.SetParent(root, false); val.transform.localPosition = new Vector3(0f, 1.1f, 0f); TextMesh val2 = val.AddComponent<TextMesh>(); val2.text = text; val2.fontSize = 42; val2.characterSize = 0.03f; val2.color = Color.white; val.AddComponent<SimpleBillboard>(); } catch { } } private static PlayerAvatar FindLocalPlayer() { try { PlayerAvatar[] array = Object.FindObjectsOfType<PlayerAvatar>(true); foreach (PlayerAvatar val in array) { if ((Object)(object)val == (Object)null) { continue; } Type type = ((object)val).GetType(); try { FieldInfo field = type.GetField("isLocal", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null && field.FieldType == typeof(bool) && (bool)field.GetValue(val)) { return val; } } catch { } try { PropertyInfo property = type.GetProperty("IsLocal", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.PropertyType == typeof(bool) && (bool)property.GetValue(val)) { return val; } } catch { } } } catch { } return null; } } public class PhoneOmBehaviour : MonoBehaviour { private enum Phase { Warmup, Active, Cooldown, Legacy } [CompilerGenerated] private sealed class <HallucinationRoutine>d__27 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; public PhoneOmBehaviour <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <HallucinationRoutine>d__27(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(seconds); <>1__state = 1; return true; case 1: <>1__state = -1; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <Ticker>d__21 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmBehaviour <>4__this; private float <min>5__1; private float <max>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Ticker>d__21(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (Object.op_Implicit((Object)(object)<>4__this) && Object.op_Implicit((Object)(object)((Component)<>4__this).gameObject)) { if (PhonePrefabManager.RingOnlyWhenInteractable) { if (<>4__this._phase == Phase.Warmup && Time.time >= <>4__this._nextActivateAt) { <>4__this.StartRinging(); <>4__this._phase = Phase.Active; } if (<>4__this._phase == Phase.Active) { if (<>4__this._isRinging) { <>4__this.TryHandleLocalInteract(); } else { <>4__this.StartRinging(); } } if (<>4__this._phase == Phase.Cooldown && Time.time >= <>4__this._nextActivateAt) { <min>5__1 = Mathf.Max(0f, PhonePrefabManager.InteractReadyMin); <max>5__2 = Mathf.Max(<min>5__1, PhonePrefabManager.InteractReadyMax); <>4__this._nextActivateAt = Time.time + Random.Range(<min>5__1, <max>5__2); <>4__this._phase = Phase.Warmup; } } else { if (!<>4__this._isRinging && Time.time >= <>4__this._nextRingAt) { <>4__this.StartRinging(); } if (<>4__this._isRinging) { <>4__this.TryHandleLocalInteract(); } } if (PhonePrefabManager.ShowPrompt) { <>4__this.UpdatePromptVisual(); } <>2__current = null; <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [Header("Timing (legacy ring window — used only if RingOnlyWhenInteractable=false)")] public float ringMin = 45f; public float ringMax = 90f; public float effectDuration = 25f; [Header("Audio")] [Tooltip("If true, leave audio alone and let the prefab/scripts drive it.")] public bool prefabControlsAudio = false; private float _nextRingAt; private float _nextActivateAt; private bool _isRinging; private AudioSource _ringer; private TextMesh _promptText; private float _promptFade; private Phase _phase = Phase.Legacy; private PlayerAvatar _localPlayer; private Transform _localTr; private float _nextLocalRefreshAt = 0f; private float _nextNearPollAt = 0f; private const float LOCAL_REFRESH_PERIOD = 2f; private const float NEAR_POLL_PERIOD = 0.1f; private const float INTERACT_DIST = 2.4f; private static readonly float INTERACT_DIST_SQR = 5.76f; private void Awake() { AudioSource[] source = ((Component)this).GetComponentsInChildren<AudioSource>(true) ?? Array.Empty<AudioSource>(); _ringer = ((IEnumerable<AudioSource>)source).FirstOrDefault((Func<AudioSource, bool>)((AudioSource s) => (Object)(object)s != (Object)null && (Object)(object)s.clip != (Object)null)) ?? ((IEnumerable<AudioSource>)source).FirstOrDefault((Func<AudioSource, bool>)((AudioSource s) => (Object)(object)s != (Object)null)) ?? ((Component)this).gameObject.AddComponent<AudioSource>(); if ((Object)(object)_ringer.clip == (Object)null && PhonePrefabManager.TryGetAudioClip("RingaDing", out AudioClip clip)) { _ringer.clip = clip; } _ringer.playOnAwake = false; _ringer.spatialBlend = 1f; if (!prefabControlsAudio) { _ringer.loop = true; } if (PhonePrefabManager.RingOnlyWhenInteractable) { _phase = Phase.Warmup; float num = Mathf.Max(0f, PhonePrefabManager.InteractReadyMin); float num2 = Mathf.Max(num, PhonePrefabManager.InteractReadyMax); if (PhonePrefabManager.ForceRingOnSpawn) { _nextActivateAt = Time.time + Mathf.Max(0f, PhonePrefabManager.FirstRingDelay); } else { _nextActivateAt = Time.time + Random.Range(num, num2); } } else { _phase = Phase.Legacy; _nextRingAt = Time.time + (PhonePrefabManager.ForceRingOnSpawn ? Mathf.Max(0f, PhonePrefabManager.FirstRingDelay) : Random.Range(ringMin, ringMax)); } ((MonoBehaviour)this).StartCoroutine(Ticker()); } [IteratorStateMachine(typeof(<Ticker>d__21))] private IEnumerator Ticker() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Ticker>d__21(0) { <>4__this = this }; } private void StartRinging() { _isRinging = true; if (!prefabControlsAudio && (Object)(object)_ringer != (Object)null && (Object)(object)_ringer.clip != (Object)null) { _ringer.mute = false; ((Behaviour)_ringer).enabled = true; if (!_ringer.isPlaying) { _ringer.Play(); } } ((Component)this).gameObject.BroadcastMessage("OnBlackPhoneRingStart", (SendMessageOptions)1); } private void StopRinging() { _isRinging = false; if (!prefabControlsAudio && (Object)(object)_ringer != (Object)null && _ringer.isPlaying) { _ringer.Stop(); } ((Component)this).gameObject.BroadcastMessage("OnBlackPhoneRingStop", (SendMessageOptions)1); if (PhonePrefabManager.RingOnlyWhenInteractable) { HidePrompt(); } else { _nextRingAt = Time.time + Random.Range(ringMin, ringMax); } } private void TryHandleLocalInteract() { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) if (Time.time >= _nextLocalRefreshAt || (Object)(object)_localPlayer == (Object)null || (Object)(object)_localTr == (Object)null) { _localPlayer = FindLocalPlayer(); _localTr = (((Object)(object)_localPlayer != (Object)null) ? ((Component)_localPlayer).transform : null); _nextLocalRefreshAt = Time.time + 2f; } if ((Object)(object)_localTr == (Object)null || Time.time < _nextNearPollAt) { return; } _nextNearPollAt = Time.time + 0.1f; Vector3 val = _localTr.position - ((Component)this).transform.position; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; bool flag = sqrMagnitude <= INTERACT_DIST_SQR; if (flag && PhonePrefabManager.ShowPrompt) { ShowPrompt("Press [interact] to answer"); } else { HidePrompt(); } if (flag && (Object)(object)InputManager.instance != (Object)null && InputManager.instance.KeyDown((InputKey)2)) { StopRinging(); ((Component)this).gameObject.BroadcastMessage("OnBlackPhoneAnswered", (SendMessageOptions)1); ((MonoBehaviour)this).StartCoroutine(HallucinationRoutine(effectDuration)); if (PhonePrefabManager.RingOnlyWhenInteractable) { BeginCooldown(); } } } private void BeginCooldown() { _phase = Phase.Cooldown; float num = Mathf.Max(0f, PhonePrefabManager.ReactivateCooldown); _nextActivateAt = Time.time + num; } private PlayerAvatar FindLocalPlayer() { PlayerAvatar[] array = Object.FindObjectsOfType<PlayerAvatar>(true); foreach (PlayerAvatar val in array) { if ((Object)(object)val == (Object)null) { continue; } Type type = ((object)val).GetType(); try { FieldInfo field = type.GetField("isLocal", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null && field.FieldType == typeof(bool) && (bool)field.GetValue(val)) { return val; } } catch { } try { PropertyInfo property = type.GetProperty("IsLocal", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.PropertyType == typeof(bool) && (bool)property.GetValue(val)) { return val; } } catch { } } return null; } [IteratorStateMachine(typeof(<HallucinationRoutine>d__27))] private IEnumerator HallucinationRoutine(float seconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <HallucinationRoutine>d__27(0) { <>4__this = this, seconds = seconds }; } private void ShowPrompt(string raw) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if (PhonePrefabManager.ShowPrompt) { if ((Object)(object)_promptText == (Object)null) { GameObject val = new GameObject("BP_Prompt"); val.transform.SetParent(((Component)this).transform, false); val.transform.localPosition = new Vector3(0f, 1.15f, 0f); _promptText = val.AddComponent<TextMesh>(); _promptText.anchor = (TextAnchor)4; _promptText.fontSize = 64; _promptText.characterSize = 0.03f; _promptText.color = new Color(1f, 1f, 1f, 0f); val.AddComponent<SimpleBillboard>(); } string text = raw; if ((Object)(object)InputManager.instance != (Object)null) { text = InputManager.instance.InputDisplayReplaceTags(raw); } if (_promptText.text != text) { _promptText.text = text; } _promptFade = Mathf.Min(1f, _promptFade + Time.deltaTime * 8f); } } private void HidePrompt() { if (PhonePrefabManager.ShowPrompt) { _promptFade = Mathf.Max(0f, _promptFade - Time.deltaTime * 8f); } } private void UpdatePromptVisual() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) if (PhonePrefabManager.ShowPrompt && !((Object)(object)_promptText == (Object)null)) { Color color = _promptText.color; color.a = Mathf.Lerp(color.a, _promptFade, 0.3f); _promptText.color = color; } } } public class SimpleBillboard : MonoBehaviour { private void LateUpdate() { //IL_0022: 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_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) Camera main = Camera.main; if (Object.op_Implicit((Object)(object)main)) { ((Component)this).transform.rotation = Quaternion.LookRotation(((Component)this).transform.position - ((Component)main).transform.position); } } } public class PhoneOmInteractFX : MonoBehaviour { private sealed class ExtenderHost : MonoBehaviour { [CompilerGenerated] private sealed class <RunAndClean>d__1 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public IEnumerator co; public ExtenderHost <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RunAndClean>d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(co); <>1__state = 1; return true; case 1: <>1__state = -1; Object.Destroy((Object)(object)((Component)<>4__this).gameObject); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static void Run(IEnumerator co) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("BP_Extender"); Object.DontDestroyOnLoad((Object)(object)val); ExtenderHost extenderHost = val.AddComponent<ExtenderHost>(); ((MonoBehaviour)extenderHost).StartCoroutine(extenderHost.RunAndClean(co)); } [IteratorStateMachine(typeof(<RunAndClean>d__1))] private IEnumerator RunAndClean(IEnumerator co) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <RunAndClean>d__1(0) { <>4__this = this, co = co }; } } [CompilerGenerated] private sealed class <>c__DisplayClass133_0 { public ChromaticAberration chroma; public Func<float> <>9__0; public Action<float> <>9__1; public Func<float> <>9__2; public Action<float> <>9__3; internal float <DoChromaticBursts>b__0() { return ((ParameterOverride<float>)(object)chroma.intensity).value; } internal void <DoChromaticBursts>b__1(float v) { ((ParameterOverride<float>)(object)chroma.intensity).value = Mathf.Clamp01(v); } internal float <DoChromaticBursts>b__2() { return ((ParameterOverride<float>)(object)chroma.intensity).value; } internal void <DoChromaticBursts>b__3(float v) { ((ParameterOverride<float>)(object)chroma.intensity).value = Mathf.Clamp01(v); } } [CompilerGenerated] private sealed class <>c__DisplayClass134_0 { public LensDistortion lens; public Func<float> <>9__0; public Action<float> <>9__1; public Func<float> <>9__2; public Action<float> <>9__3; internal float <DoLensWarpPulses>b__0() { return ((ParameterOverride<float>)(object)lens.intensity).value; } internal void <DoLensWarpPulses>b__1(float v) { ((ParameterOverride<float>)(object)lens.intensity).value = v; } internal float <DoLensWarpPulses>b__2() { return ((ParameterOverride<float>)(object)lens.intensity).value; } internal void <DoLensWarpPulses>b__3(float v) { ((ParameterOverride<float>)(object)lens.intensity).value = v; } } [CompilerGenerated] private sealed class <AnimateFloat>d__145 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float tIn; public float hold; public float tOut; public Func<float> read; public Action<float> write; public float from; public float to; public PhoneOmInteractFX <>4__this; private float <t>5__1; private float <k>5__2; private float <h>5__3; private float <curr>5__4; private float <t>5__5; private float <k>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <AnimateFloat>d__145(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (write == null) { return false; } if (tIn > 0f) { <t>5__1 = 0f; goto IL_00ed; } write(to); <>2__current = null; <>1__state = 2; return true; case 1: <>1__state = -1; goto IL_00ed; case 2: <>1__state = -1; goto IL_0130; case 3: <>1__state = -1; goto IL_017c; case 4: <>1__state = -1; goto IL_0246; case 5: { <>1__state = -1; break; } IL_017c: if (<h>5__3 < hold) { <h>5__3 += Time.deltaTime; <>2__current = null; <>1__state = 3; return true; } goto IL_0191; IL_0191: if (tOut > 0f) { <curr>5__4 = ((read != null) ? read() : to); <t>5__5 = 0f; goto IL_0246; } write(from); <>2__current = null; <>1__state = 5; return true; IL_00ed: if (<t>5__1 < tIn) { <t>5__1 += Time.deltaTime; <k>5__2 = Mathf.SmoothStep(0f, 1f, <t>5__1 / tIn); write(Mathf.Lerp(from, to, <k>5__2)); <>2__current = null; <>1__state = 1; return true; } goto IL_0130; IL_0130: if (hold > 0f) { <h>5__3 = 0f; goto IL_017c; } goto IL_0191; IL_0246: if (<t>5__5 < tOut) { <t>5__5 += Time.deltaTime; <k>5__6 = Mathf.SmoothStep(0f, 1f, <t>5__5 / tOut); write(Mathf.Lerp(<curr>5__4, from, <k>5__6)); <>2__current = null; <>1__state = 4; return true; } break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <ContinueVisualTail>d__148 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float seconds; public float chromaMax; public float lensMin; public float lensMax; public Vector2 satRange; public PhoneOmInteractFX <>4__this; private float <end>5__1; private float <nextJitterAt>5__2; private float <pulse>5__3; private float <wobble>5__4; private ChromaticAberration <chroma>5__5; private LensDistortion <lens>5__6; private ColorGrading <cg>5__7; private float <target>5__8; private float <target>5__9; private float <t>5__10; private float <sat>5__11; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ContinueVisualTail>d__148(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <chroma>5__5 = null; <lens>5__6 = null; <cg>5__7 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <end>5__1 = Time.unscaledTime + Mathf.Max(0.1f, seconds); <nextJitterAt>5__2 = 0f; <pulse>5__3 = Random.Range(0.7f, 1.4f); <wobble>5__4 = Random.Range(0.25f, 0.6f); break; case 1: <>1__state = -1; break; } if (Time.unscaledTime < <end>5__1) { if (Time.unscaledTime >= <nextJitterAt>5__2) { if (<>4__this.TryGetSetting<ChromaticAberration>(out <chroma>5__5)) { <target>5__8 = Random.Range(0.1f, Mathf.Clamp01(chromaMax)); ((PostProcessEffectSettings)<chroma>5__5).active = true; ((ParameterOverride<float>)(object)<chroma>5__5.intensity).value = Mathf.Lerp(((ParameterOverride<float>)(object)<chroma>5__5.intensity).value, <target>5__8, 0.9f); } if (<>4__this.TryGetSetting<LensDistortion>(out <lens>5__6)) { <target>5__9 = Random.Range(Mathf.Min(lensMin, lensMax), Mathf.Max(lensMin, lensMax)); ((PostProcessEffectSettings)<lens>5__6).active = true; ((ParameterOverride<float>)(object)<lens>5__6.intensity).value = Mathf.Lerp(((ParameterOverride<float>)(object)<lens>5__6.intensity).value, <target>5__9, 0.85f); } if (<>4__this.TryGetSetting<ColorGrading>(out <cg>5__7) && (Object)(object)<cg>5__7 != (Object)null) { <t>5__10 = Mathf.PingPong(Time.unscaledTime * <pulse>5__3, 1f); <sat>5__11 = Mathf.Lerp(satRange.x, satRange.y, <t>5__10); ((ParameterOverride<float>)(object)<cg>5__7.saturation).value = (<sat>5__11 - 1f) * 100f; ((PostProcessEffectSettings)<cg>5__7).active = true; } <nextJitterAt>5__2 = Time.unscaledTime + Random.Range(0.35f, 0.9f) * <wobble>5__4; <chroma>5__5 = null; <lens>5__6 = null; <cg>5__7 = null; } <>2__current = null; <>1__state = 1; return true; } <>4__this.RestorePPDefaults(); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <Crossfade>d__141 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AudioSource from; public AudioSource to; public float targetVolTo; public float seconds; public PhoneOmInteractFX <>4__this; private float <fromStart>5__1; private float <toStart>5__2; private float <t>5__3; private float <k>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Crossfade>d__141(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!Object.op_Implicit((Object)(object)from) || !Object.op_Implicit((Object)(object)to)) { return false; } if (!to.isPlaying && Object.op_Implicit((Object)(object)to.clip)) { to.Play(); } <fromStart>5__1 = from.volume; <toStart>5__2 = to.volume; <t>5__3 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__3 < seconds) { <t>5__3 += Time.deltaTime; <k>5__4 = Mathf.SmoothStep(0f, 1f, <t>5__3 / seconds); from.volume = Mathf.Lerp(<fromStart>5__1, 0f, <k>5__4); to.volume = Mathf.Lerp(<toStart>5__2, targetVolTo, <k>5__4); <>2__current = null; <>1__state = 1; return true; } from.volume = 0f; to.volume = targetVolTo; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoBloomCuts>d__130 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private float <endAt>5__1; private PostProcessing <pp>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoBloomCuts>d__130(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <pp>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <endAt>5__1 = Time.time + totalSeconds; break; case 1: <>1__state = -1; <pp>5__2 = null; break; } if (Time.time < <endAt>5__1 && !<>4__this._stopping) { <pp>5__2 = PostProcessing.Instance; if ((Object)(object)<pp>5__2 != (Object)null) { <pp>5__2.BloomDisable(Random.Range(0.8f, 1.2f)); } else { <>4__this.WarnOnceNoPP(); } <>2__current = (object)new WaitForSeconds(Random.Range(5f, 9f)); <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoChromaticBursts>d__133 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private <>c__DisplayClass133_0 <>8__1; private float <endAt>5__2; private bool <wasActive>5__3; private float <baseIntensity>5__4; private float <target>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoChromaticBursts>d__133(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass133_0(); <endAt>5__2 = Time.time + totalSeconds; if (!<>4__this.TryGetSetting<ChromaticAberration>(out <>8__1.chroma)) { return false; } <wasActive>5__3 = ((PostProcessEffectSettings)<>8__1.chroma).active; <baseIntensity>5__4 = Mathf.Clamp01(((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value); ((PostProcessEffectSettings)<>8__1.chroma).active = true; break; case 1: <>1__state = -1; <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.AnimateFloat(0f, 0f, 0.35f, () => ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value, delegate(float v) { ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value = Mathf.Clamp01(v); }, ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value, <baseIntensity>5__4)); <>1__state = 2; return true; case 2: <>1__state = -1; <>2__current = (object)new WaitForSeconds(Random.Range(2.8f, 5.2f)); <>1__state = 3; return true; case 3: <>1__state = -1; break; } if (Time.time < <endAt>5__2 && !<>4__this._stopping) { <target>5__5 = Random.Range(0.22f, Mathf.Clamp01(<>4__this.chromaticMax)); <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.AnimateFloat(0.12f, Random.Range(0.15f, 0.35f), 0.4f, () => ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value, delegate(float v) { ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value = Mathf.Clamp01(v); }, ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value, <target>5__5)); <>1__state = 1; return true; } ((ParameterOverride<float>)(object)<>8__1.chroma.intensity).value = <baseIntensity>5__4; ((PostProcessEffectSettings)<>8__1.chroma).active = <wasActive>5__3; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoContrastPulses>d__129 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private float <endAt>5__1; private PostProcessing <pp>5__2; private float <amt>5__3; private float <speedIn>5__4; private float <speedOut>5__5; private float <time>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoContrastPulses>d__129(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <pp>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <endAt>5__1 = Time.time + totalSeconds; break; case 1: <>1__state = -1; <pp>5__2 = null; break; } if (Time.time < <endAt>5__1 && !<>4__this._stopping) { <pp>5__2 = PostProcessing.Instance; if ((Object)(object)<pp>5__2 != (Object)null) { <amt>5__3 = Random.Range(1.15f, 1.35f); <speedIn>5__4 = 0.18f; <speedOut>5__5 = 0.5f; <time>5__6 = Random.Range(0.6f, 1f); <pp>5__2.ContrastOverride(<amt>5__3, <speedIn>5__4, <speedOut>5__5, <time>5__6, ((Component)<>4__this).gameObject); } else { <>4__this.WarnOnceNoPP(); } <>2__current = (object)new WaitForSeconds(Random.Range(3f, 6f)); <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoGrainCuts>d__131 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private float <endAt>5__1; private PostProcessing <pp>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoGrainCuts>d__131(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <pp>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <endAt>5__1 = Time.time + totalSeconds; break; case 1: <>1__state = -1; <pp>5__2 = null; break; } if (Time.time < <endAt>5__1 && !<>4__this._stopping) { <pp>5__2 = PostProcessing.Instance; if ((Object)(object)<pp>5__2 != (Object)null) { <pp>5__2.GrainDisable(Random.Range(1f, 2f)); } else { <>4__this.WarnOnceNoPP(); } <>2__current = (object)new WaitForSeconds(Random.Range(4f, 8f)); <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoLensWarpPulses>d__134 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private <>c__DisplayClass134_0 <>8__1; private float <endAt>5__2; private bool <wasActive>5__3; private float <baseIntensity>5__4; private float <target>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoLensWarpPulses>d__134(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass134_0(); <endAt>5__2 = Time.time + totalSeconds; if (!<>4__this.TryGetSetting<LensDistortion>(out <>8__1.lens)) { return false; } <wasActive>5__3 = ((PostProcessEffectSettings)<>8__1.lens).active; <baseIntensity>5__4 = Mathf.Clamp(((ParameterOverride<float>)(object)<>8__1.lens.intensity).value, -100f, 100f); ((PostProcessEffectSettings)<>8__1.lens).active = true; break; case 1: <>1__state = -1; <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.AnimateFloat(0f, 0f, 0.35f, () => ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value, delegate(float v) { ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value = v; }, ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value, <baseIntensity>5__4)); <>1__state = 2; return true; case 2: <>1__state = -1; <>2__current = (object)new WaitForSeconds(Random.Range(3.5f, 6f)); <>1__state = 3; return true; case 3: <>1__state = -1; break; } if (Time.time < <endAt>5__2 && !<>4__this._stopping) { <target>5__5 = Mathf.Clamp(Random.Range(<>4__this.lensWarpMin, <>4__this.lensWarpMax), -100f, 100f); <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.AnimateFloat(0.18f, Random.Range(0.2f, 0.45f), 0.5f, () => ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value, delegate(float v) { ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value = v; }, ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value, <target>5__5)); <>1__state = 1; return true; } ((ParameterOverride<float>)(object)<>8__1.lens.intensity).value = <baseIntensity>5__4; ((PostProcessEffectSettings)<>8__1.lens).active = <wasActive>5__3; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoLowPassSweeps>d__142 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private float <endAt>5__1; private float <target>5__2; private float <t>5__3; private float <start>5__4; private float <dur>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoLowPassSweeps>d__142(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <endAt>5__1 = Time.time + totalSeconds; if (!Object.op_Implicit((Object)(object)<>4__this._whisperA) && !Object.op_Implicit((Object)(object)<>4__this._whisperB)) { return false; } <>4__this._tempLowPass = ((Component)<>4__this).gameObject.AddComponent<AudioLowPassFilter>(); <>4__this._tempLowPass.cutoffFrequency = 22000f; goto IL_01af; case 1: <>1__state = -1; goto IL_015e; case 2: { <>1__state = -1; goto IL_01af; } IL_015e: if (<t>5__3 < <dur>5__5 && !<>4__this._stopping) { <t>5__3 += Time.deltaTime; <>4__this._tempLowPass.cutoffFrequency = Mathf.Lerp(<start>5__4, <target>5__2, Mathf.SmoothStep(0f, 1f, <t>5__3 / <dur>5__5)); <>2__current = null; <>1__state = 1; return true; } <>2__current = (object)new WaitForSeconds(Random.Range(0.8f, 1.6f)); <>1__state = 2; return true; IL_01af: if (!(Time.time < <endAt>5__1) || <>4__this._stopping) { break; } <target>5__2 = Random.Range(500f, 3000f); <t>5__3 = 0f; <start>5__4 = <>4__this._tempLowPass.cutoffFrequency; <dur>5__5 = Random.Range(0.4f, 0.9f); goto IL_015e; } <>4__this.ReleaseLowPass(); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <DoSaturationWobbles>d__132 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private float <endAt>5__1; private PostProcessing <pp>5__2; private float <target>5__3; private float <speedIn>5__4; private float <speedOut>5__5; private float <time>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoSaturationWobbles>d__132(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <pp>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <endAt>5__1 = Time.time + totalSeconds; break; case 1: <>1__state = -1; <pp>5__2 = null; break; } if (Time.time < <endAt>5__1 && !<>4__this._stopping) { <pp>5__2 = PostProcessing.Instance; if ((Object)(object)<pp>5__2 != (Object)null) { <target>5__3 = Random.Range(<>4__this.saturationRange.x, <>4__this.saturationRange.y); <speedIn>5__4 = 0.18f; <speedOut>5__5 = 0.4f; <time>5__6 = Random.Range(0.45f, 0.85f); <pp>5__2.SaturationOverride(<target>5__3, <speedIn>5__4, <speedOut>5__5, <time>5__6, ((Component)<>4__this).gameObject); } else { <>4__this.WarnOnceNoPP(); } <>2__current = (object)new WaitForSeconds(Random.Range(2.5f, 4.5f)); <>1__state = 1; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <FadeOutAndStop>d__140 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AudioSource a; public float seconds; public PhoneOmInteractFX <>4__this; private float <start>5__1; private float <t>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeOutAndStop>d__140(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!Object.op_Implicit((Object)(object)a)) { return false; } <start>5__1 = a.volume; <t>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__2 < seconds) { <t>5__2 += Time.deltaTime; a.volume = Mathf.Lerp(<start>5__1, 0f, Mathf.SmoothStep(0f, 1f, <t>5__2 / seconds)); <>2__current = null; <>1__state = 1; return true; } a.Stop(); a.volume = 0f; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <FadeTo>d__139 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AudioSource a; public float targetVol; public float seconds; public PhoneOmInteractFX <>4__this; private float <start>5__1; private float <t>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeTo>d__139(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (!Object.op_Implicit((Object)(object)a)) { return false; } <start>5__1 = a.volume; a.volume = <start>5__1; <t>5__2 = 0f; break; case 1: <>1__state = -1; break; } if (<t>5__2 < seconds) { <t>5__2 += Time.deltaTime; a.volume = Mathf.Lerp(<start>5__1, targetVol, Mathf.SmoothStep(0f, 1f, <t>5__2 / seconds)); <>2__current = null; <>1__state = 1; return true; } a.volume = targetVol; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <RingLifetimeTimer>d__96 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private float <t>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RingLifetimeTimer>d__96(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <t>5__1 = Mathf.Max(0.1f, <>4__this.ringLifetimeMaxSeconds); <>2__current = (object)new WaitForSeconds(<t>5__1); <>1__state = 1; return true; case 1: <>1__state = -1; if (!<>4__this._answered && !<>4__this._vanishing) { ((Component)<>4__this).gameObject.BroadcastMessage("OnBlackPhoneRingStop", (SendMessageOptions)1); ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.SilentHideAndDestroy()); } <>4__this._ringTimer = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <RunSequence>d__103 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float totalSeconds; public PhoneOmInteractFX <>4__this; private Coroutine <c1>5__1; private Coroutine <c2>5__2; private Coroutine <c3>5__3; private Coroutine <c4>5__4; private Coroutine <c5>5__5; private Coroutine <c6>5__6; private Coroutine <c7>5__7; private float <endAt>5__8; private float <nextCrossAt>5__9; private bool <aIsLeader>5__10; private AudioSource <from>5__11; private AudioSource <to>5__12; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RunSequence>d__103(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <c1>5__1 = null; <c2>5__2 = null; <c3>5__3 = null; <c4>5__4 = null; <c5>5__5 = null; <c6>5__6 = null; <c7>5__7 = null; <from>5__11 = null; <to>5__12 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (Object.op_Implicit((Object)(object)<>4__this._clipA)) { <>4__this._whisperA.Play(); } if (Object.op_Implicit((Object)(object)<>4__this._clipB)) { <>4__this._whisperB.Play(); } <>4__this._whisperA.pitch = Random.Range(0.96f, 1.04f); <>4__this._whisperB.pitch = Random.Range(0.94f, 1.06f); <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.FadeTo(<>4__this._whisperA, <>4__this.whisperVolume, <>4__this.whisperFadeIn)); <>1__state = 1; return true; case 1: <>1__state = -1; <c1>5__1 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoContrastPulses(totalSeconds)); <c2>5__2 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoBloomCuts(totalSeconds)); <c3>5__3 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoGrainCuts(totalSeconds)); <c4>5__4 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoLowPassSweeps(totalSeconds)); <c5>5__5 = null; <c6>5__6 = null; <c7>5__7 = null; if (<>4__this.enableChromaticBursts) { <c5>5__5 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoChromaticBursts(totalSeconds)); } if (<>4__this.enableLensWarpPulses) { <c6>5__6 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoLensWarpPulses(totalSeconds)); } if (<>4__this.enableSaturationWobbles) { <c7>5__7 = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.DoSaturationWobbles(totalSeconds)); } <endAt>5__8 = Time.time + totalSeconds; <nextCrossAt>5__9 = Time.time + Random.Range(4f, 8f); goto IL_03c0; case 2: <>1__state = -1; <nextCrossAt>5__9 = Time.time + Random.Range(6f, 12f); <from>5__11 = null; <to>5__12 = null; goto IL_03a8; case 3: <>1__state = -1; goto IL_03c0; case 4: <>1__state = -1; <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.FadeOutAndStop(<>4__this._whisperB, <>4__this.whisperFadeOut)); <>1__state = 5; return true; case 5: { <>1__state = -1; break; } IL_03a8: <>2__current = null; <>1__state = 3; return true; IL_03c0: if (Time.time < <endAt>5__8 && !<>4__this._stopping) { if (Time.time >= <nextCrossAt>5__9) { <aIsLeader>5__10 = <>4__this._whisperA.volume >= <>4__this._whisperB.volume; <from>5__11 = (<aIsLeader>5__10 ? <>4__this._whisperA : <>4__this._whisperB); <to>5__12 = (<aIsLeader>5__10 ? <>4__this._whisperB : <>4__this._whisperA); <to>5__12.pitch = Random.Range(0.92f, 1.08f); <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.Crossfade(<from>5__11, <to>5__12, <>4__this.whisperVolume, 0.9f)); <>1__state = 2; return true; } goto IL_03a8; } if (<c1>5__1 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c1>5__1); } if (<c2>5__2 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c2>5__2); } if (<c3>5__3 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c3>5__3); } if (<c4>5__4 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c4>5__4); } if (<c5>5__5 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c5>5__5); } if (<c6>5__6 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c6>5__6); } if (<c7>5__7 != null) { ((MonoBehaviour)<>4__this).StopCoroutine(<c7>5__7); } if (((Behaviour)<>4__this).isActiveAndEnabled) { <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.FadeOutAndStop(<>4__this._whisperA, <>4__this.whisperFadeOut)); <>1__state = 4; return true; } if (Object.op_Implicit((Object)(object)<>4__this._whisperA)) { <>4__this._whisperA.Stop(); <>4__this._whisperA.volume = 0f; } if (Object.op_Implicit((Object)(object)<>4__this._whisperB)) { <>4__this._whisperB.Stop(); <>4__this._whisperB.volume = 0f; } break; } <>4__this.ReleaseLowPass(); if (<>4__this.postDestroyEffectHoldSeconds <= 0.05f) { <>4__this.RestorePPDefaults(); } <>4__this._run = null; <>4__this._stopping = false; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <ShrinkSmokeAndHideThenDestroy>d__104 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private Vector3 <start>5__1; private float <t>5__2; private float <dur>5__3; private Collider[] <>s__4; private int <>s__5; private Collider <c>5__6; private float <k>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <ShrinkSmokeAndHideThenDestroy>d__104(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__4 = null; <c>5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this._vanishing = true; <>s__4 = ((Component)<>4__this).GetComponentsInChildren<Collider>(true); for (<>s__5 = 0; <>s__5 < <>s__4.Length; <>s__5++) { <c>5__6 = <>s__4[<>s__5]; <c>5__6.enabled = false; <c>5__6 = null; } <>s__4 = null; <start>5__1 = ((Component)<>4__this).transform.localScale; <t>5__2 = 0f; <dur>5__3 = Mathf.Max(0.05f, <>4__this.vanishShrinkTime); break; case 1: <>1__state = -1; break; } if (<t>5__2 < <dur>5__3) { <t>5__2 += Time.deltaTime; <k>5__7 = Mathf.SmoothStep(0f, 1f, <t>5__2 / <dur>5__3); ((Component)<>4__this).transform.localScale = Vector3.Lerp(<start>5__1, Vector3.zero, <k>5__7); <>2__current = null; <>1__state = 1; return true; } ((Component)<>4__this).transform.localScale = Vector3.zero; <>4__this.SpawnBlackSmoke(((Component)<>4__this).transform.position); <>4__this.SetAllRenderersEnabled(enabled: false); Object.Destroy((Object)(object)((Component)<>4__this).gameObject, Mathf.Max(0.1f, <>4__this.vanishDestroyDelay)); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SilentHideAndDestroy>d__105 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private Collider[] <>s__1; private int <>s__2; private Collider <c>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SilentHideAndDestroy>d__105(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = null; <c>5__3 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this._vanishing = true; <>s__1 = ((Component)<>4__this).GetComponentsInChildren<Collider>(true); for (<>s__2 = 0; <>s__2 < <>s__1.Length; <>s__2++) { <c>5__3 = <>s__1[<>s__2]; <c>5__3.enabled = false; <c>5__3 = null; } <>s__1 = null; <>4__this.SetAllRenderersEnabled(enabled: false); <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; Object.Destroy((Object)(object)((Component)<>4__this).gameObject, Mathf.Max(0.1f, <>4__this.vanishDestroyDelay)); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SnapPhoneToPaintingAnchorNearSeed>d__119 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private List<Transform> <candidates>5__1; private IOrderedEnumerable<Transform> <ordered>5__2; private Transform <anchor>5__3; private Vector3 <pos>5__4; private Quaternion <rot>5__5; private Transform <chosenRoot>5__6; private RaycastHit <hit>5__7; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SnapPhoneToPaintingAnchorNearSeed>d__119(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <candidates>5__1 = null; <ordered>5__2 = null; <anchor>5__3 = null; <chosenRoot>5__6 = null; <>1__state = -2; } private bool MoveNext() { //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: 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_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <candidates>5__1 = CollectPaintingCandidates(includeInactive: true); if (<candidates>5__1.Count == 0) { return false; } <ordered>5__2 = <candidates>5__1.OrderBy((Transform t) => Vector3.SqrMagnitude(t.position - <>4__this._spawnSeedPos)).ThenBy<Transform, string>((Transform t) => Object.op_Implicit((Object)(object)t) ? ((Object)t).name : string.Empty, StringComparer.Ordinal); <anchor>5__3 = <ordered>5__2.FirstOrDefault(); if ((Object)(object)<anchor>5__3 == (Object)null) { return false; } <pos>5__4 = <anchor>5__3.position + <anchor>5__3.forward * Mathf.Max(0f, <>4__this.phoneForwardOffsetFallback) - <anchor>5__3.up * Mathf.Max(0f, <>4__this.phoneDownOffsetFallback); if (<>4__this.enforceMinY && <pos>5__4.y < <>4__this.phoneMinY) { <pos>5__4.y = <>4__this.phoneMinY; } <rot>5__5 = <anchor>5__3.rotation * Quaternion.Euler(<>4__this.mountEuler); if (Physics.CheckSphere(<pos>5__4, 0.1f)) { if (Physics.Raycast(<anchor>5__3.position, <anchor>5__3.forward, ref <hit>5__7, 0.5f)) { <pos>5__4 = ((RaycastHit)(ref <hit>5__7)).point + <anchor>5__3.forward * 0.02f; } else { <pos>5__4 += <anchor>5__3.forward * 0.02f; } } <>4__this.FlushToWall(ref <pos>5__4, <rot>5__5); ((Component)<>4__this).transform.SetPositionAndRotation(<pos>5__4, <rot>5__5); <>4__this._snappedFromSeed = true; <chosenRoot>5__6 = GetPaintingRoot(<anchor>5__3) ?? <anchor>5__3; _reservedPaintingRoots.Add(<chosenRoot>5__6); <>4__this.ReserveNearbyPaintingAroundPhone(); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SnapToWallAfterSeed>d__90 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private int <frames>5__1; private float <softTimeout>5__2; private int <i>5__3; private bool <done>5__4; private LevelGenerator <lg>5__5; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SnapToWallAfterSeed>d__90(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <lg>5__5 = null; <>1__state = -2; } private bool MoveNext() { //IL_0135: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <frames>5__1 = Mathf.Max(0, <>4__this.phoneWallSearchWarmupFrames); <i>5__3 = 0; goto IL_007e; case 1: <>1__state = -1; <i>5__3++; goto IL_007e; case 2: <>1__state = -1; goto IL_0113; case 3: { <>1__state = -1; break; } IL_007e: if (<i>5__3 < <frames>5__1) { <>2__current = null; <>1__state = 1; return true; } <softTimeout>5__2 = Time.time + 1f; goto IL_0113; IL_0113: if (Time.time < <softTimeout>5__2) { <done>5__4 = true; try { <lg>5__5 = LevelGenerator.Instance; <done>5__4 = (Object)(object)<lg>5__5 == (Object)null || <lg>5__5.Generated; <lg>5__5 = null; } catch { <done>5__4 = true; } if (!<done>5__4) { <>2__current = null; <>1__state = 2; return true; } } if (<>4__this.TrySnapToWall(<>4__this._spawnSeedPos, <>4__this.phoneWallSearchRadius)) { <>4__this._snappedFromSeed = true; <>4__this.ReserveNearbyPaintingAroundPhone(); return false; } if (<>4__this.enablePaintingFallback) { <>2__current = ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.SnapPhoneToPaintingAnchorNearSeed()); <>1__state = 3; return true; } break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SwapPaintingsOnce>d__121 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PhoneOmInteractFX <>4__this; private List<Transform> <targets>5__1; private int <swapped>5__2; private List<Transform>.Enumerator <>s__3; private Transform <t>5__4; private Vector3 <pos>5__5; private Quaternion <rot>5__6; private Transform <parent>5__7; private GameObject <inst>5__8; private Renderer[] <>s__9; private int <>s__10; private Renderer <r>5__11; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SwapPaintingsOnce>d__121(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || num == 1) { try { } finally { <>m__Finally1(); } } <targets>5__1 = null; <>s__3 = default(List<Transform>.Enumerator); <t>5__4 = null; <parent>5__7 = null; <inst>5__8 = null; <>s__9 = null; <r>5__11 = null; <>1__state = -2; } private bool MoveNext() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (migh