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 PhotoMode v1.4.5
PhotoMode.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using BepInEx; using BepInEx.Configuration; using On.RoR2; using On.RoR2.UI; using Rewired; using RoR2; using RoR2.UI; using RoR2.UI.SkinControllers; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [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 = "")] [assembly: AssemblyCompany("PhotoMode")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("PhotoMode")] [assembly: AssemblyTitle("PhotoMode")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace PhotoMode; internal class PhotoModeController : MonoBehaviour, ICameraStateProvider { internal struct PhotoModeCameraState { internal float pitch; internal float yaw; internal float roll; internal Vector3 position; internal float fov; internal Quaternion Rotation { get { //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_001b: Unknown result type (might be due to invalid IL or missing references) return Quaternion.Euler(pitch, yaw, roll); } set { //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_0016: 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) Vector3 eulerAngles = ((Quaternion)(ref value)).eulerAngles; pitch = eulerAngles.x; yaw = eulerAngles.y; roll = eulerAngles.z; } } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static EmptyDelegate <>9__16_0; public static EmptyDelegate <>9__16_1; internal void <EnterPhotoMode>b__16_0() { SettingsConVars.enableDamageNumbers.SetBool(true); } internal void <EnterPhotoMode>b__16_1() { SettingsConVars.cvExpAndMoneyEffects.SetBool(true); } } private static float cameraSpeed = 10f; private static float cameraSprintMultiplier = 5f; private static float cameraSlowMultiplier = 0.3f; public CameraRigController cameraRigController; public PauseScreenController pauseController; private PhotoModeCameraState cameraState; [CompilerGenerated] [DebuggerBrowsable(DebuggerBrowsableState.Never)] private EmptyDelegate m_OnExit; private Camera Camera => cameraRigController.sceneCam; public InputSource currentInputSource { get; private set; } private bool gamepad => (int)currentInputSource == 1; private event EmptyDelegate OnExit { [CompilerGenerated] add { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown EmptyDelegate val = this.m_OnExit; EmptyDelegate val2; do { val2 = val; EmptyDelegate value2 = (EmptyDelegate)Delegate.Combine((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref this.m_OnExit, value2, val2); } while (val != val2); } [CompilerGenerated] remove { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown EmptyDelegate val = this.m_OnExit; EmptyDelegate val2; do { val2 = val; EmptyDelegate value2 = (EmptyDelegate)Delegate.Remove((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref this.m_OnExit, value2, val2); } while (val != val2); } } internal void EnterPhotoMode(PauseScreenController pauseController, CameraRigController cameraRigController) { //IL_006a: 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_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_0094: 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_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Expected O, but got Unknown //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Expected O, but got Unknown //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Expected O, but got Unknown //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Expected O, but got Unknown this.cameraRigController = cameraRigController; Debug.Log((object)"Entering photo mode"); Time.timeScale = 0f; if (Object.op_Implicit((Object)(object)this.cameraRigController)) { this.cameraRigController.SetOverrideCam((ICameraStateProvider)(object)this, 0f); this.cameraRigController.enableFading = false; } cameraState = default(PhotoModeCameraState); cameraState.position = ((Component)Camera).transform.position; cameraState.Rotation = Quaternion.LookRotation(((Component)Camera).transform.rotation * Vector3.forward, Vector3.up); cameraState.fov = Camera.fieldOfView; if (SettingsConVars.enableDamageNumbers.value) { SettingsConVars.enableDamageNumbers.SetBool(false); object obj = <>c.<>9__16_0; if (obj == null) { EmptyDelegate val = delegate { SettingsConVars.enableDamageNumbers.SetBool(true); }; <>c.<>9__16_0 = val; obj = (object)val; } OnExit += (EmptyDelegate)obj; } if (SettingsConVars.cvExpAndMoneyEffects.value) { SettingsConVars.cvExpAndMoneyEffects.SetBool(false); object obj2 = <>c.<>9__16_1; if (obj2 == null) { EmptyDelegate val2 = delegate { SettingsConVars.cvExpAndMoneyEffects.SetBool(true); }; <>c.<>9__16_1 = val2; obj2 = (object)val2; } OnExit += (EmptyDelegate)obj2; } ((Behaviour)this.cameraRigController.hud.mainContainer.GetComponent<Canvas>()).enabled = false; OnExit += (EmptyDelegate)delegate { ((Behaviour)this.cameraRigController.hud.mainContainer.GetComponent<Canvas>()).enabled = true; }; if (PhotoModePlugin.disableIndicators.Value) { SetIndicatorsVisible(visible: false); OnExit += (EmptyDelegate)delegate { SetIndicatorsVisible(visible: true); }; } SetupPhotoModeHUD(this.cameraRigController.hud); Player inputPlayer = this.cameraRigController.localUserViewer.inputPlayer; inputPlayer.controllers.AddLastActiveControllerChangedDelegate(new PlayerActiveControllerChangedDelegate(OnLastActiveControllerChanged)); OnLastActiveControllerChanged(inputPlayer, inputPlayer.controllers.GetLastActiveController()); } private void OnDisable() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown Player inputPlayer = cameraRigController.localUserViewer.inputPlayer; inputPlayer.controllers.RemoveLastActiveControllerChangedDelegate(new PlayerActiveControllerChangedDelegate(OnLastActiveControllerChanged)); } private void OnLastActiveControllerChanged(Player player, Controller controller) { //IL_000d: 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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected I4, but got Unknown if (controller != null) { ControllerType type = controller.type; ControllerType val = type; switch ((int)val) { case 0: currentInputSource = (InputSource)0; break; case 1: currentInputSource = (InputSource)0; break; case 2: currentInputSource = (InputSource)1; break; } } } private void SetupPhotoModeHUD(HUD hud) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown GameObject gameObject = ((Component)hud).gameObject; GameObject val = new GameObject("PhotoModeHUD", new Type[1] { typeof(Canvas) }); } private void ExitPhotoMode() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) this.OnExit.Invoke(); if (Object.op_Implicit((Object)(object)cameraRigController)) { cameraRigController.enableFading = true; cameraRigController.SetOverrideCam((ICameraStateProvider)null, 1f); } Debug.Log((object)"Exiting photo mode"); ((Component)Camera).transform.localPosition = Vector3.zero; ((Component)Camera).transform.localRotation = Quaternion.identity; for (int i = 0; i < PauseScreenController.instancesList.Count; i++) { PauseScreenController.instancesList[i].DestroyPauseScreen(true); } Time.timeScale = 1f; Object.Destroy((Object)(object)((Component)this).gameObject); } private void SetIndicatorsVisible(bool visible) { Type nestedType = typeof(Indicator).GetNestedType("IndicatorManager", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (nestedType == null) { Debug.Log((object)"Failed to find indicatorManagerTypeInfo"); } else { FieldInfo field = nestedType.GetField("runningIndicators", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (field == null) { Debug.Log((object)"Failed to find runningIndicatorsFieldInfo"); } else { Debug.Log((object)field.ToString()); object value = field.GetValue(null); if (value is List<Indicator>) { ((List<Indicator>)value).ForEach(delegate(Indicator indicator) { indicator.SetVisualizerInstantiated(visible); }); } if (!visible) { DamageNumberManager.instance.ps.Clear(true); } } } ((Behaviour)cameraRigController.hud.combatHealthBarViewer).enabled = visible; PingIndicator.instancesList.ForEach(delegate(PingIndicator pingIndicator) { ((Component)pingIndicator).gameObject.SetActive(visible); }); if (!visible) { cameraRigController.sprintingParticleSystem.Clear(true); } } private void Update() { //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: 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_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_0398: 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_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038a: Unknown result type (might be due to invalid IL or missing references) UserProfile userProfile = cameraRigController.localUserViewer.userProfile; Player inputPlayer = cameraRigController.localUserViewer.inputPlayer; if (inputPlayer.GetButton(25)) { ExitPhotoMode(); return; } Time.timeScale = 0f; float mouseLookSensitivity = userProfile.mouseLookSensitivity; float mouseLookScaleX = userProfile.mouseLookScaleX; float mouseLookScaleY = userProfile.mouseLookScaleY; float axis = inputPlayer.GetAxis(23); float axis2 = inputPlayer.GetAxis(24); float num = 1f; if (gamepad) { num = 10f; } if ((gamepad && inputPlayer.GetButton(9)) || Input.GetMouseButton(1)) { cameraState.fov = Mathf.Clamp(Camera.fieldOfView + mouseLookSensitivity * Time.unscaledDeltaTime * axis2 * num, 4f, 120f); } if ((gamepad && inputPlayer.GetButton(10)) || Input.GetMouseButton(2)) { cameraState.roll += (0f - mouseLookScaleX) * mouseLookSensitivity * Time.unscaledDeltaTime * axis * num; } else { float value = mouseLookScaleX * mouseLookSensitivity * Time.unscaledDeltaTime * axis * num; float value2 = mouseLookScaleY * mouseLookSensitivity * Time.unscaledDeltaTime * axis2 * num; ConditionalNegate(ref value, userProfile.mouseLookInvertX); ConditionalNegate(ref value2, userProfile.mouseLookInvertY); float num2 = cameraState.roll * (MathF.PI / 180f); cameraState.yaw += cameraState.fov * (value * Mathf.Cos(num2) - value2 * Mathf.Sin(num2)); cameraState.pitch += cameraState.fov * ((0f - value2) * Mathf.Cos(num2) - value * Mathf.Sin(num2)); cameraState.pitch = Mathf.Clamp(cameraState.pitch, -89f, 89f); } Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(inputPlayer.GetAxis(0) * num, 0f, inputPlayer.GetAxis(1) * num); if ((gamepad && inputPlayer.GetButton(7)) || Input.GetKey((KeyCode)113)) { val.y -= 1f; } if ((gamepad && inputPlayer.GetButton(8)) || Input.GetKey((KeyCode)101)) { val.y += 1f; } ((Vector3)(ref val)).Normalize(); if (inputPlayer.GetButton("Sprint")) { val *= cameraSprintMultiplier; } if (Input.GetKey((KeyCode)306)) { val *= cameraSlowMultiplier; } ref Vector3 position = ref cameraState.position; position += cameraState.Rotation * val * Time.unscaledDeltaTime * cameraSpeed; ((Component)Camera).transform.position = cameraState.position; Quaternion val2 = cameraState.Rotation; if ((double)Mathf.Abs(((Quaternion)(ref val2)).eulerAngles.z) < 2.0) { val2 = val2.WithEulerAngles(null, null, 0f); } ((Component)Camera).transform.rotation = val2; Camera.fieldOfView = cameraState.fov; } public void GetCameraState(CameraRigController cameraRigController, ref CameraState cameraState) { } private void ConditionalNegate(ref float value, bool condition) { value = (condition ? (0f - value) : value); } public bool IsHudAllowed(CameraRigController cameraRigController) { return false; } public bool IsUserControlAllowed(CameraRigController cameraRigController) { return false; } public bool IsUserLookAllowed(CameraRigController cameraRigController) { return false; } } [BepInPlugin("com.cwmlolzlz.photomode", "PhotoMode", "1.4.4")] public class PhotoModePlugin : BaseUnityPlugin { public CameraRigController cameraRigController; public static ConfigEntry<bool> disableIndicators; public static ConfigEntry<int> buttonPlacement; public void Awake() { //IL_0011: 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_002c: Expected O, but got Unknown //IL_002c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_005c: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown disableIndicators = ((BaseUnityPlugin)this).Config.Bind<bool>(new ConfigDefinition("Disable Ping Indicators In Photo Mode", "Disable"), false, new ConfigDescription("Enabling this can cause indicators to not reenable again until the scene is reloaded.", (AcceptableValueBase)null, Array.Empty<object>())); buttonPlacement = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("Button Placement Index", "Index"), 2, new ConfigDescription("Index will be the button count and it starts at 0. 0-1 will place it at the top.", (AcceptableValueBase)null, Array.Empty<object>())); CameraRigController.OnEnable += (hook_OnEnable)delegate(orig_OnEnable orig, CameraRigController self) { orig.Invoke(self); cameraRigController = self; }; CameraRigController.OnDisable += (hook_OnDisable)delegate(orig_OnDisable orig, CameraRigController self) { orig.Invoke(self); cameraRigController = null; }; PauseScreenController.Awake += (hook_Awake)delegate(orig_Awake orig, PauseScreenController self) { orig.Invoke(self); SetupPhotoModeButton(self); }; } private void SetupPhotoModeButton(PauseScreenController pauseScreenController) { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown GameObject gameObject = ((Component)((Component)pauseScreenController).GetComponentInChildren<ButtonSkinController>()).gameObject; GameObject val = Object.Instantiate<GameObject>(gameObject, gameObject.transform.parent); ((Object)val).name = "GenericMenuButton (Photo mode)"; val.SetActive(true); ButtonSkinController component = val.GetComponent<ButtonSkinController>(); ((Component)component).GetComponent<LanguageTextMeshController>().token = "Photo mode"; HGButton component2 = val.GetComponent<HGButton>(); ((Selectable)component2).interactable = cameraRigController.localUserViewer != null; ((UnityEvent)((Button)component2).onClick).AddListener((UnityAction)delegate { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val2 = new GameObject("PhotoModeController"); PhotoModeController photoModeController = val2.AddComponent<PhotoModeController>(); photoModeController.EnterPhotoMode(pauseScreenController, cameraRigController); }); val.transform.SetSiblingIndex(buttonPlacement.Value); } } public static class QuaternionExtension { public static Quaternion WithEulerAngles(this Quaternion quaternion, float? x = null, float? y = null, float? z = null) { //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_0016: 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_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0068: Unknown result type (might be due to invalid IL or missing references) Vector3 eulerAngles = ((Quaternion)(ref quaternion)).eulerAngles; ((Vector3)(ref eulerAngles)).Set(x ?? eulerAngles.x, y ?? eulerAngles.y, z ?? eulerAngles.z); return Quaternion.Euler(eulerAngles); } }