initial release

i built this in like 4 hours fuck
This commit is contained in:
NotAKidoS 2023-01-20 02:39:57 -06:00
parent 287db410c4
commit ef01bd8597
7 changed files with 409 additions and 0 deletions

View file

@ -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);
}
}

View file

@ -0,0 +1,11 @@
using MelonLoader;
namespace NAK.Melons.PortableCameraAdditions;
public class PortableCameraAdditions : MelonMod
{
public override void OnInitializeMelon()
{
//boobs
}
}

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
<Compile Remove="resources\**" />
<EmbeddedResource Remove="resources\**" />
<None Remove="resources\**" />
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="BTKUILib">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll</HintPath>
</Reference>
<Reference Include="Cohtml.Runtime">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
</Reference>
<Reference Include="MelonLoader">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll</HintPath>
</Reference>
<Reference Include="Unity.Postprocessing.Runtime">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AssetBundleModule">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputLegacyModule">
<HintPath>C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
</ItemGroup>
<Target Name="Deploy" AfterTargets="Build">
<Copy SourceFiles="$(TargetPath)" DestinationFolder="C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\" />
<Message Text="Copied $(TargetPath) to C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR\Mods\" Importance="high" />
</Target>
</Project>

View file

@ -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

View file

@ -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";
}

View file

@ -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<bool>(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<bool>(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<bool>(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<float>(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<float>(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<float>(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<float>(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<float>(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;
}
}
}
}

View file

@ -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"
}