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