From ef01bd85977ce2ebb30dfc101e0bb41600f8198d Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Fri, 20 Jan 2023 02:39:57 -0600 Subject: [PATCH] initial release i built this in like 4 hours fuck --- PortableCamera-FarClipFix/HarmonyPatches.cs | 33 +++ PortableCamera-FarClipFix/Main.cs | 11 + .../PortableCameraAdditions.csproj | 64 +++++ .../PortableCameraAdditions.sln | 25 ++ .../Properties/AssemblyInfo.cs | 30 +++ .../VisualMods/AdditionalSettings.cs | 222 ++++++++++++++++++ PortableCamera-FarClipFix/format.json | 24 ++ 7 files changed, 409 insertions(+) create mode 100644 PortableCamera-FarClipFix/HarmonyPatches.cs create mode 100644 PortableCamera-FarClipFix/Main.cs create mode 100644 PortableCamera-FarClipFix/PortableCameraAdditions.csproj create mode 100644 PortableCamera-FarClipFix/PortableCameraAdditions.sln create mode 100644 PortableCamera-FarClipFix/Properties/AssemblyInfo.cs create mode 100644 PortableCamera-FarClipFix/VisualMods/AdditionalSettings.cs create mode 100644 PortableCamera-FarClipFix/format.json diff --git a/PortableCamera-FarClipFix/HarmonyPatches.cs b/PortableCamera-FarClipFix/HarmonyPatches.cs new file mode 100644 index 0000000..a234fea --- /dev/null +++ b/PortableCamera-FarClipFix/HarmonyPatches.cs @@ -0,0 +1,33 @@ +using ABI_RC.Systems.Camera; +using HarmonyLib; +using NAK.Melons.PortableCameraAdditions.VisualMods; +using UnityEngine; + +namespace NAK.Melons.PortableCameraAdditions.HarmonyPatches; + +[HarmonyPatch] +internal class HarmonyPatches +{ + [HarmonyPostfix] + [HarmonyPatch(typeof(PortableCamera), "Start")] + private static void Postfix_PortableCamera_Start(ref PortableCamera __instance) + { + //run mod.Setup() instead of registering full mod with icon + AdditionalSettings mainMod = new AdditionalSettings(); + mainMod.Setup(__instance); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(PortableCamera), "OnWorldLoaded")] + private static void Postfix_PortableCamera_OnWorldLoaded(Camera worldCamera) + { + AdditionalSettings.Instance?.OnWorldLoaded(worldCamera); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(PortableCamera), "UpdateOptionsDisplay")] + private static void Postfix_PortableCamera_UpdateOptionsDisplay(ref bool ____showExpertSettings) + { + AdditionalSettings.Instance?.OnUpdateOptionsDisplay(____showExpertSettings); + } +} \ No newline at end of file diff --git a/PortableCamera-FarClipFix/Main.cs b/PortableCamera-FarClipFix/Main.cs new file mode 100644 index 0000000..de0a400 --- /dev/null +++ b/PortableCamera-FarClipFix/Main.cs @@ -0,0 +1,11 @@ +using MelonLoader; + +namespace NAK.Melons.PortableCameraAdditions; + +public class PortableCameraAdditions : MelonMod +{ + public override void OnInitializeMelon() + { + //boobs + } +} \ No newline at end of file diff --git a/PortableCamera-FarClipFix/PortableCameraAdditions.csproj b/PortableCamera-FarClipFix/PortableCameraAdditions.csproj new file mode 100644 index 0000000..5ac0e23 --- /dev/null +++ b/PortableCamera-FarClipFix/PortableCameraAdditions.csproj @@ -0,0 +1,64 @@ + + + + + net472 + enable + latest + false + + + + + + + + + + + C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll + + + C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll + + + C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.Postprocessing.Runtime.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.TextMeshPro.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AssetBundleModule.dll + + + C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll + + + C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll + + + ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UI.dll + + + + + + + + + diff --git a/PortableCamera-FarClipFix/PortableCameraAdditions.sln b/PortableCamera-FarClipFix/PortableCameraAdditions.sln new file mode 100644 index 0000000..84887ac --- /dev/null +++ b/PortableCamera-FarClipFix/PortableCameraAdditions.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32630.192 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PortableCameraAdditions", "PortableCameraAdditions.csproj", "{3FFA9B93-18BA-4785-862A-DBDD95BE96A3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3FFA9B93-18BA-4785-862A-DBDD95BE96A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3FFA9B93-18BA-4785-862A-DBDD95BE96A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3FFA9B93-18BA-4785-862A-DBDD95BE96A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3FFA9B93-18BA-4785-862A-DBDD95BE96A3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {99545B29-77BE-44B4-8DC3-99133AB16810} + EndGlobalSection +EndGlobal diff --git a/PortableCamera-FarClipFix/Properties/AssemblyInfo.cs b/PortableCamera-FarClipFix/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5566156 --- /dev/null +++ b/PortableCamera-FarClipFix/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using MelonLoader; +using NAK.Melons.PortableCameraAdditions.Properties; +using System.Reflection; + + +[assembly: AssemblyVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyFileVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyInformationalVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyTitle(nameof(NAK.Melons.PortableCameraAdditions))] +[assembly: AssemblyCompany(AssemblyInfoParams.Author)] +[assembly: AssemblyProduct(nameof(NAK.Melons.PortableCameraAdditions))] + +[assembly: MelonInfo( + typeof(NAK.Melons.PortableCameraAdditions.PortableCameraAdditions), + nameof(NAK.Melons.PortableCameraAdditions), + AssemblyInfoParams.Version, + AssemblyInfoParams.Author, + downloadLink: "https://github.com/NotAKidOnSteam/PortableCameraAdditions" +)] + +[assembly: MelonGame("Alpha Blend Interactive", "ChilloutVR")] +[assembly: MelonPlatform(MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)] +[assembly: MelonPlatformDomain(MelonPlatformDomainAttribute.CompatibleDomains.MONO)] + +namespace NAK.Melons.PortableCameraAdditions.Properties; +internal static class AssemblyInfoParams +{ + public const string Version = "1.0.0"; + public const string Author = "NotAKidoS"; +} \ No newline at end of file diff --git a/PortableCamera-FarClipFix/VisualMods/AdditionalSettings.cs b/PortableCamera-FarClipFix/VisualMods/AdditionalSettings.cs new file mode 100644 index 0000000..ca351c1 --- /dev/null +++ b/PortableCamera-FarClipFix/VisualMods/AdditionalSettings.cs @@ -0,0 +1,222 @@ +using ABI_RC.Systems.Camera; +using UnityEngine; + +namespace NAK.Melons.PortableCameraAdditions.VisualMods; + +public class AdditionalSettings +{ + public static AdditionalSettings Instance; + + public Camera referenceCamera; + public bool orthographicMode; + + //Should I move these to MelonPrefs? + public bool CopyWorldNearClip; + public bool CopyWorldFarClip; + + private PortableCameraSetting setting_NearClip; + private PortableCameraSetting setting_FarClip; + + private PortableCameraSetting setting_OrthographicSize; + private PortableCameraSetting setting_OrthographicNearClip; + private PortableCameraSetting setting_OrthographicFarClip; + + public void Setup(PortableCamera __instance) + { + Instance = this; + + __instance.@interface.AddAndGetHeader(null, typeof(AdditionalSettings), "Additional Settings"); + + //Basic Settings + + PortableCameraSetting setting_CopyWorldNearClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Bool); + setting_CopyWorldNearClip.BoolChanged = new Action(value => UpdateCameraSettingBool("CopyNearClip", value)); + setting_CopyWorldNearClip.SettingName = "CopyNearClip"; + setting_CopyWorldNearClip.DisplayName = "Copy World Near Clip"; + setting_CopyWorldNearClip.OriginType = typeof(AdditionalSettings); + setting_CopyWorldNearClip.DefaultValue = true; + setting_CopyWorldNearClip.Load(); + + PortableCameraSetting setting_CopyWorldFarClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Bool); + setting_CopyWorldFarClip.BoolChanged = new Action(value => UpdateCameraSettingBool("CopyFarClip", value)); + setting_CopyWorldFarClip.SettingName = "CopyFarClip"; + setting_CopyWorldFarClip.DisplayName = "Copy World Far Clip"; + setting_CopyWorldFarClip.OriginType = typeof(AdditionalSettings); + setting_CopyWorldFarClip.DefaultValue = true; + setting_CopyWorldFarClip.Load(); + + //Expert Settings + + PortableCameraSetting setting_Orthographic = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Bool); + setting_Orthographic.BoolChanged = new Action(value => UpdateCameraSettingBool("Orthographic", value)); + setting_Orthographic.SettingName = "Orthographic"; + setting_Orthographic.DisplayName = "Orthographic"; + setting_Orthographic.isExpertSetting = true; + setting_Orthographic.OriginType = typeof(AdditionalSettings); + setting_Orthographic.DefaultValue = false; + setting_Orthographic.Load(); + + //Normal Clipping Settings + + setting_NearClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Float); + setting_NearClip.FloatChanged = new Action(value => UpdateCameraSettingFloat("NearClip", value)); + setting_NearClip.SettingName = "NearClip"; + setting_NearClip.DisplayName = "Near Clip Plane"; + setting_NearClip.isExpertSetting = true; + setting_NearClip.OriginType = typeof(AdditionalSettings); + setting_NearClip.DefaultValue = 0.01f; + setting_NearClip.MinValue = 0.001f; + setting_NearClip.MaxValue = 5000f; + setting_NearClip.Load(); + + setting_FarClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Float); + setting_FarClip.FloatChanged = new Action(value => UpdateCameraSettingFloat("FarClip", value)); + setting_FarClip.SettingName = "FarClip"; + setting_FarClip.DisplayName = "Far Clip Plane"; + setting_FarClip.isExpertSetting = true; + setting_FarClip.OriginType = typeof(AdditionalSettings); + setting_FarClip.DefaultValue = 1000f; + setting_FarClip.MinValue = 0.002f; + setting_FarClip.MaxValue = 5000f; + setting_FarClip.Load(); + + //Orthographic Settings + + setting_OrthographicSize = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Float); + setting_OrthographicSize.FloatChanged = new Action(value => UpdateCameraSettingFloat("OrthographicSize", value)); + setting_OrthographicSize.SettingName = "OrthographicSize"; + setting_OrthographicSize.DisplayName = "Orthographic Size"; + setting_OrthographicSize.isExpertSetting = true; + setting_OrthographicSize.OriginType = typeof(AdditionalSettings); + setting_OrthographicSize.DefaultValue = 5f; + setting_OrthographicSize.MinValue = 0.01f; + setting_OrthographicSize.MaxValue = 150f; + setting_OrthographicSize.Load(); + + setting_OrthographicNearClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Float); + setting_OrthographicNearClip.FloatChanged = new Action(value => UpdateCameraSettingFloat("OrthographicNearClip", value)); + setting_OrthographicNearClip.SettingName = "OrthographicNearClip"; + setting_OrthographicNearClip.DisplayName = "Orthographic Near"; + setting_OrthographicNearClip.isExpertSetting = true; + setting_OrthographicNearClip.OriginType = typeof(AdditionalSettings); + setting_OrthographicNearClip.DefaultValue = 0.001f; + setting_OrthographicNearClip.MinValue = -5000f; + setting_OrthographicNearClip.MaxValue = 5000f; + setting_OrthographicNearClip.Load(); + + setting_OrthographicFarClip = __instance.@interface.AddAndGetSetting(PortableCameraSettingType.Float); + setting_OrthographicFarClip.FloatChanged = new Action(value => UpdateCameraSettingFloat("OrthographicFarClip", value)); + setting_OrthographicFarClip.SettingName = "OrthographicFarClip"; + setting_OrthographicFarClip.DisplayName = "Orthographic Far"; + setting_OrthographicFarClip.isExpertSetting = true; + setting_OrthographicFarClip.OriginType = typeof(AdditionalSettings); + setting_OrthographicFarClip.DefaultValue = 1000f; + setting_OrthographicFarClip.MinValue = -5000f; + setting_OrthographicFarClip.MaxValue = 5000f; + setting_OrthographicFarClip.Load(); + + OnUpdateOptionsDisplay(); + } + + public void OnWorldLoaded(Camera playerCamera) + { + orthographicMode = false; + referenceCamera = playerCamera; + if (referenceCamera != null) + { + if (CopyWorldNearClip) + setting_NearClip.Set(referenceCamera.nearClipPlane); + if (CopyWorldFarClip) + setting_FarClip.Set(referenceCamera.farClipPlane); + } + } + + public void OnUpdateOptionsDisplay(bool expertMode = true) + { + if (!expertMode) + { + return; + } + setting_NearClip.settingsObject.SetActive(!orthographicMode); + setting_FarClip.settingsObject.SetActive(!orthographicMode); + setting_OrthographicSize.settingsObject.SetActive(orthographicMode); + setting_OrthographicNearClip.settingsObject.SetActive(orthographicMode); + setting_OrthographicFarClip.settingsObject.SetActive(orthographicMode); + } + + public void UpdateOrthographicMode() + { + if (PortableCamera.Instance != null) + { + PortableCamera.Instance.cameraComponent.orthographic = orthographicMode; + } + if (orthographicMode) + { + UpdateCameraSettingFloat("OrthographicNearClip", setting_OrthographicNearClip.Slider.value); + UpdateCameraSettingFloat("OrthographicFarClip", setting_OrthographicFarClip.Slider.value); + } + else + { + UpdateCameraSettingFloat("NearClip", setting_NearClip.Slider.value); + UpdateCameraSettingFloat("FarClip", setting_FarClip.Slider.value); + } + OnUpdateOptionsDisplay(); + } + + public void UpdateCameraSettingBool(string setting, bool value) + { + if (referenceCamera != null) + { + switch (setting) + { + //Camera Settings + case "Orthographic": + orthographicMode = value; + UpdateOrthographicMode(); + break; + //Internal Settings + case "CopyNearClip": + CopyWorldNearClip = value; + if (CopyWorldNearClip) + setting_NearClip.Set(referenceCamera.nearClipPlane); + break; + case "CopyFarClip": + CopyWorldFarClip = value; + if (CopyWorldFarClip) + setting_FarClip.Set(referenceCamera.farClipPlane); + break; + } + } + } + + public void UpdateCameraSettingFloat(string setting, float value) + { + if (PortableCamera.Instance != null) + { + switch (setting) + { + //Camera Settings + case "NearClip": + if (!orthographicMode) + PortableCamera.Instance.cameraComponent.nearClipPlane = value; + break; + case "FarClip": + if (!orthographicMode) + PortableCamera.Instance.cameraComponent.farClipPlane = value; + break; + //Orthographic Mode + case "OrthographicSize": + PortableCamera.Instance.cameraComponent.orthographicSize = value; + break; + case "OrthographicNearClip": + if (orthographicMode) + PortableCamera.Instance.cameraComponent.nearClipPlane = value; + break; + case "OrthographicFarClip": + if (orthographicMode) + PortableCamera.Instance.cameraComponent.farClipPlane = value; + break; + } + } + } +} diff --git a/PortableCamera-FarClipFix/format.json b/PortableCamera-FarClipFix/format.json new file mode 100644 index 0000000..c3115d3 --- /dev/null +++ b/PortableCamera-FarClipFix/format.json @@ -0,0 +1,24 @@ +{ + "_id": 95, + "name": "PortableCameraAdditions", + "modversion": "3.0.0", + "gameversion": "2022r170", + "loaderversion": "0.5.7", + "modtype": "Mod", + "author": "NotAKidoS", + "description": "Corrects MM and QM position when avatar is being scaled.\n\nDesktop menus will now always follow camera while open.", + "searchtags": [ + "menu", + "scale", + "avatarscale", + "slider" + ], + "requirements": [ + "None" + "None" + ], + "downloadlink": "https://github.com/NotAKidOnSteam/PortableCameraAdditions/releases/download/v3.0.0/PortableCameraAdditions.dll", + "sourcelink": "https://github.com/NotAKidOnSteam/PortableCameraAdditions/", + "changelog": "Removed collision scaling feature as it is now native.\nAdjusted QM scaling for VR.\nAdded menu correction for Desktop so you can use menus while moving.\nImmediate viewpoint correction for Desktop during scaling.", + "embedcolor": "804221" +} \ No newline at end of file