using System;
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 BoneLib;
using BoneLib.BoneMenu;
using HarmonyLib;
using Il2Cpp;
using Il2CppCysharp.Threading.Tasks;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppInterop.Runtime.InteropTypes.Fields;
using Il2CppSLZ.Bonelab;
using Il2CppSLZ.Bonelab.SaveData;
using Il2CppSLZ.Marrow;
using Il2CppSLZ.Marrow.AI;
using Il2CppSLZ.Marrow.Audio;
using Il2CppSLZ.Marrow.Data;
using Il2CppSLZ.Marrow.Interaction;
using Il2CppSLZ.Marrow.Pool;
using Il2CppSLZ.Marrow.PuppetMasta;
using Il2CppSLZ.Marrow.Utilities;
using Il2CppSLZ.Marrow.Warehouse;
using Il2CppSLZ.VRMK;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using MelonLoader.Preferences;
using Portals;
using Portals.AssetWarehouse;
using Portals.MonoBehaviours;
using Portals.Pool;
using Portals.Rendering;
using Unity.XR.MockHMD;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.XR;
using UnityEngine.XR.Management;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(PortalsMod), "Portals", "1.6.0", "Lakatrazz", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: AssemblyDescription("Adds portals that can connect two areas of space.")]
[assembly: AssemblyTitle("Portals")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.6.0.0")]
[module: UnverifiableCode]
namespace Portals
{
public static class EmbeddedResource
{
public static byte[] LoadBytesFromAssembly(Assembly assembly, string name)
{
if (!assembly.GetManifestResourceNames().Contains(name))
{
MelonLogger.Warning("Failed to locate an embedded resource with path " + name + "!");
return null;
}
MelonLogger.Msg("Loading embedded resource data " + name + "...", new object[1] { ConsoleColor.DarkCyan });
using Stream stream = assembly.GetManifestResourceStream(name);
using MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
MelonLogger.Msg("Done!", new object[1] { ConsoleColor.DarkCyan });
return memoryStream.ToArray();
}
public static Assembly LoadAssemblyFromAssembly(Assembly assembly, string name)
{
byte[] array = LoadBytesFromAssembly(assembly, name);
if (array == null)
{
return null;
}
return Assembly.Load(array);
}
}
public class PortalsMod : MelonMod
{
public const string Version = "1.6.0";
public static Instance Logger { get; private set; }
public static bool IsMockHMD { get; private set; }
public static Assembly PortalsAssembly { get; private set; }
public static bool HasFusion { get; private set; }
public override void OnInitializeMelon()
{
Logger = ((MelonBase)this).LoggerInstance;
PortalsAssembly = ((MelonBase)this).MelonAssembly.Assembly;
Hooking.OnLevelLoaded += OnLevelLoaded;
CheckFusion();
PortalPreferences.SetupPreferences();
}
private static void CheckFusion()
{
if (MelonBase.FindMelon("LabFusion", "Lakatrazz") != null)
{
HasFusion = true;
EmbeddedResource.LoadAssemblyFromAssembly(PortalsAssembly, "Portals.resources.PortalsModule.dll").GetType("PortalsModule.ModuleLoader").GetMethod("LoadModule")
.Invoke(null, null);
}
}
public override void OnLateInitializeMelon()
{
IsMockHMD = Object.op_Implicit((Object)(object)XRGeneralSettings.Instance.Manager.loaders.Find(Predicate<XRLoader>.op_Implicit((Func<XRLoader, bool>)((XRLoader loader) => (Object)(object)((Il2CppObjectBase)loader).TryCast<MockHMDLoader>() != (Object)null))));
}
public override void OnPreferencesLoaded()
{
PortalPreferences.LoadPreferences();
}
private void OnLevelLoaded(LevelInfo info)
{
CloneCreator.OnLevelLoaded();
}
}
public static class PortalConstants
{
public static readonly Vector2 DefaultSize = new Vector2(1.22f, 2.44f);
private static LayerMask _hitMask = default(LayerMask);
private static bool _hasHitMask = false;
public const int PortalLayer = 18;
public const int TrackerLayer = 19;
public static LayerMask HitMask
{
get
{
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//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)
//IL_003f: 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_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
if (!_hasHitMask)
{
_hitMask = LayerMask.op_Implicit(-1);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -16777217);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -257);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -67108865);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -536870913);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -134217729);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -1073741825);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -268435457);
_hitMask = LayerMask.op_Implicit(LayerMask.op_Implicit(_hitMask) & -9);
_hasHitMask = true;
}
return _hitMask;
}
}
}
public static class PortalPreferences
{
private static float _renderScale;
private static bool _renderVolumetrics;
private static int _renderDistance;
private static MelonPreferences_Category _preferencesCategory;
private static MelonPreferences_Entry<bool> _renderViewPreference;
private static MelonPreferences_Entry<float> _renderScalePreference;
private static MelonPreferences_Entry<bool> _renderVolumetricsPreference;
private static MelonPreferences_Entry<bool> _limitDistancePreference;
private static MelonPreferences_Entry<int> _renderDistancePreference;
private static MelonPreferences_Entry<int> _maxRecursionPreference;
private static MelonPreferences_Entry<bool> _disableInFusionPreference;
private static Page _portalsPage;
private static BoolElement _renderViewElement;
private static FloatElement _renderScaleElement;
private static BoolElement _renderVolumetricsElement;
private static BoolElement _limitDistanceElement;
private static IntElement _renderDistanceElement;
private static IntElement _maxRecursionElement;
private static BoolElement _disableInFusionElement;
private static bool _preferencesSetup;
public static bool RenderView { get; private set; }
public static float RenderScale
{
get
{
return _renderScale;
}
set
{
_renderScale = value;
PortalPreferences.OnRenderScaleChanged?.Invoke(value);
}
}
public static bool RenderVolumetrics
{
get
{
return _renderVolumetrics;
}
set
{
_renderVolumetrics = value;
PortalPreferences.OnRenderVolumetricsChanged?.Invoke(value);
}
}
public static bool LimitDistance { get; private set; }
public static int RenderDistance
{
get
{
return _renderDistance;
}
set
{
_renderDistance = value;
}
}
public static int MaxRecursion { get; private set; }
public static bool DisableInFusion { get; private set; }
public static event Action<float> OnRenderScaleChanged;
public static event Action<bool> OnRenderVolumetricsChanged;
public static void SetupPreferences()
{
bool flag = true;
float num = 1f;
bool flag2 = true;
bool flag3 = true;
int num2 = 25;
int num3 = 1;
bool flag4 = false;
if (HelperMethods.IsAndroid())
{
num2 = 10;
}
_preferencesCategory = MelonPreferences.CreateCategory("Portals");
_renderViewPreference = _preferencesCategory.CreateEntry<bool>("Render View", flag, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
_renderScalePreference = _preferencesCategory.CreateEntry<float>("Render Scale", num, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
_renderVolumetricsPreference = _preferencesCategory.CreateEntry<bool>("Render Volumetrics", flag2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
_limitDistancePreference = _preferencesCategory.CreateEntry<bool>("Limit Distance", flag3, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
_renderDistancePreference = _preferencesCategory.CreateEntry<int>("Render Distance", num2, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
_maxRecursionPreference = _preferencesCategory.CreateEntry<int>("Max Recursion", num3, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
if (PortalsMod.HasFusion)
{
_disableInFusionPreference = _preferencesCategory.CreateEntry<bool>("Disable In Fusion", flag4, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
}
_preferencesSetup = true;
SetupBoneMenu();
LoadPreferences();
}
public static void LoadPreferences()
{
if (_preferencesSetup)
{
RenderView = _renderViewPreference.Value;
RenderScale = _renderScalePreference.Value;
RenderVolumetrics = _renderVolumetricsPreference.Value;
LimitDistance = _limitDistancePreference.Value;
RenderDistance = _renderDistancePreference.Value;
MaxRecursion = _maxRecursionPreference.Value;
_renderViewElement.Value = RenderView;
_renderScaleElement.Value = RenderScale;
_limitDistanceElement.Value = LimitDistance;
_renderDistanceElement.Value = RenderDistance;
_maxRecursionElement.Value = MaxRecursion;
if (PortalsMod.HasFusion)
{
DisableInFusion = _disableInFusionPreference.Value;
_disableInFusionElement.Value = DisableInFusion;
}
}
}
private static void SetupBoneMenu()
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: 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)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
_portalsPage = Page.Root.CreatePage("Portals", Color.cyan, 0, true);
_renderViewElement = _portalsPage.CreateBool("Render View", Color.yellow, _renderViewPreference.Value, (Action<bool>)OnSetRenderView);
_renderScaleElement = _portalsPage.CreateFloat("Render Scale", Color.yellow, _renderScalePreference.Value, 0.1f, 0.1f, 1f, (Action<float>)OnSetRenderScale);
_renderVolumetricsElement = _portalsPage.CreateBool("Render Volumetrics", Color.cyan, _renderVolumetricsPreference.Value, (Action<bool>)OnSetRenderVolumetrics);
_limitDistanceElement = _portalsPage.CreateBool("Limit Distance", Color.yellow, _limitDistancePreference.Value, (Action<bool>)OnSetLimitDistance);
_renderDistanceElement = _portalsPage.CreateInt("Render Distance", Color.yellow, _renderDistancePreference.Value, 1, 1, 100, (Action<int>)OnSetRenderDistance);
_maxRecursionElement = _portalsPage.CreateInt("Max Recursion", Color.yellow, _maxRecursionPreference.Value, 1, 1, 8, (Action<int>)OnSetMaxRecursion);
if (PortalsMod.HasFusion)
{
_disableInFusionElement = _portalsPage.CreateBool("Disable In Fusion", Color.red, _disableInFusionPreference.Value, (Action<bool>)OnSetDisableInFusion);
}
}
private static void OnSetRenderView(bool value)
{
RenderView = value;
_renderViewPreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetRenderScale(float value)
{
RenderScale = value;
_renderScalePreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetRenderVolumetrics(bool value)
{
RenderVolumetrics = value;
_renderVolumetricsPreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetLimitDistance(bool value)
{
LimitDistance = value;
_limitDistancePreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetRenderDistance(int value)
{
RenderDistance = value;
_renderDistancePreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetMaxRecursion(int value)
{
MaxRecursion = value;
_maxRecursionPreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
private static void OnSetDisableInFusion(bool value)
{
DisableInFusion = value;
_disableInFusionPreference.Value = value;
_preferencesCategory.SaveToFile(false);
}
}
}
namespace Portals.Rendering
{
public static class CloneCreator
{
private static GameObject _disabledCloningGameObject;
private static Transform _disabledCloningTransform;
public static Transform DisabledCloningTransform => _disabledCloningTransform;
public static void OnLevelLoaded()
{
ValidateTempParent();
}
private static void ValidateTempParent()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
if (!((Object)(object)_disabledCloningGameObject != (Object)null))
{
_disabledCloningGameObject = new GameObject("Disabled Cloning Parent");
_disabledCloningGameObject.SetActive(false);
_disabledCloningTransform = _disabledCloningGameObject.transform;
}
}
public static CloneRenderer CreateCloneRenderer(GameObject reference)
{
CloneRenderer cloneRenderer = CreateCloneGameObject(reference).AddComponent<CloneRenderer>();
cloneRenderer.Initialize(reference);
return cloneRenderer;
}
private static GameObject CreateCloneGameObject(GameObject reference)
{
ValidateTempParent();
GameObject obj = Object.Instantiate<GameObject>(reference, DisabledCloningTransform);
obj.SetActive(false);
obj.transform.parent = null;
Strip(obj);
((Object)obj).name = GetCloneName(((Object)reference).name);
return obj;
}
private static string GetCloneName(string original)
{
return original + " (Portal Renderer)";
}
private static void Strip(GameObject root)
{
Il2CppArrayBase<Component> componentsInChildren = root.GetComponentsInChildren<Component>(true);
for (int i = 0; i < 8; i++)
{
int num = 0;
foreach (Component item in componentsInChildren)
{
if (!((Object)(object)item == (Object)null) && !Object.op_Implicit((Object)(object)((Il2CppObjectBase)item).TryCast<Transform>()))
{
num++;
Object.DestroyImmediate((Object)(object)item);
}
}
if (num <= 0)
{
break;
}
}
}
}
public class PortalCamera
{
private RenderTexture _targetTexture;
public Camera Camera { get; set; }
public Transform Transform { get; set; }
public GameObject GameObject { get; set; }
public RenderTexture TargetTexture
{
get
{
return _targetTexture;
}
set
{
_targetTexture = value;
Camera.targetTexture = value;
this.OnTargetTextureChanged?.Invoke(value);
}
}
public StereoscopicEye Eye { get; set; }
public VolumetricRendering VolumetricRendering { get; set; }
public event Action<RenderTexture> OnTargetTextureChanged;
public PortalCamera(Portal portal, StereoscopicEye eye)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_00b7: 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)
GameObject = new GameObject($"{eye} Portal Camera");
GameObject.SetActive(false);
Transform = GameObject.transform;
Transform.parent = ((Component)portal).transform;
Camera = GameObject.AddComponent<Camera>();
((Behaviour)Camera).enabled = false;
Camera.useOcclusionCulling = false;
Camera.allowHDR = true;
Camera.allowMSAA = false;
Camera.clearFlags = (CameraClearFlags)2;
Camera.backgroundColor = Color.black;
Camera.stereoTargetEye = (StereoTargetEyeMask)0;
UniversalAdditionalCameraData obj = GameObject.AddComponent<UniversalAdditionalCameraData>();
obj.antialiasing = (AntialiasingMode)0;
obj.allowXRRendering = false;
VolumetricRendering = VolumetricCreator.AddVolumetricRendering(Camera);
GameObject.SetActive(true);
GetDimensions();
Eye = eye;
PortalPreferences.OnRenderScaleChanged += OnRenderScaleChanged;
PortalPreferences.OnRenderVolumetricsChanged += OnRenderVolumetricsChanged;
OnRenderScaleChanged(PortalPreferences.RenderScale);
OnRenderVolumetricsChanged(PortalPreferences.RenderVolumetrics);
}
public void ReleaseTexture()
{
if ((Object)(object)TargetTexture != (Object)null)
{
TargetTexture.Release();
TargetTexture = null;
}
}
private void OnRenderScaleChanged(float value)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
ReleaseTexture();
(int width, int height) dimensions = GetDimensions();
int item = dimensions.width;
int item2 = dimensions.height;
item = Mathf.RoundToInt((float)item * value);
item2 = Mathf.RoundToInt((float)item2 * value);
TargetTexture = new RenderTexture(item, item2, 24);
}
private void OnRenderVolumetricsChanged(bool value)
{
((Behaviour)VolumetricRendering).enabled = value;
}
private static (int width, int height) GetDimensions()
{
int num = XRSettings.eyeTextureWidth;
int num2 = XRSettings.eyeTextureHeight;
if (num <= 0 || num2 <= 0)
{
num = Screen.width;
num2 = Screen.height;
}
return (num, num2);
}
public void Destroy()
{
PortalPreferences.OnRenderScaleChanged -= OnRenderScaleChanged;
PortalPreferences.OnRenderVolumetricsChanged -= OnRenderVolumetricsChanged;
Object.Destroy((Object)(object)GameObject);
ReleaseTexture();
}
public void RenderCamera(ScriptableRenderContext context)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
UpdateVolumetrics();
UniversalRenderPipeline.RenderSingleCamera(context, Camera);
}
private void UpdateVolumetrics()
{
if (PortalPreferences.RenderVolumetrics)
{
((Behaviour)Camera).enabled = true;
try
{
VolumetricRendering.UpdateFunc();
}
catch (Exception ex)
{
PortalsMod.Logger.Error("Failed invoking VolumetricRendering.UpdateFunc!", ex);
}
((Behaviour)Camera).enabled = false;
}
}
}
public class PortalNearPlane
{
private Il2CppStructArray<Vector3> _frustumCorners = Il2CppStructArray<Vector3>.op_Implicit((Vector3[])(object)new Vector3[4]);
private Vector3[] _vertices = (Vector3[])(object)new Vector3[5];
public MeshFilter MeshFilter { get; set; }
public MeshRenderer MeshRenderer { get; set; }
public GameObject GameObject { get; set; }
public Transform Transform { get; set; }
public Mesh Mesh { get; set; }
public Material Material { get; set; }
public PortalNearPlane(Shader shader)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected O, but got Unknown
GameObject = new GameObject("Portal Near Plane");
Transform = GameObject.transform;
MeshFilter = GameObject.AddComponent<MeshFilter>();
MeshRenderer = GameObject.AddComponent<MeshRenderer>();
Mesh = new Mesh();
MeshFilter.sharedMesh = Mesh;
Material = new Material(shader);
((Renderer)MeshRenderer).sharedMaterial = Material;
}
public void Destroy()
{
Object.Destroy((Object)(object)GameObject);
}
public void Hide()
{
((Renderer)MeshRenderer).enabled = false;
}
public void Render(Portal portal, Camera camera, MonoOrStereoscopicEye eye)
{
//IL_0011: 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_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: 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_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Invalid comparison between Unknown and I4
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: 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_00b0: 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_00be: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: 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_00fd: 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_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: 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_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: 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_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: 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_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0201: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_020a: Unknown result type (might be due to invalid IL or missing references)
//IL_0211: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: 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_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
//IL_026e: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_0282: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0425: Unknown result type (might be due to invalid IL or missing references)
//IL_042a: Unknown result type (might be due to invalid IL or missing references)
//IL_042f: Unknown result type (might be due to invalid IL or missing references)
//IL_0434: Unknown result type (might be due to invalid IL or missing references)
//IL_0439: Unknown result type (might be due to invalid IL or missing references)
//IL_043e: Unknown result type (might be due to invalid IL or missing references)
//IL_0443: Unknown result type (might be due to invalid IL or missing references)
//IL_0448: Unknown result type (might be due to invalid IL or missing references)
//IL_044d: Unknown result type (might be due to invalid IL or missing references)
//IL_0452: Unknown result type (might be due to invalid IL or missing references)
//IL_045a: Unknown result type (might be due to invalid IL or missing references)
//IL_045c: Unknown result type (might be due to invalid IL or missing references)
//IL_0461: Unknown result type (might be due to invalid IL or missing references)
//IL_0469: Unknown result type (might be due to invalid IL or missing references)
//IL_046b: Unknown result type (might be due to invalid IL or missing references)
//IL_0470: Unknown result type (might be due to invalid IL or missing references)
//IL_0478: Unknown result type (might be due to invalid IL or missing references)
//IL_047a: Unknown result type (might be due to invalid IL or missing references)
//IL_047f: Unknown result type (might be due to invalid IL or missing references)
//IL_0487: Unknown result type (might be due to invalid IL or missing references)
//IL_0489: Unknown result type (might be due to invalid IL or missing references)
//IL_048e: Unknown result type (might be due to invalid IL or missing references)
//IL_0496: Unknown result type (might be due to invalid IL or missing references)
//IL_0498: Unknown result type (might be due to invalid IL or missing references)
//IL_049d: Unknown result type (might be due to invalid IL or missing references)
//IL_04a6: Unknown result type (might be due to invalid IL or missing references)
//IL_04a8: Unknown result type (might be due to invalid IL or missing references)
//IL_04b4: Unknown result type (might be due to invalid IL or missing references)
//IL_04b6: Unknown result type (might be due to invalid IL or missing references)
//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
//IL_04d2: Unknown result type (might be due to invalid IL or missing references)
//IL_04de: Unknown result type (might be due to invalid IL or missing references)
//IL_04e0: Unknown result type (might be due to invalid IL or missing references)
//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02de: Unknown result type (might be due to invalid IL or missing references)
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
//IL_0319: Unknown result type (might be due to invalid IL or missing references)
//IL_031b: Unknown result type (might be due to invalid IL or missing references)
//IL_031d: Unknown result type (might be due to invalid IL or missing references)
//IL_0322: Unknown result type (might be due to invalid IL or missing references)
//IL_0326: Unknown result type (might be due to invalid IL or missing references)
//IL_0332: Unknown result type (might be due to invalid IL or missing references)
//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0302: Unknown result type (might be due to invalid IL or missing references)
//IL_0307: Unknown result type (might be due to invalid IL or missing references)
//IL_039f: Unknown result type (might be due to invalid IL or missing references)
//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Unknown result type (might be due to invalid IL or missing references)
//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
//IL_036c: Unknown result type (might be due to invalid IL or missing references)
//IL_0373: Unknown result type (might be due to invalid IL or missing references)
//IL_037a: Unknown result type (might be due to invalid IL or missing references)
//IL_037f: Unknown result type (might be due to invalid IL or missing references)
//IL_0384: Unknown result type (might be due to invalid IL or missing references)
//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
//IL_03f4: Unknown result type (might be due to invalid IL or missing references)
//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
//IL_040a: Unknown result type (might be due to invalid IL or missing references)
//IL_040f: Unknown result type (might be due to invalid IL or missing references)
Transform transform = ((Component)portal).transform;
Transform transform2 = ((Component)camera).transform;
Plane val = default(Plane);
((Plane)(ref val))..ctor(transform.forward, transform.position);
float num = Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(transform2.position));
float num2 = camera.nearClipPlane + 0.01f;
camera.CalculateFrustumCorners(new Rect(0f, 0f, 1f, 1f), num2, (MonoOrStereoscopicEye)2, _frustumCorners);
Matrix4x4 val2 = camera.worldToCameraMatrix;
if ((int)eye == 0)
{
val2 = camera.GetStereoViewMatrix((StereoscopicEye)0);
}
else if ((int)eye == 1)
{
val2 = camera.GetStereoViewMatrix((StereoscopicEye)1);
}
Matrix4x4 inverse = ((Matrix4x4)(ref val2)).inverse;
Vector3 val3 = ((Il2CppArrayBase<Vector3>)(object)_frustumCorners)[0];
Vector3 val4 = ((Il2CppArrayBase<Vector3>)(object)_frustumCorners)[3];
Vector3 val5 = ((Il2CppArrayBase<Vector3>)(object)_frustumCorners)[2];
Vector3 val6 = ((Il2CppArrayBase<Vector3>)(object)_frustumCorners)[1];
val3.z = 0f - val3.z;
val4.z = 0f - val4.z;
val5.z = 0f - val5.z;
val6.z = 0f - val6.z;
Vector3 val7 = ((Matrix4x4)(ref inverse)).MultiplyPoint(val3);
Vector3 val8 = ((Matrix4x4)(ref inverse)).MultiplyPoint(val4);
Vector3 val9 = ((Matrix4x4)(ref inverse)).MultiplyPoint(val5);
Vector3 val10 = ((Matrix4x4)(ref inverse)).MultiplyPoint(val6);
Vector3 val11 = val7;
Vector3 position = (val7 + val8 + val9 + val10) / 4f;
Transform.position = position;
Transform.rotation = transform2.rotation;
Vector3[] array = (Vector3[])(object)new Vector3[5] { val7, val8, val9, val10, val11 };
bool flag = false;
foreach (Vector3 val12 in array)
{
if (Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(val12)) != num)
{
flag = true;
}
}
((Renderer)MeshRenderer).enabled = flag;
if (!flag)
{
return;
}
Vector3[] array2 = (Vector3[])(object)new Vector3[5] { val7, val8, val9, val10, val11 };
int[] array3 = new int[6] { 2, 1, 0, 3, 2, 0 };
Ray val17 = default(Ray);
float num8 = default(float);
Ray val18 = default(Ray);
float num9 = default(float);
Ray val20 = default(Ray);
float num11 = default(float);
for (int j = 0; j < 4; j++)
{
int num3 = Mod(j - 1, 4);
int num4 = Mod(j + 1, 4);
Vector3 val13 = array2[num3];
Vector3 val14 = array2[num4];
Vector3 val15 = array2[j];
float num5 = Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(val13));
float num6 = Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(val14));
float num7 = Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(val15));
if (num7 != num)
{
continue;
}
bool flag2 = false;
Vector3 val16;
if (num7 != num5)
{
val16 = val13 - val15;
((Ray)(ref val17))..ctor(val15, ((Vector3)(ref val16)).normalized);
if (((Plane)(ref val)).Raycast(val17, ref num8))
{
array[j] = ((Ray)(ref val17)).origin + ((Ray)(ref val17)).direction * num8;
flag2 = true;
}
}
if (num7 != num6)
{
val16 = val14 - val15;
((Ray)(ref val18))..ctor(val15, ((Vector3)(ref val16)).normalized);
if (((Plane)(ref val)).Raycast(val18, ref num9))
{
int num10 = j;
if (flag2)
{
num10 = 4;
int[] obj = new int[9] { 2, 1, 0, 3, 2, 0, 0, 0, 4 };
obj[6] = j;
obj[7] = num4;
array3 = obj;
}
array[num10] = ((Ray)(ref val18)).origin + ((Ray)(ref val18)).direction * num9;
flag2 = true;
}
}
if (flag2)
{
continue;
}
Vector3 val19 = array2[Mod(j + 2, 4)];
if (Mathf.Sign(((Plane)(ref val)).GetDistanceToPoint(val19)) != num7)
{
val16 = val19 - val15;
((Ray)(ref val20))..ctor(val15, ((Vector3)(ref val16)).normalized);
if (((Plane)(ref val)).Raycast(val20, ref num11))
{
array[j] = ((Ray)(ref val20)).origin + ((Ray)(ref val20)).direction * num11;
array[4] = array[j];
}
}
}
val7 = array[0];
val8 = array[1];
val9 = array[2];
val10 = array[3];
val11 = array[4];
val7 = Transform.InverseTransformPoint(val7);
val8 = Transform.InverseTransformPoint(val8);
val9 = Transform.InverseTransformPoint(val9);
val10 = Transform.InverseTransformPoint(val10);
val11 = Transform.InverseTransformPoint(val11);
_vertices[0] = val7;
_vertices[1] = val8;
_vertices[2] = val9;
_vertices[3] = val10;
_vertices[4] = val11;
Mesh.SetVertices(Il2CppStructArray<Vector3>.op_Implicit(_vertices));
Mesh.triangles = Il2CppStructArray<int>.op_Implicit(array3);
Mesh.RecalculateBounds();
}
private static int Mod(int a, int b)
{
return a - b * Mathf.FloorToInt((float)a / (float)b);
}
}
public static class PortalShaderConstants
{
public static readonly int LeftEyeTextureID = Shader.PropertyToID("_LeftEyeTexture");
public static readonly int RightEyeTextureID = Shader.PropertyToID("_RightEyeTexture");
public static readonly int MainTextureID = Shader.PropertyToID("_MainTex");
public static readonly int TargetEyeID = Shader.PropertyToID("_TargetEye");
public static readonly int ForceEyeID = Shader.PropertyToID("_ForceEye");
public static readonly int EyeOverrideID = Shader.PropertyToID("_EyeOverride");
public static readonly int OpenID = Shader.PropertyToID("_Open");
public static readonly int OutlineID = Shader.PropertyToID("_Outline");
public static readonly int InsideID = Shader.PropertyToID("_Inside");
}
public static class RenderingHooks
{
private static bool _hooked;
private static Action<ScriptableRenderContext, Camera> _hook;
public static event Action<ScriptableRenderContext, Camera> PreBeginCameraRendering;
public static event Action<ScriptableRenderContext, Camera> BeginCameraRendering;
public static void HookRenderPipeline()
{
UnHookRenderPipeline();
_hook = Action<ScriptableRenderContext, Camera>.op_Implicit((Action<ScriptableRenderContext, Camera>)OnBeginCameraRendering);
RenderPipelineManager.beginCameraRendering += _hook;
_hooked = true;
}
public static void UnHookRenderPipeline()
{
if (_hooked)
{
RenderPipelineManager.beginCameraRendering -= _hook;
_hooked = false;
_hook = null;
}
}
private static void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
try
{
RenderingHooks.PreBeginCameraRendering?.Invoke(context, camera);
RenderingHooks.BeginCameraRendering?.Invoke(context, camera);
}
catch (Exception ex)
{
PortalsMod.Logger.Error("Caught exception in OnBeginCameraRendering: ", ex);
}
}
}
public static class VolumetricCreator
{
public static VolumetricRendering GetPlayerVolumetricRendering()
{
return ((Component)Player.ControllerRig.headset).GetComponent<VolumetricRendering>();
}
public static void AssignComputeShaders(VolumetricRendering volumetricRendering)
{
VolumetricRendering playerVolumetricRendering = GetPlayerVolumetricRendering();
volumetricRendering.FroxelFogCompute = playerVolumetricRendering.FroxelFogCompute;
volumetricRendering.FroxelIntegrationCompute = playerVolumetricRendering.FroxelIntegrationCompute;
volumetricRendering.ClipmapCompute = playerVolumetricRendering.ClipmapCompute;
volumetricRendering.BlurCompute = playerVolumetricRendering.BlurCompute;
}
public static VolumetricRendering AddVolumetricRendering(Camera camera)
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
VolumetricRendering obj = ((Component)camera).gameObject.AddComponent<VolumetricRendering>();
obj.tempOffset = 0f;
obj.cam = camera;
obj.volumetricData = GetVolumetricData();
obj.reprojectionAmount = 0.95f;
obj.FroxelBlur = (BlurType)0;
obj.SliceDistributionUniformity = 0.5f;
obj.albedo = Color.white;
obj.meanFreePath = 15f;
obj.StaticLightMultiplier = 1f;
AssignComputeShaders(obj);
return obj;
}
public static VolumetricData GetVolumetricData()
{
if (HelperMethods.IsAndroid())
{
return GraphicsManager.QuestVolumetricRenderingSettings;
}
return GraphicsManager.PCVolumetricRenderingSettings;
}
}
}
namespace Portals.Pool
{
public static class PortalEffectSpawner
{
public static void ShootProjectile(PortalProjectile.ProjectileData data)
{
//IL_0013: 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)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
SpawnableCrateReference portalProjectileReference = PortalCrateReferences.PortalProjectileReference;
Spawnable val = new Spawnable
{
crateRef = portalProjectileReference,
policyData = null
};
AssetSpawner.Register(val);
UniTask<Poolee> val2 = AssetSpawner.SpawnAsync(val, data.Position, Quaternion.LookRotation(data.Direction), new Nullable<Vector3>(Vector3.one), (Transform)null, false, new Nullable<int>(0), (Action<GameObject>)null, (Action<GameObject>)null, (Action<GameObject>)null);
Awaiter<Poolee> awaiter = val2.GetAwaiter();
Action action = delegate
{
Poolee result = awaiter.GetResult();
if (!((Object)(object)result == (Object)null))
{
((Component)result).GetComponent<PortalProjectile>().Fire(data);
}
};
awaiter.OnCompleted(Action.op_Implicit(action));
}
public static void PlayImpactEffect(Vector3 position, Quaternion rotation, Color color)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: 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_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: 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_0047: Expected O, but got Unknown
SpawnableCrateReference portalImpactReference = PortalCrateReferences.PortalImpactReference;
Spawnable val = new Spawnable
{
crateRef = portalImpactReference,
policyData = null
};
AssetSpawner.Register(val);
UniTask<Poolee> val2 = AssetSpawner.SpawnAsync(val, position, rotation, new Nullable<Vector3>(Vector3.one), (Transform)null, false, new Nullable<int>(0), (Action<GameObject>)null, (Action<GameObject>)null, (Action<GameObject>)null);
Awaiter<Poolee> awaiter = val2.GetAwaiter();
Action action = delegate
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
Poolee result = awaiter.GetResult();
if ((Object)(object)result == (Object)null)
{
return;
}
foreach (ParticleSystem componentsInChild in ((Component)result).GetComponentsInChildren<ParticleSystem>())
{
componentsInChild.startColor = color;
componentsInChild.Clear();
componentsInChild.Play();
}
};
awaiter.OnCompleted(Action.op_Implicit(action));
}
}
public static class PortalSpawner
{
public class PortalSpawnInfo
{
public Vector3 Position { get; set; } = Vector3.zero;
public Quaternion Rotation { get; set; } = Quaternion.identity;
public Vector2 Size { get; set; } = PortalConstants.DefaultSize;
public PortalShape Shape { get; set; } = PortalShape.ELLIPSE;
public bool Primary { get; set; } = true;
public int? ID { get; set; }
public bool OneSided { get; set; } = true;
public Action<Portal> SpawnCallback { get; set; }
}
public class PortalFizzleInfo
{
public bool Primary { get; set; }
public bool Secondary { get; set; }
public int ID { get; set; }
}
public class PortalPair
{
public Portal PrimaryPortal { get; set; }
public Portal SecondaryPortal { get; set; }
}
public static readonly Dictionary<int, PortalPair> PortalLookup = new Dictionary<int, PortalPair>();
public static bool Fizzle(PortalFizzleInfo info)
{
if (!PortalLookup.TryGetValue(info.ID, out var value))
{
return false;
}
bool result = false;
if (info.Primary && Object.op_Implicit((Object)(object)value.PrimaryPortal))
{
value.PrimaryPortal.Fizzle();
result = true;
}
if (info.Secondary && Object.op_Implicit((Object)(object)value.SecondaryPortal))
{
value.SecondaryPortal.Fizzle();
result = true;
}
PortalLookup.Remove(info.ID);
return result;
}
public static void Spawn(PortalSpawnInfo info)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: 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_00ac: Expected O, but got Unknown
//IL_00b4: 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_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: 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_0104: Expected O, but got Unknown
if (info.ID.HasValue && PortalLookup.TryGetValue(info.ID.Value, out var value))
{
Portal portal = (info.Primary ? value.PrimaryPortal : value.SecondaryPortal);
if ((Object)(object)portal != (Object)null)
{
portal.Close();
}
}
SpawnableCrateReference val = ((info.Shape != 0) ? PortalCrateReferences.PortalEllipseReference : PortalCrateReferences.PortalPlaneReference);
SpawnableCrateReference crateRef = val;
Spawnable val2 = new Spawnable
{
crateRef = crateRef,
policyData = null
};
AssetSpawner.Register(val2);
Vector3 val3 = default(Vector3);
((Vector3)(ref val3))..ctor(info.Size.x, info.Size.y, 1f);
UniTask<Poolee> val4 = AssetSpawner.SpawnAsync(val2, info.Position, info.Rotation, new Nullable<Vector3>(val3), (Transform)null, false, new Nullable<int>(0), (Action<GameObject>)null, (Action<GameObject>)null, (Action<GameObject>)null);
Awaiter<Poolee> awaiter = val4.GetAwaiter();
Action action = delegate
{
Poolee result = awaiter.GetResult();
if (!((Object)(object)result == (Object)null))
{
Portal componentInChildren = ((Component)result).GetComponentInChildren<Portal>();
componentInChildren.Primary = info.Primary;
componentInChildren.OneSided = info.OneSided;
if (info.ID.HasValue)
{
componentInChildren.ID = info.ID.Value;
if (!PortalLookup.TryGetValue(info.ID.Value, out var value2))
{
value2 = new PortalPair();
}
if (info.Primary)
{
value2.PrimaryPortal = componentInChildren;
}
else
{
value2.SecondaryPortal = componentInChildren;
}
PortalLookup[info.ID.Value] = value2;
if (Object.op_Implicit((Object)(object)value2.PrimaryPortal) && Object.op_Implicit((Object)(object)value2.SecondaryPortal))
{
value2.PrimaryPortal.OtherPortal = value2.SecondaryPortal;
value2.SecondaryPortal.OtherPortal = value2.PrimaryPortal;
}
}
info.SpawnCallback?.Invoke(componentInChildren);
}
};
awaiter.OnCompleted(Action.op_Implicit(action));
}
}
}
namespace Portals.Patching
{
[HarmonyPatch(typeof(Constrainer))]
public static class ConstrainerPatches
{
[HarmonyPostfix]
[HarmonyPatch("PrimaryButtonUp")]
public static void PrimaryButtonUp(Constrainer __instance)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Invalid comparison between Unknown and I4
if ((int)__instance.mode == 6 || (Object)(object)__instance._gO1 == (Object)null)
{
return;
}
MarrowBody mb = __instance._mb1;
MarrowBody mb2 = __instance._mb2;
if (!((Object)(object)mb == (Object)null) && !((Object)(object)mb2 == (Object)null))
{
TeleportableBody component = ((Component)mb).GetComponent<TeleportableBody>();
TeleportableBody component2 = ((Component)mb2).GetComponent<TeleportableBody>();
if (!((Object)(object)component == (Object)null) && !((Object)(object)component2 == (Object)null))
{
component2.Pack(component);
}
}
}
}
[HarmonyPatch(typeof(ConstraintTracker))]
public static class ConstraintTrackerPatches
{
[HarmonyPrefix]
[HarmonyPatch("DeleteConstraint")]
public static void DeleteConstraint(ConstraintTracker __instance)
{
TeleportableBody component = ((Component)__instance).GetComponent<TeleportableBody>();
if (!((Object)(object)component == (Object)null))
{
component.Unpack();
}
}
}
[HarmonyPatch(typeof(MarrowEntity))]
public static class MarrowEntityPatches
{
[HarmonyPostfix]
[HarmonyPatch("Awake")]
public static void Awake(MarrowEntity __instance)
{
RigManager componentInParent = ((Component)__instance).GetComponentInParent<RigManager>();
if ((Object)(object)componentInParent != (Object)null)
{
if ((Object)(object)__instance == (Object)(object)componentInParent.physicsRig.marrowEntity)
{
((Component)componentInParent).gameObject.AddComponent<TeleportableRigManager>();
}
}
else if (Object.op_Implicit((Object)(object)((Component)__instance).GetComponentInChildren<PuppetMaster>()))
{
((Component)__instance).gameObject.AddComponent<TeleportablePuppetMaster>();
}
else
{
((Component)__instance).gameObject.AddComponent<TeleportableEntity>();
}
}
[HarmonyPrefix]
[HarmonyPatch("Pack")]
public static void Pack(MarrowBody hostBody, MarrowBody parasiteBody)
{
TeleportableBody component = ((Component)hostBody).GetComponent<TeleportableBody>();
if (!((Object)(object)component == (Object)null))
{
TeleportableBody component2 = ((Component)parasiteBody).GetComponent<TeleportableBody>();
if (!((Object)(object)component2 == (Object)null))
{
component2.Pack(component);
}
}
}
[HarmonyPrefix]
[HarmonyPatch("Unpack")]
public static void Unpack(MarrowBody hostBody, MarrowBody parasiteBody)
{
TeleportableBody component = ((Component)parasiteBody).GetComponent<TeleportableBody>();
if (!((Object)(object)component == (Object)null))
{
component.Unpack();
}
}
}
[HarmonyPatch(typeof(OpenControllerRig))]
public static class OpenControllerRigPatches
{
[HarmonyPostfix]
[HarmonyPatch("OnMarrowReady")]
private static void OnMarrowReady()
{
RenderingHooks.HookRenderPipeline();
}
}
[HarmonyPatch(typeof(Projectile))]
public static class ProjectilePatches
{
public static bool TeleportOnUpdate { get; set; }
public static Portal TargetInPortal { get; set; }
public static Portal TargetOutPortal { get; set; }
[HarmonyPrefix]
[HarmonyPatch("SetBulletObject")]
public static void SetBulletObjectPrefix(Projectile __instance, ProjectileData data, Transform startTransform, Vector3 locPos, Quaternion locRot, Rigidbody EmittingRigidbody, TriggerRefProxy proxy)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)data == (Object)null)
{
return;
}
Gun componentInParent = ((Component)startTransform).GetComponentInParent<Gun>();
if ((Object)(object)componentInParent == (Object)null)
{
return;
}
TeleportableEntity component = ((Component)componentInParent).GetComponent<TeleportableEntity>();
if (!((Object)(object)component == (Object)null) && component.HasPortals)
{
float portalSign = component.GetPortalSign(component.InPortal, startTransform.position);
if (component.PassedThrough(component.EnterSign, portalSign))
{
TeleportOnUpdate = true;
TargetInPortal = component.InPortal;
TargetOutPortal = component.OutPortal;
}
}
}
[HarmonyPrefix]
[HarmonyPatch("Update")]
public static void UpdatePrefix(Projectile __instance)
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: 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)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
if (TeleportOnUpdate)
{
TeleportOnUpdate = false;
Teleport(__instance, TargetInPortal, TargetOutPortal);
TargetInPortal = null;
TargetOutPortal = null;
return;
}
Vector3 position = ((Component)__instance).transform.position;
Vector3 val = ((Component)__instance).transform.position + __instance._direction * __instance.currentSpeed * Time.deltaTime;
RaycastHit val2 = default(RaycastHit);
if (Physics.Linecast(position, val, ref val2, 262144, (QueryTriggerInteraction)2) && ((RaycastHit)(ref val2)).collider.isTrigger)
{
Portal componentInParent = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<Portal>();
if ((Object)(object)componentInParent != (Object)null && (Object)(object)componentInParent.OtherPortal != (Object)null)
{
Teleport(__instance, componentInParent, componentInParent.OtherPortal);
}
}
}
private static void Teleport(Projectile projectile, Portal inPortal, Portal outPortal)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: 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_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: 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_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: 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_00ba: 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_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: 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)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: 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_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
Matrix4x4 portalEnterMatrix = inPortal.PortalEnterMatrix;
Matrix4x4 portalExitMatrix = outPortal.PortalExitMatrix;
Matrix4x4 val = Matrix4x4.TRS(((Component)projectile).transform.position, Quaternion.LookRotation(projectile._direction), Vector3.one);
Matrix4x4 val2 = ((Matrix4x4)(ref portalEnterMatrix)).inverse * val;
Vector3 val3 = ((Matrix4x4)(ref val2)).GetPosition();
Vector3 val4 = ((Matrix4x4)(ref val2)).rotation * Vector3.forward;
Plane val5 = default(Plane);
((Plane)(ref val5))..ctor(Vector3.forward, Vector3.zero);
Ray val6 = default(Ray);
((Ray)(ref val6))..ctor(val3, val4 * Mathf.Sign(val3.z));
float num = default(float);
if (((Plane)(ref val5)).Raycast(val6, ref num))
{
val3 += ((Ray)(ref val6)).direction * num;
}
val2 = Matrix4x4.TRS(val3, ((Matrix4x4)(ref val2)).rotation, ((Matrix4x4)(ref val2)).lossyScale);
val = portalExitMatrix * val2;
((Component)projectile).transform.position = ((Matrix4x4)(ref val)).GetPosition();
projectile._direction = ((Matrix4x4)(ref val)).rotation * Vector3.forward;
Vector3 lossyScale = ((Matrix4x4)(ref val)).lossyScale;
projectile.Mass *= lossyScale.x * lossyScale.y * lossyScale.z;
projectile.currentSpeed *= lossyScale.z;
projectile.trail.Clear();
}
}
}
namespace Portals.MonoBehaviours
{
[RegisterTypeInIl2Cpp]
public class CloneRenderer : MonoBehaviour
{
private Transform _cloneTransform;
private Transform _originalTransform;
private List<SkinnedMeshRenderer> _originalSkinnedRenderers = new List<SkinnedMeshRenderer>();
private Dictionary<SkinnedMeshRenderer, MeshRenderer> _skinnedToCloneRenderer = new Dictionary<SkinnedMeshRenderer, MeshRenderer>();
private Dictionary<SkinnedMeshRenderer, MeshFilter> _skinnedToCloneFilter = new Dictionary<SkinnedMeshRenderer, MeshFilter>();
private List<MeshRenderer> _originalMeshRenderers = new List<MeshRenderer>();
private Dictionary<MeshRenderer, MeshRenderer> _originalToCloneMeshRenderer = new Dictionary<MeshRenderer, MeshRenderer>();
public Transform CloneTransform => _cloneTransform;
public Transform OriginalTransform => _originalTransform;
public void Initialize(GameObject original)
{
_cloneTransform = ((Component)this).transform;
_originalTransform = original.transform;
GetRenderers(((Component)this).transform, original.transform);
}
private void GetRenderers(Transform clone, Transform original)
{
if (!Object.op_Implicit((Object)(object)((Component)original).GetComponentInChildren<Renderer>(true)))
{
Object.Destroy((Object)(object)((Component)clone).gameObject);
return;
}
string name = ((Object)original).name;
int num = name.LastIndexOf("_LOD");
if (num != -1)
{
int num2 = num + 4;
string text = name;
int num3 = num2;
if (int.TryParse(text.Substring(num3, text.Length - num3), out var result) && result > 0)
{
return;
}
}
MeshFilter component = ((Component)original).GetComponent<MeshFilter>();
MeshRenderer component2 = ((Component)original).GetComponent<MeshRenderer>();
try
{
if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2))
{
CopyMeshRenderer(clone, component2, component);
}
}
catch
{
}
SkinnedMeshRenderer component3 = ((Component)original).GetComponent<SkinnedMeshRenderer>();
try
{
if (Object.op_Implicit((Object)(object)component3))
{
CopySkinnedMeshRenderer(clone, component3);
}
}
catch
{
}
for (int i = 0; i < clone.childCount; i++)
{
Transform child = clone.GetChild(i);
Transform child2 = original.GetChild(i);
((Component)child).gameObject.SetActive(true);
GetRenderers(child, child2);
}
}
private void CopyMeshRenderer(Transform clone, MeshRenderer renderer, MeshFilter filter)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
if (!IsMaterialBlacklisted(((Renderer)renderer).sharedMaterial))
{
((Component)clone).gameObject.AddComponent<MeshFilter>().sharedMesh = filter.sharedMesh;
MeshRenderer val = ((Component)clone).gameObject.AddComponent<MeshRenderer>();
((Renderer)val).shadowCastingMode = ((Renderer)renderer).shadowCastingMode;
((Renderer)val).sharedMaterials = ((Renderer)renderer).sharedMaterials;
((Renderer)val).enabled = ((Renderer)renderer).enabled;
_originalMeshRenderers.Add(renderer);
_originalToCloneMeshRenderer[renderer] = val;
}
}
private void CopySkinnedMeshRenderer(Transform clone, SkinnedMeshRenderer renderer)
{
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
if (!IsMaterialBlacklisted(((Renderer)renderer).sharedMaterial))
{
MeshFilter val = ((Component)clone).gameObject.AddComponent<MeshFilter>();
MeshRenderer val2 = ((Component)clone).gameObject.AddComponent<MeshRenderer>();
((Renderer)val2).sharedMaterials = ((Renderer)renderer).sharedMaterials;
((Renderer)val2).enabled = ((Renderer)renderer).enabled;
((Renderer)val2).shadowCastingMode = ((Renderer)renderer).shadowCastingMode;
val.sharedMesh = new Mesh();
_originalSkinnedRenderers.Add(renderer);
_skinnedToCloneFilter[renderer] = val;
_skinnedToCloneRenderer[renderer] = val2;
}
}
private static bool IsMaterialBlacklisted(Material material)
{
if ((Object)(object)material == (Object)null)
{
return false;
}
if (((Object)material.shader).name == "SLZ/Icon Billboard")
{
return true;
}
return false;
}
public void Show()
{
((Component)this).gameObject.SetActive(true);
}
public void Hide()
{
((Component)this).gameObject.SetActive(false);
}
public void OnCloneUpdate()
{
OnUpdateMeshRenderers();
OnUpdateSkinnedRenderers();
}
private void OnUpdateMeshRenderers()
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
foreach (MeshRenderer originalMeshRenderer in _originalMeshRenderers)
{
if (!((Object)(object)originalMeshRenderer == (Object)null))
{
MeshRenderer val = _originalToCloneMeshRenderer[originalMeshRenderer];
if (CheckActive((Renderer)(object)val, (Renderer)(object)originalMeshRenderer))
{
((Renderer)val).shadowCastingMode = ((Renderer)originalMeshRenderer).shadowCastingMode;
((Renderer)val).sharedMaterials = ((Renderer)originalMeshRenderer).sharedMaterials;
Transform transform = ((Component)val).transform;
Transform transform2 = ((Component)originalMeshRenderer).transform;
Vector3 val2 = _cloneTransform.TransformPoint(_originalTransform.InverseTransformPoint(transform2.position));
Quaternion val3 = _cloneTransform.rotation * (Quaternion.Inverse(_originalTransform.rotation) * transform2.rotation);
transform.SetPositionAndRotation(val2, val3);
}
}
}
}
private void OnUpdateSkinnedRenderers()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
foreach (SkinnedMeshRenderer originalSkinnedRenderer in _originalSkinnedRenderers)
{
if (!((Object)(object)originalSkinnedRenderer == (Object)null))
{
MeshRenderer val = _skinnedToCloneRenderer[originalSkinnedRenderer];
if (CheckActive((Renderer)(object)val, (Renderer)(object)originalSkinnedRenderer))
{
MeshFilter val2 = _skinnedToCloneFilter[originalSkinnedRenderer];
((Renderer)val).shadowCastingMode = ((Renderer)originalSkinnedRenderer).shadowCastingMode;
((Renderer)val).sharedMaterials = ((Renderer)originalSkinnedRenderer).sharedMaterials;
Transform transform = ((Component)val2).transform;
Transform transform2 = ((Component)originalSkinnedRenderer).transform;
Vector3 val3 = _cloneTransform.TransformPoint(_originalTransform.InverseTransformPoint(transform2.position));
Quaternion val4 = _cloneTransform.rotation * (Quaternion.Inverse(_originalTransform.rotation) * transform2.rotation);
transform.SetPositionAndRotation(val3, val4);
originalSkinnedRenderer.BakeMesh(val2.mesh, true);
}
}
}
}
private bool CheckActive(Renderer clone, Renderer original)
{
if (!((Component)original).gameObject.activeInHierarchy)
{
clone.enabled = false;
return false;
}
if (!original.enabled)
{
clone.enabled = false;
return false;
}
clone.enabled = true;
return true;
}
}
[RegisterTypeInIl2Cpp]
public class Portal : MonoBehaviour
{
public Il2CppReferenceField<MonoBehaviour> otherPortal;
public Il2CppReferenceField<MonoBehaviour> surface;
public Il2CppReferenceField<MonoBehaviour> expander;
public Il2CppValueField<Vector2> size;
private Portal _otherPortal;
private PortalSurface _surface;
private PortalExpander _expander;
private Vector2 _size = Vector2.zero;
private Matrix4x4 _cachedEnterMatrix = Matrix4x4.identity;
private Matrix4x4 _cachedEnterMatrixInverse = Matrix4x4.identity;
private Matrix4x4 _cachedExitMatrix = Matrix4x4.identity;
private Matrix4x4 _cachedExitMatrixInverse = Matrix4x4.identity;
private PortalCamera _leftEyeCamera;
private PortalCamera _rightEyeCamera;
private PortalNearPlane _leftEyeNearPlane;
private PortalNearPlane _rightEyeNearPlane;
[HideFromIl2Cpp]
public Portal OtherPortal
{
get
{
return _otherPortal;
}
set
{
bool flag = (Object)(object)OtherPortal != (Object)null;
_otherPortal = value;
bool flag2 = (Object)(object)value != (Object)null;
Surface.Open = flag2;
if (!flag2 && flag)
{
this.OnClosedEvent?.Invoke();
}
}
}
[HideFromIl2Cpp]
public PortalSurface Surface => _surface;
[HideFromIl2Cpp]
public PortalExpander Expander => _expander;
[HideFromIl2Cpp]
public Vector2 Size => _size;
[HideFromIl2Cpp]
public Matrix4x4 PortalEnterMatrix => _cachedEnterMatrix;
[HideFromIl2Cpp]
public Matrix4x4 PortalEnterMatrixInverse => _cachedEnterMatrixInverse;
[HideFromIl2Cpp]
public Matrix4x4 PortalExitMatrix => _cachedExitMatrix;
[HideFromIl2Cpp]
public Matrix4x4 PortalExitMatrixInverse => _cachedExitMatrixInverse;
[HideFromIl2Cpp]
public Vector3 Velocity
{
get
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)ParentBody) || !ParentBody.HasRigidbody)
{
return Vector3.zero;
}
return ParentBody._rigidbody.GetPointVelocity(((Component)this).transform.position);
}
}
[HideFromIl2Cpp]
public Vector3 AngularVelocity
{
get
{
//IL_001a: 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)
if (!Object.op_Implicit((Object)(object)ParentBody) || !ParentBody.HasRigidbody)
{
return Vector3.zero;
}
return ParentBody._rigidbody.angularVelocity;
}
}
[HideFromIl2Cpp]
public List<Collider> WallColliders { get; set; } = new List<Collider>();
[HideFromIl2Cpp]
public AudioClip[] FizzleSounds { get; set; }
[HideFromIl2Cpp]
public Poolee Poolee { get; set; }
[HideFromIl2Cpp]
public MarrowBody ParentBody { get; set; }
[HideFromIl2Cpp]
public int? ID { get; set; }
[HideFromIl2Cpp]
public bool Primary { get; set; }
[HideFromIl2Cpp]
public bool OneSided { get; set; } = true;
[HideFromIl2Cpp]
public event Action OnClosedEvent;
public Portal(IntPtr intPtr)
: base(intPtr)
{
}//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: 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_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: 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)
private void Awake()
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
MonoBehaviour val = otherPortal.Get();
if ((Object)(object)val != (Object)null)
{
OtherPortal = ((Il2CppObjectBase)val).TryCast<Portal>();
}
_surface = ((Il2CppObjectBase)surface.Get()).TryCast<PortalSurface>();
_expander = ((Il2CppObjectBase)expander.Get()).TryCast<PortalExpander>();
_size = size.Get();
Expander.ToggleCollision(enabled: false);
}
private void Start()
{
foreach (Collider componentsInChild in ((Component)this).GetComponentsInChildren<Collider>())
{
if (componentsInChild.isTrigger)
{
((Component)componentsInChild).gameObject.layer = 18;
}
}
_leftEyeCamera = new PortalCamera(this, (StereoscopicEye)0);
_rightEyeCamera = new PortalCamera(this, (StereoscopicEye)1);
_leftEyeNearPlane = new PortalNearPlane(Surface.AlwaysVisibleShader);
_rightEyeNearPlane = new PortalNearPlane(Surface.AlwaysVisibleShader);
_leftEyeNearPlane.Material.SetFloat(PortalShaderConstants.TargetEyeID, 0f);
_rightEyeNearPlane.Material.SetFloat(PortalShaderConstants.TargetEyeID, 1f);
_leftEyeCamera.OnTargetTextureChanged += OnLeftEyeTextureChanged;
_rightEyeCamera.OnTargetTextureChanged += OnRightEyeTextureChanged;
OnLeftEyeTextureChanged(_leftEyeCamera.TargetTexture);
OnRightEyeTextureChanged(_rightEyeCamera.TargetTexture);
Surface.CorridorRenderer.enabled = false;
RenderingHooks.PreBeginCameraRendering += OnPreBeginCameraRendering;
RenderingHooks.BeginCameraRendering += OnBeginCameraRendering;
Poolee = ((Component)this).GetComponentInParent<Poolee>();
}
public void CollectWallColliders()
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: 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_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: 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)
WallColliders.Clear();
if ((Object)(object)ParentBody != (Object)null)
{
foreach (Collider item in (Il2CppArrayBase<Collider>)(object)ParentBody.Colliders)
{
if ((Object)(object)item != (Object)null)
{
WallColliders.Add(item);
}
}
return;
}
Vector3 position = ((Component)this).transform.position;
Quaternion rotation = ((Component)this).transform.rotation;
Vector3 lossyScale = ((Component)this).transform.lossyScale;
Vector2 val = default(Vector2);
((Vector2)(ref val))..ctor(Size.x * lossyScale.x, Size.y * lossyScale.y);
foreach (Collider item2 in (Il2CppArrayBase<Collider>)(object)Physics.OverlapBox(position, new Vector3(val.x * 0.5f, val.y * 0.5f, 2f), rotation, LayerMask.op_Implicit(PortalConstants.HitMask), (QueryTriggerInteraction)1))
{
if (!Object.op_Implicit((Object)(object)item2.attachedRigidbody) && !Object.op_Implicit((Object)(object)((Component)item2).GetComponentInParent<Portal>()))
{
WallColliders.Add(item2);
}
}
}
private void LateUpdate()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: 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_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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_002c: 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_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: 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_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = ((Component)this).transform.position;
Quaternion rotation = ((Component)this).transform.rotation;
Vector3 flatScale = GetFlatScale(((Component)this).transform.lossyScale);
_cachedEnterMatrix = Matrix4x4.TRS(position, rotation, flatScale);
_cachedEnterMatrixInverse = ((Matrix4x4)(ref _cachedEnterMatrix)).inverse;
_cachedExitMatrix = Matrix4x4.TRS(position, Quaternion.AngleAxis(180f, ((Component)this).transform.up) * rotation, flatScale);
_cachedExitMatrixInverse = ((Matrix4x4)(ref _cachedExitMatrix)).inverse;
}
private void OnLeftEyeTextureChanged(RenderTexture texture)
{
Surface.SurfaceMaterial.SetTexture(PortalShaderConstants.LeftEyeTextureID, (Texture)(object)texture);
_leftEyeNearPlane.Material.SetTexture(PortalShaderConstants.MainTextureID, (Texture)(object)texture);
}
private void OnRightEyeTextureChanged(RenderTexture texture)
{
Surface.SurfaceMaterial.SetTexture(PortalShaderConstants.RightEyeTextureID, (Texture)(object)texture);
_rightEyeNearPlane.Material.SetTexture(PortalShaderConstants.MainTextureID, (Texture)(object)texture);
}
private void OnDisable()
{
if (Object.op_Implicit((Object)(object)OtherPortal))
{
OtherPortal.OtherPortal = null;
OtherPortal = null;
}
Expander.ToggleCollision(enabled: false);
FizzleSounds = null;
}
public void Close()
{
OtherPortal = null;
Poolee.Despawn();
}
public void Fizzle()
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
OtherPortal = null;
if (FizzleSounds != null)
{
Audio3dManager.PlayAtPoint(Il2CppReferenceArray<AudioClip>.op_Implicit(FizzleSounds), ((Component)this).transform.position, Audio3dManager.hardInteraction, 0.6f, 1f, new Nullable<float>(0f), new Nullable<float>(0.4f), new Nullable<float>(1f));
}
Poolee.Despawn();
}
private void OnDestroy()
{
_leftEyeNearPlane.Destroy();
_rightEyeNearPlane.Destroy();
_leftEyeCamera.Destroy();
_rightEyeCamera.Destroy();
RenderingHooks.PreBeginCameraRendering -= OnPreBeginCameraRendering;
RenderingHooks.BeginCameraRendering -= OnBeginCameraRendering;
}
private Vector3 GetFlatScale(Vector3 scale)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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)
scale.z = Math.Min(scale.x, scale.y);
return scale;
}
public bool HasCamera(Camera cam)
{
if (!((Object)(object)cam == (Object)(object)_leftEyeCamera.Camera))
{
return (Object)(object)cam == (Object)(object)_rightEyeCamera.Camera;
}
return true;
}
private void OnPreBeginCameraRendering(ScriptableRenderContext context, Camera camera)
{
_leftEyeNearPlane.Hide();
_rightEyeNearPlane.Hide();
Surface.CorridorRenderer.enabled = false;
Surface.FrontRenderer.enabled = true;
Surface.BackRenderer.enabled = !OneSided;
}
private void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera)
{
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: 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)
//IL_00be: 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)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: 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_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
if (!PortalPreferences.RenderView)
{
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.OpenID, 0f);
}
else
{
if (!Object.op_Implicit((Object)(object)OtherPortal) || HasCamera(camera) || OtherPortal.HasCamera(camera) || Object.op_Implicit((Object)(object)camera.targetTexture) || camera.orthographic || ((Object)(object)Surface.FrontRenderer != (Object)null && !Surface.FrontRenderer.isVisible && !Surface.BackRenderer.isVisible))
{
return;
}
float num = 1f;
if (PortalPreferences.LimitDistance)
{
Vector3 lossyScale = ((Component)this).transform.lossyScale;
Vector2 val = default(Vector2);
((Vector2)(ref val))..ctor(lossyScale.x * Size.x, lossyScale.y * Size.y);
float num2 = Math.Max(val.x, val.y);
Vector3 val2 = ((Component)camera).transform.position - ((Component)this).transform.position;
float magnitude = ((Vector3)(ref val2)).magnitude;
num = 1f - Math.Clamp(Math.Max(0f, magnitude - num2) / Math.Max(num2, (float)PortalPreferences.RenderDistance - num2), 0f, 1f);
if (num <= 0f)
{
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.OpenID, 0f);
return;
}
}
int maxRecursion = PortalPreferences.MaxRecursion;
int num3 = maxRecursion - 1;
float num4 = num * Surface.OpenPercent;
for (int num5 = num3; num5 >= 0; num5--)
{
float num6 = 0f;
if (maxRecursion > 1)
{
num6 = num4 * (1f - Math.Clamp((float)num5 / (float)num3, 0f, 1f));
}
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.OpenID, num6);
ApplyPosition(context, camera, num5);
}
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.OpenID, num4);
DrawClippingPlane(camera);
}
}
private void ApplyPosition(ScriptableRenderContext context, Camera mainCamera, int iteration = 0)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: 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_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: 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)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: 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_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_0289: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Unknown result type (might be due to invalid IL or missing references)
//IL_0290: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_02aa: 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)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: 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_010f: 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_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: 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_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: 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_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0222: Unknown result type (might be due to invalid IL or missing references)
Transform transform = ((Component)mainCamera).transform;
Transform transform2 = ((Component)OtherPortal).transform;
Vector3 val = transform.position;
Quaternion val2 = transform.rotation;
for (int i = 0; i <= iteration; i++)
{
Matrix4x4 val3 = OtherPortal.PortalExitMatrix;
Matrix4x4 portalEnterMatrixInverse = PortalEnterMatrixInverse;
val = ((Matrix4x4)(ref val3)).MultiplyPoint3x4(((Matrix4x4)(ref portalEnterMatrixInverse)).MultiplyPoint3x4(val));
val3 = OtherPortal.PortalExitMatrix;
Quaternion rotation = ((Matrix4x4)(ref val3)).rotation;
val3 = PortalEnterMatrixInverse;
val2 = rotation * (((Matrix4x4)(ref val3)).rotation * val2);
}
float num = Math.Sign(Vector3.Dot(transform2.forward, transform2.position - val));
if (IsVR(mainCamera))
{
CopyValues(mainCamera, _leftEyeCamera.Camera);
CopyValues(mainCamera, _rightEyeCamera.Camera);
Surface.SurfaceMaterial.SetInt(PortalShaderConstants.ForceEyeID, 1);
(Vector3 left, Vector3 right) eyes = GetEyes();
Vector3 item = eyes.left;
Vector3 item2 = eyes.right;
Vector3 val4 = CalculateScaleDifference(PortalEnterMatrix, OtherPortal.PortalExitMatrix);
Matrix4x4 val5 = Matrix4x4.TRS(val, val2, Vector4.op_Implicit(Matrix4x4.Inverse(Matrix4x4.Scale(val4)) * Vector4.op_Implicit(transform.lossyScale)));
Vector3 val6 = ((Matrix4x4)(ref val5)).MultiplyPoint(item);
Vector3 val7 = ((Matrix4x4)(ref val5)).MultiplyPoint(item2);
_leftEyeCamera.Transform.SetPositionAndRotation(val6, val2);
_leftEyeCamera.Camera.projectionMatrix = CalculateEyeProjectionMatrix(mainCamera, (StereoscopicEye)0, num, transform2, _leftEyeCamera.Transform, _leftEyeCamera.Camera);
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.EyeOverrideID, 0f);
_leftEyeCamera.RenderCamera(context);
_rightEyeCamera.Transform.SetPositionAndRotation(val7, val2);
_rightEyeCamera.Camera.projectionMatrix = CalculateEyeProjectionMatrix(mainCamera, (StereoscopicEye)1, num, transform2, _rightEyeCamera.Transform, _rightEyeCamera.Camera);
Surface.SurfaceMaterial.SetFloat(PortalShaderConstants.EyeOverrideID, 1f);
_rightEyeCamera.RenderCamera(context);
Surface.SurfaceMaterial.SetInt(PortalShaderConstants.ForceEyeID, 0);
}
else
{
CopyValues(mainCamera, _leftEyeCamera.Camera);
_leftEyeCamera.Transform.SetPositionAndRotation(val, val2);
Vector4 clipPlane = CalculatePortalClipPlane(transform2, _leftEyeCamera.Transform, _leftEyeCamera.Camera, num);
Matrix4x4 projectionMatrix = CalculateObliqueMatrix(mainCamera.projectionMatrix, clipPlane);
_leftEyeCamera.Camera.projectionMatrix = projectionMatrix;
_leftEyeCamera.RenderCamera(context);
}
}
private void CopyValues(Camera from, Camera to)
{
to.nearClipPlane = from.nearClipPlane;
to.farClipPlane = from.farClipPlane;
to.fieldOfView = from.fieldOfView;
to.cullingMask = from.cullingMask;
}
private bool IsVR(Camera camera)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Invalid comparison between Unknown and I4
if (!PortalsMod.IsMockHMD)
{
return (int)camera.stereoTargetEye == 3;
}
return false;
}
private void DrawClippingPlane(Camera camera)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: 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_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: 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_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL