diff --git a/PortableCameraAdditions/HarmonyPatches.cs b/PortableCameraAdditions/HarmonyPatches.cs
new file mode 100644
index 0000000..7df846f
--- /dev/null
+++ b/PortableCameraAdditions/HarmonyPatches.cs
@@ -0,0 +1,54 @@
+using ABI_RC.Systems.Camera;
+using HarmonyLib;
+using UnityEngine;
+
+namespace NAK.Melons.PortableCameraAdditions.HarmonyPatches;
+
+[HarmonyPatch]
+internal class PortableCameraPatches
+{
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PortableCamera), nameof(PortableCamera.Start))]
+ private static void Postfix_PortableCamera_Start(ref PortableCamera __instance)
+ {
+ //run mod.Setup() instead of registering full mod with icon
+ VisualMods.CameraAdditions mainMod = new VisualMods.CameraAdditions();
+ mainMod.Setup(__instance);
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PortableCamera), nameof(PortableCamera.OnWorldLoaded))]
+ private static void Postfix_PortableCamera_OnWorldLoaded(Camera worldCamera)
+ {
+ VisualMods.CameraAdditions.Instance?.OnWorldLoaded(worldCamera);
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PortableCamera), nameof(PortableCamera.UpdateOptionsDisplay))]
+ private static void Postfix_PortableCamera_UpdateOptionsDisplay(ref bool ____showExpertSettings)
+ {
+ VisualMods.CameraAdditions.Instance?.OnUpdateOptionsDisplay(____showExpertSettings);
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PortableCamera), nameof(PortableCamera.Update))]
+ private static void Postfix_PortableCamera_Update(ref PortableCamera __instance)
+ {
+ if (Input.GetKeyDown(KeyCode.F11))
+ {
+ bool flag = __instance.mode == MirroringMode.NoMirror;
+ __instance.mode = (flag) ? MirroringMode.Mirror : MirroringMode.NoMirror;
+ __instance.mirroringActive.SetActive(flag);
+ __instance.mirroringCanvas.gameObject.SetActive(flag);
+ }
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(PortableCamera), nameof(PortableCamera.OnDisable))]
+ private static void Postfix_PortableCamera_OnDisable(ref PortableCamera __instance)
+ {
+ __instance.mode = MirroringMode.NoMirror;
+ __instance.mirroringActive.SetActive(false);
+ __instance.mirroringCanvas.gameObject.SetActive(false);
+ }
+}
\ No newline at end of file
diff --git a/PortableCameraAdditions/Main.cs b/PortableCameraAdditions/Main.cs
new file mode 100644
index 0000000..de0a400
--- /dev/null
+++ b/PortableCameraAdditions/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/PortableCameraAdditions/PortableCameraAdditions.csproj b/PortableCameraAdditions/PortableCameraAdditions.csproj
new file mode 100644
index 0000000..eb63fa4
--- /dev/null
+++ b/PortableCameraAdditions/PortableCameraAdditions.csproj
@@ -0,0 +1,74 @@
+
+
+
+
+ net472
+ enable
+ latest
+ false
+ True
+
+
+
+
+
+
+
+
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\0Harmony.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\Assembly-CSharp.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\Assembly-CSharp-firstpass.dll
+
+
+ C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\Cohtml.Runtime.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\MelonLoader.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\Unity.Postprocessing.Runtime.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\Unity.TextMeshPro.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.AssetBundleModule.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.CoreModule.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.ImageConversionModule.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.InputLegacyModule.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.PhysicsModule.dll
+
+
+ C:\Users\krist\Documents\GitHub\_ChilloutVR Modding\_ManagedLibs\UnityEngine.UI.dll
+
+
+ ..\..\..\_ManagedLibs\UnityEngine.UIModule.dll
+
+
+
+
+
+
+
+
+
diff --git a/PortableCameraAdditions/PortableCameraAdditions.sln b/PortableCameraAdditions/PortableCameraAdditions.sln
new file mode 100644
index 0000000..84887ac
--- /dev/null
+++ b/PortableCameraAdditions/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/PortableCameraAdditions/Properties/AssemblyInfo.cs b/PortableCameraAdditions/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ad9a385
--- /dev/null
+++ b/PortableCameraAdditions/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.2";
+ public const string Author = "NotAKidoS";
+}
\ No newline at end of file
diff --git a/PortableCameraAdditions/VisualMods/CameraAdditions.cs b/PortableCameraAdditions/VisualMods/CameraAdditions.cs
new file mode 100644
index 0000000..d038725
--- /dev/null
+++ b/PortableCameraAdditions/VisualMods/CameraAdditions.cs
@@ -0,0 +1,226 @@
+using ABI_RC.Systems.Camera;
+using UnityEngine;
+
+namespace NAK.Melons.PortableCameraAdditions.VisualMods;
+
+public class CameraAdditions
+{
+ public static CameraAdditions Instance;
+
+ public Camera referenceCamera;
+ public bool orthographicMode;
+
+ //Should I move these to MelonPrefs?
+ public bool CopyWorldNearClip = true;
+ public bool CopyWorldFarClip = true;
+
+ 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(CameraAdditions), "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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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(CameraAdditions);
+ 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/PortableCameraAdditions/format.json b/PortableCameraAdditions/format.json
new file mode 100644
index 0000000..f73d7df
--- /dev/null
+++ b/PortableCameraAdditions/format.json
@@ -0,0 +1,25 @@
+{
+ "_id": 123,
+ "name": "PortableCameraAdditions",
+ "modversion": "1.0.2",
+ "gameversion": "2022r170",
+ "loaderversion": "0.5.7",
+ "modtype": "Mod",
+ "author": "NotAKidoS",
+ "description": "Adds a few basic settings to the Portable Camera.\n\nExpert settings for Near Clip & Far Clip.\nExpert settings for Orthographic & Orthographic Size.\nBy default, Near Clip & Far Clip are copied on world load.\nF11 to fullscreen on Desktop.",
+ "searchtags": [
+ "camera",
+ "settings",
+ "clipping",
+ "clip",
+ "near",
+ "far"
+ ],
+ "requirements": [
+ "None"
+ ],
+ "downloadlink": "https://github.com/NotAKidOnSteam/PortableCameraAdditions/releases/download/v1.0.2/PortableCameraAdditions.dll",
+ "sourcelink": "https://github.com/NotAKidOnSteam/PortableCameraAdditions/",
+ "changelog": "Added F11 bind to fullscreen Portable Camera on Desktop.",
+ "embedcolor": "9b59b6"
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 7394748..ebda711 100644
--- a/README.md
+++ b/README.md
@@ -236,6 +236,10 @@ As you can tell, i have no fucking clue how to use GitHub.
https://user-images.githubusercontent.com/37721153/188521473-9d180795-785a-4ba0-b97f-1e9163d1ba14.mp4
+# PortableCameraAdditions
+ added few more settings to camera
+
+
---