Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of FreeCam v1.2.0
Cam.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("McHorse")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+a88a3691928d7785c928e992d700ddbbdf72ef57")] [assembly: AssemblyProduct("Cam")] [assembly: AssemblyTitle("Cam")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Cam { [BepInPlugin("McHorse.FreeCam", "FreeCam", "1.2")] public class FreeCam : BaseUnityPlugin { [HarmonyPatch(typeof(PlayerVisionTarget), "Update")] internal static class PatchPlayerVisionTargetUpdate { [HarmonyPostfix] private static void Postfix(PlayerVisionTarget __instance) { //IL_007c: Unknown result type (might be due to invalid IL or missing references) FreeCam instance = Instance; if (!((Object)(object)instance == (Object)null) && instance.CamDetached) { PlayerAvatar instance2 = PlayerAvatar.instance; if (!((Object)(object)instance2 == (Object)null) && !((Object)(object)((Component)__instance).GetComponent<PlayerAvatar>() != (Object)(object)instance2) && (Object)(object)CameraAim.Instance != (Object)null && (Object)(object)__instance.VisionTransform != (Object)null) { __instance.VisionTransform.rotation = ((Component)CameraAim.Instance).transform.rotation; } } } } private ConfigEntry<KeyCode> _toggleCameraKey = null; private ConfigEntry<KeyCode> _setEyesKey = null; private ConfigEntry<KeyCode> _toggleHUD = null; private ConfigEntry<KeyCode> _screenshot = null; private ConfigEntry<int> _fov = null; private ConfigEntry<float> _moveSpeed = null; private ConfigEntry<float> _lookSensitivity = null; private ConfigEntry<float> _fovSensitivity = null; private ConfigEntry<bool> _resetPosition = null; private ConfigEntry<bool> _smoothingEnabled = null; private ConfigEntry<float> _smoothingFactor = null; private bool _camDetached; private bool _cameraControlActive; private bool _hudVisible; private float _fovOffset; private float _currentMoveSpeed; private Vector3? _lastDetachedPosition; private Quaternion? _lastDetachedRotation; private float _smoothedFov; private Vector3 _targetPosition; private Quaternion _targetRotation; private const float MoveSpeedMin = 0.5f; private const float MoveSpeedMax = 50f; private Camera? _gameCam; private Transform? _cameraParent; private Vector3 _cameraLocalPosition; private Quaternion _cameraLocalRotation; private Vector3 _eyesLookAtPosition; private GameObject? _aimAnchor; internal static FreeCam Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } internal bool CamDetached => _camDetached; private void Awake() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Expected O, but got Unknown //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Expected O, but got Unknown //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; _aimAnchor = new GameObject("FreeCam_AimAnchor"); ((Object)_aimAnchor).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)_aimAnchor); Patch(); _toggleCameraKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "ToggleCam", (KeyCode)122, "Toggle camera view"); _setEyesKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "SetEyes", (KeyCode)118, "Set eyes"); _toggleHUD = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "ToggleHUD", (KeyCode)280, "Toggle HUD"); _screenshot = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Controls", "Screenshot", (KeyCode)281, "Take a screenshot"); _fov = ((BaseUnityPlugin)this).Config.Bind<int>("Options", "FOV", 50, new ConfigDescription("Set FOV", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 180), Array.Empty<object>())); _moveSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "MoveSpeed", 5f, new ConfigDescription("Default free-cam movement speed.", (AcceptableValueBase)null, Array.Empty<object>())); _lookSensitivity = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "LookSensitivity", 2f, new ConfigDescription("Mouse look sensitivity when controlling detached camera.", (AcceptableValueBase)null, Array.Empty<object>())); _fovSensitivity = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "FovSensitivity", 0.5f, new ConfigDescription("Mouse FOV change sensitivity when holding Alt.", (AcceptableValueBase)null, Array.Empty<object>())); _resetPosition = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "ResetPosition", true, new ConfigDescription("When enabled, reset the camera's position and rotation to player's head.", (AcceptableValueBase)null, Array.Empty<object>())); _smoothingEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Smoothing", "Enabled", false, new ConfigDescription("Smooth camera position, rotation and FOV by lerping toward target values.", (AcceptableValueBase)null, Array.Empty<object>())); _smoothingFactor = ((BaseUnityPlugin)this).Config.Bind<float>("Smoothing", "SmoothingFactor", 0.2f, new ConfigDescription("Lerp factor per frame (higher = snappier, lower = smoother).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 1f), Array.Empty<object>())); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_001a: 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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { //IL_0559: Unknown result type (might be due to invalid IL or missing references) //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_050c: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_04cb: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04f9: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: 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_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0257: 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_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03aa: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_0403: Unknown result type (might be due to invalid IL or missing references) //IL_0413: 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_0421: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Unknown result type (might be due to invalid IL or missing references) if (_camDetached) { DriveThirdPersonAvatar(); float num = Mathf.Clamp((float)_fov.Value + _fovOffset, 5f, 120f); bool value = _smoothingEnabled.Value; _smoothedFov = (value ? Mathf.Lerp(_smoothedFov, num, _smoothingFactor.Value) : num); CameraZoom.Instance.OverrideZoomSet(_smoothedFov, 0.1f, 2000f, 2000f, ((Component)this).gameObject, 0); if (Input.GetMouseButtonDown(2) && (Object)(object)_gameCam != (Object)null) { _cameraControlActive = !_cameraControlActive; if (_cameraControlActive) { _targetPosition = ((Component)_gameCam).transform.position; _targetRotation = ((Component)_gameCam).transform.rotation; } } if (_cameraControlActive && (Object)(object)_gameCam != (Object)null) { GameDirector instance = GameDirector.instance; if (instance != null) { instance.SetDisableInput(0.1f); } float axis = Input.GetAxis("Mouse ScrollWheel"); if (axis != 0f) { _currentMoveSpeed += axis * 10f; _currentMoveSpeed = Mathf.Clamp(_currentMoveSpeed, 0.5f, 50f); } Transform transform = ((Component)_gameCam).transform; float unscaledDeltaTime = Time.unscaledDeltaTime; if (Input.GetKey((KeyCode)119)) { _targetPosition += _targetRotation * Vector3.forward * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)115)) { _targetPosition -= _targetRotation * Vector3.forward * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)100)) { _targetPosition += _targetRotation * Vector3.right * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)97)) { _targetPosition -= _targetRotation * Vector3.right * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)304)) { _targetPosition += Vector3.up * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)306)) { _targetPosition -= Vector3.up * (_currentMoveSpeed * unscaledDeltaTime); } if (Input.GetKey((KeyCode)308)) { _fovOffset -= Input.GetAxis("Mouse Y") * _fovSensitivity.Value; } else { float num2 = Input.GetAxis("Mouse X") * _lookSensitivity.Value; float num3 = (0f - Input.GetAxis("Mouse Y")) * _lookSensitivity.Value; Vector3 eulerAngles = ((Quaternion)(ref _targetRotation)).eulerAngles; float num4 = eulerAngles.x + num3; if (num4 > 180f) { num4 -= 360f; } num4 = Mathf.Clamp(num4, -89f, 89f); _targetRotation = Quaternion.Euler(num4, eulerAngles.y + num2, eulerAngles.z); } transform.position = (value ? Vector3.Lerp(transform.position, _targetPosition, _smoothingFactor.Value) : _targetPosition); transform.rotation = (value ? Quaternion.Slerp(transform.rotation, _targetRotation, _smoothingFactor.Value) : _targetRotation); _eyesLookAtPosition = transform.position; } } if (IsInPlayableLevel(out PlayerController playerController)) { if (Input.GetKeyDown(_toggleCameraKey.Value)) { ToggleCameraDetachment(playerController); } if (Input.GetKeyDown(_setEyesKey.Value) && _camDetached) { PlayerAvatar instance2 = PlayerAvatar.instance; PlayerAvatarVisuals val = instance2?.playerAvatarVisuals; if ((Object)(object)val != (Object)null && (Object)(object)instance2?.localCamera != (Object)null && TryGetHit(val.headUpTransform.position, ((Component)instance2.localCamera).transform.forward, out var hit, 200f)) { _eyesLookAtPosition = ((RaycastHit)(ref hit)).point; } } if (Input.GetKeyDown(_toggleHUD.Value)) { GameObject hUDCanvas = GetHUDCanvas(); if ((Object)(object)hUDCanvas != (Object)null) { _hudVisible = !_hudVisible; hUDCanvas.SetActive(_hudVisible); } } } if (!Input.GetKeyDown(_screenshot.Value)) { return; } try { string text = Path.Combine(Paths.BepInExRootPath, "screenshots"); Directory.CreateDirectory(text); string path = $"screenshot_{DateTime.Now:yyyy-MM-dd_HH-mm-ss_fff}.png"; string text2 = Path.Combine(text, path); MenuManager instance3 = MenuManager.instance; if (instance3 != null) { instance3.MenuEffectClick((MenuClickEffectType)0, (MenuPage)null, -1f, -1f, true); } MenuManager instance4 = MenuManager.instance; if (instance4 != null) { instance4.MenuEffectHover(-1f, -1f); } ScreenCapture.CaptureScreenshot(text2); Logger.LogMessage((object)("Screenshot saved: " + text2)); } catch (IOException arg) { Logger.LogError((object)$"Failed to save screenshot: {arg}"); } catch (UnauthorizedAccessException arg2) { Logger.LogError((object)$"Failed to save screenshot: {arg2}"); } catch (ArgumentException arg3) { Logger.LogError((object)$"Failed to save screenshot: {arg3}"); } } public static bool TryGetHit(Vector3 position, Vector3 forward, out RaycastHit hit, float maxDistance = 100f, int layerMask = -5) { //IL_0003: 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_000a: 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) forward = ((Vector3)(ref forward)).normalized; return Physics.Raycast(position, forward, ref hit, maxDistance, layerMask, (QueryTriggerInteraction)1); } private static GameObject? GetHUDCanvas() { GameObject[] array = (from t in Resources.FindObjectsOfTypeAll<Transform>() where ((Object)t).name == "HUD Canvas" select ((Component)t).gameObject).ToArray(); return (array.Length == 0) ? null : array[0]; } private static bool IsInPlayableLevel(out PlayerController playerController) { playerController = null; if (!LevelGenerator.Instance.Generated) { return false; } if (!TryGetLocalPlayerController(out playerController)) { return false; } return true; } private static bool TryGetLocalPlayerController(out PlayerController pc) { pc = null; PlayerController instance = PlayerController.instance; if ((Object)(object)instance != (Object)null && ((Behaviour)instance).isActiveAndEnabled && ((Component)instance).gameObject.activeInHierarchy) { pc = instance; return true; } return false; } private void ToggleCameraDetachment(PlayerController player) { _hudVisible = true; if (!_camDetached) { DetachCamera(player); } else { ReattachCamera(); } } private void DetachCamera(PlayerController player) { //IL_0058: 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_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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //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_014a: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: 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_013d: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) if (!TryGetPlayersViewCamera(player, out Camera cam)) { Logger.LogWarning((object)"ToggleDetachGameplayCamera: Couldn't find player's view camera."); return; } _gameCam = cam; _camDetached = true; _fovOffset = 0f; _smoothedFov = _fov.Value; _targetPosition = ((Component)cam).transform.position; _targetRotation = ((Component)cam).transform.rotation; _currentMoveSpeed = _moveSpeed.Value; _cameraParent = ((Component)cam).transform.parent; _cameraLocalPosition = ((Component)cam).transform.localPosition; _cameraLocalRotation = ((Component)cam).transform.localRotation; ((Component)cam).transform.SetParent((Transform)null, true); if (!_resetPosition.Value && _lastDetachedPosition.HasValue && _lastDetachedRotation.HasValue) { ((Component)cam).transform.position = _lastDetachedPosition.Value; ((Component)cam).transform.rotation = _lastDetachedRotation.Value; _targetPosition = _lastDetachedPosition.Value; _targetRotation = _lastDetachedRotation.Value; } _eyesLookAtPosition = ((Component)cam).transform.position; GameObject? hUDCanvas = GetHUDCanvas(); if (hUDCanvas != null) { hUDCanvas.SetActive(_hudVisible); } ManualLogSource logger = Logger; object arg = ((Component)cam).transform.position; Quaternion rotation = ((Component)cam).transform.rotation; logger.LogMessage((object)$"Camera detached at world pos={arg} rot={((Quaternion)(ref rotation)).eulerAngles}"); } private void ReattachCamera() { //IL_003a: 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_0091: 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) if ((Object)(object)_gameCam == (Object)null) { _camDetached = false; Logger.LogWarning((object)"ToggleDetachGameplayCamera: Missing cached camera; resetting state."); return; } _lastDetachedPosition = ((Component)_gameCam).transform.position; _lastDetachedRotation = ((Component)_gameCam).transform.rotation; Transform transform = ((Component)_gameCam).transform; if ((Object)(object)_cameraParent != (Object)null) { transform.SetParent(_cameraParent, false); transform.localPosition = _cameraLocalPosition; transform.localRotation = _cameraLocalRotation; } else { Logger.LogWarning((object)"ToggleDetachGameplayCamera: Original parent was null/missing; leaving camera unparented."); } _camDetached = false; _cameraControlActive = false; GameObject? hUDCanvas = GetHUDCanvas(); if (hUDCanvas != null) { hUDCanvas.SetActive(true); } Logger.LogMessage((object)"Camera reattached and restored."); } private static bool TryGetPlayersViewCamera(PlayerController player, out Camera cam) { cam = null; Camera componentInChildren = ((Component)player).GetComponentInChildren<Camera>(true); if ((Object)(object)componentInChildren != (Object)null && ((Behaviour)componentInChildren).isActiveAndEnabled && ((Component)componentInChildren).gameObject.activeInHierarchy) { cam = componentInChildren; return true; } if ((Object)(object)Camera.main != (Object)null && ((Behaviour)Camera.main).isActiveAndEnabled && ((Component)Camera.main).gameObject.activeInHierarchy) { cam = Camera.main; return true; } return false; } private void DriveThirdPersonAvatar() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: 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) PlayerAvatar instance = PlayerAvatar.instance; if ((Object)(object)instance == (Object)null) { return; } PlayerAvatarVisuals playerAvatarVisuals = instance.playerAvatarVisuals; if (!((Object)(object)playerAvatarVisuals == (Object)null)) { playerAvatarVisuals.ShowSelfOverride(0.1f); if ((Object)(object)CameraPosition.instance != (Object)null) { CameraPosition.instance.OverridePosition(((Component)instance).transform.position, 0.1f); } if ((Object)(object)PhysGrabber.instance != (Object)null && (Object)(object)_aimAnchor != (Object)null && (Object)(object)CameraAim.Instance != (Object)null) { _aimAnchor.transform.rotation = ((Component)CameraAim.Instance).transform.rotation; PhysGrabber.instance.OverrideAimTransform(_aimAnchor.transform, 0.1f); } if ((Object)(object)playerAvatarVisuals.playerEyes != (Object)null) { playerAvatarVisuals.playerEyes.Override(_eyesLookAtPosition, 0.1f, ((Component)this).gameObject); } } } private void OnDestroy() { if ((Object)(object)_aimAnchor != (Object)null) { Object.Destroy((Object)(object)_aimAnchor); _aimAnchor = null; } } } }