private SteamVR()
        {
            BlackMagic.LoadBlackMagic();
            ClassInjector.RegisterTypeInIl2Cpp <MelonCoroutineCallbacks>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_ActivateActionSetOnLoad>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Boolean>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Single>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Skeleton>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Vector2>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Vector3>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Behaviour_Pose>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Camera>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_CameraFlip>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_CameraMask>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Ears>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_ExternalCamera>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Frustum>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Fade>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_GameView>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_IK>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Overlay>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_PlayArea>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_RenderModel>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Render>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Skeleton_Poser>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_SphericalProjection>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_Skybox>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_TrackingReferenceManager>();
            ClassInjector.RegisterTypeInIl2Cpp <SteamVR_TrackedObject>();
            UnityHooks.Init();


            this.hmd = OpenVR.System;
            UnityEngine.Debug.Log("<b>[SteamVR_Standalone]</b> Initialized. Connected to " + this.hmd_TrackingSystemName + ":" + this.hmd_SerialNumber);
            this.compositor = OpenVR.Compositor;
            this.overlay    = OpenVR.Overlay;
            uint num  = 0u;
            uint num2 = 0u;

            this.hmd.GetRecommendedRenderTargetSize(ref num, ref num2);
            this.sceneWidth  = num;
            this.sceneHeight = num2;
            float num3 = 0f;
            float num4 = 0f;
            float num5 = 0f;
            float num6 = 0f;

            this.hmd.GetProjectionRaw(EVREye.Eye_Left, ref num3, ref num4, ref num5, ref num6);
            float num7  = 0f;
            float num8  = 0f;
            float num9  = 0f;
            float num10 = 0f;

            this.hmd.GetProjectionRaw(EVREye.Eye_Right, ref num7, ref num8, ref num9, ref num10);
            this.tanHalfFov = new Vector2(Mathf.Max(new float[]
            {
                -num3,
                num4,
                -num7,
                num8
            }), Mathf.Max(new float[]
            {
                -num5,
                num6,
                -num9,
                num10
            }));
            this.textureBounds         = new VRTextureBounds_t[2];
            this.textureBounds[0].uMin = 0.5f + 0.5f * num3 / this.tanHalfFov.x;
            this.textureBounds[0].uMax = 0.5f + 0.5f * num4 / this.tanHalfFov.x;
            this.textureBounds[0].vMin = 0.5f - 0.5f * num6 / this.tanHalfFov.y;
            this.textureBounds[0].vMax = 0.5f - 0.5f * num5 / this.tanHalfFov.y;
            this.textureBounds[1].uMin = 0.5f + 0.5f * num7 / this.tanHalfFov.x;
            this.textureBounds[1].uMax = 0.5f + 0.5f * num8 / this.tanHalfFov.x;
            this.textureBounds[1].vMin = 0.5f - 0.5f * num10 / this.tanHalfFov.y;
            this.textureBounds[1].vMax = 0.5f - 0.5f * num9 / this.tanHalfFov.y;
            SteamVR.OpenVRMagic.SetSubmitParams(this.textureBounds[0], this.textureBounds[1], EVRSubmitFlags.Submit_Default);
            this.sceneWidth  /= Mathf.Max(this.textureBounds[0].uMax - this.textureBounds[0].uMin, this.textureBounds[1].uMax - this.textureBounds[1].uMin);
            this.sceneHeight /= Mathf.Max(this.textureBounds[0].vMax - this.textureBounds[0].vMin, this.textureBounds[1].vMax - this.textureBounds[1].vMin);
            this.aspect       = this.tanHalfFov.x / this.tanHalfFov.y;
            this.fieldOfView  = 2f * Mathf.Atan(this.tanHalfFov.y) * 57.29578f;
            this.eyes         = new SteamVR_Utils.RigidTransform[]
            {
                new SteamVR_Utils.RigidTransform(this.hmd.GetEyeToHeadTransform(EVREye.Eye_Left)),
                new SteamVR_Utils.RigidTransform(this.hmd.GetEyeToHeadTransform(EVREye.Eye_Right))
            };
            GraphicsDeviceType graphicsDeviceType = SystemInfo.graphicsDeviceType;

            if (graphicsDeviceType <= GraphicsDeviceType.OpenGLES3)
            {
                if (graphicsDeviceType != GraphicsDeviceType.OpenGLES2 && graphicsDeviceType != GraphicsDeviceType.OpenGLES3)
                {
                    goto IL_3F8;
                }
            }
            else if (graphicsDeviceType != GraphicsDeviceType.OpenGLCore)
            {
                if (graphicsDeviceType == GraphicsDeviceType.Vulkan)
                {
                    this.textureType = ETextureType.Vulkan;
                    goto IL_3FF;
                }
                goto IL_3F8;
            }
            this.textureType = ETextureType.OpenGL;
            goto IL_3FF;
IL_3F8:
            this.textureType = ETextureType.DirectX;
IL_3FF:

            SteamVR_Events.Initializing.Listen((this.OnInitializing));
            SteamVR_Events.Calibrating.Listen((this.OnCalibrating));
            SteamVR_Events.OutOfRange.Listen((this.OnOutOfRange));
            SteamVR_Events.DeviceConnected.Listen((this.OnDeviceConnected));
            SteamVR_Events.NewPoses.Listen((this.OnNewPoses));
        }