added scale modifier

ThirdPerson distance now uses avatar height as modifier, so you keep the same distance across avatars & while scaling.
This commit is contained in:
NotAKidoS 2023-04-25 19:11:26 -05:00
parent 5c0e8a2ff4
commit 0dae699932
2 changed files with 16 additions and 8 deletions

View file

@ -14,6 +14,7 @@ namespace NAK.ThirdPerson;
internal static class CameraLogic
{
private static float _dist;
private static float _scale = 1f;
private static Camera _ourCam;
private static Camera _desktopCam;
private static CameraFovClone _cameraFovClone;
@ -64,7 +65,7 @@ internal static class CameraLogic
ThirdPerson.Logger.Msg("Finished setting up third person camera.");
}
internal static void CopyFromPlayerCam()
internal static void CopyPlayerCamValues()
{
Camera ourCamComponent = _ourCam.GetComponent<Camera>();
Camera playerCamComponent = PlayerSetup.Instance.GetActiveCamera().GetComponent<Camera>();
@ -153,23 +154,23 @@ internal static class CameraLogic
switch (location)
{
case CameraLocation.FrontView:
_ourCam.transform.localPosition = new Vector3(0, 0.015f, 0.55f - _dist);
_ourCam.transform.localPosition = new Vector3(0, 0.015f, 0.55f - _dist) * _scale;
_ourCam.transform.localRotation = new Quaternion(0, 180, 0, 0);
CurrentLocation = CameraLocation.FrontView;
break;
case CameraLocation.RightSide:
_ourCam.transform.localPosition = new Vector3(0.3f, 0.015f, -0.55f + _dist);
_ourCam.transform.localPosition = new Vector3(0.3f, 0.015f, -0.55f + _dist) * _scale;
_ourCam.transform.localRotation = new Quaternion(0, 0, 0, 0);
CurrentLocation = CameraLocation.RightSide;
break;
case CameraLocation.LeftSide:
_ourCam.transform.localPosition = new Vector3(-0.3f, 0.015f, -0.55f + _dist);
_ourCam.transform.localPosition = new Vector3(-0.3f, 0.015f, -0.55f + _dist) * _scale;
_ourCam.transform.localRotation = new Quaternion(0, 0, 0, 0);
CurrentLocation = CameraLocation.LeftSide;
break;
case CameraLocation.Default:
default:
_ourCam.transform.localPosition = new Vector3(0, 0.015f, -0.55f + _dist);
_ourCam.transform.localPosition = new Vector3(0, 0.015f, -0.88f + _dist) * _scale;
_ourCam.transform.localRotation = new Quaternion(0, 0, 0, 0);
CurrentLocation = CameraLocation.Default;
break;
@ -179,4 +180,5 @@ internal static class CameraLogic
private static void ResetDist() => _dist = 0;
internal static void IncrementDist() { _dist += 0.25f; RelocateCam(CurrentLocation); }
internal static void DecrementDist() { _dist -= 0.25f; RelocateCam(CurrentLocation); }
internal static void AdjustScale(float height) { _scale = height; RelocateCam(CurrentLocation); }
}

View file

@ -1,4 +1,5 @@
using ABI.CCK.Components;
using ABI_RC.Core.Player;
using MelonLoader;
using System.Reflection;
using static NAK.ThirdPerson.CameraLogic;
@ -10,15 +11,20 @@ internal static class Patches
internal static void Apply(HarmonyLib.Harmony harmony)
{
harmony.Patch(
typeof(CVRWorld).GetMethod("SetDefaultCamValues", BindingFlags.NonPublic | BindingFlags.Instance),
typeof(CVRWorld).GetMethod(nameof(CVRWorld.SetDefaultCamValues), BindingFlags.NonPublic | BindingFlags.Instance),
postfix: typeof(Patches).GetMethod(nameof(OnWorldStart), BindingFlags.NonPublic | BindingFlags.Static).ToNewHarmonyMethod()
);
harmony.Patch(
typeof(CVRWorld).GetMethod("CopyRefCamValues", BindingFlags.NonPublic | BindingFlags.Instance),
typeof(CVRWorld).GetMethod(nameof(CVRWorld.CopyRefCamValues), BindingFlags.NonPublic | BindingFlags.Instance),
postfix: typeof(Patches).GetMethod(nameof(OnWorldStart), BindingFlags.NonPublic | BindingFlags.Static).ToNewHarmonyMethod()
);
harmony.Patch(
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupIKScaling), BindingFlags.NonPublic | BindingFlags.Instance),
postfix: typeof(Patches).GetMethod(nameof(OnScaleAdjusted), BindingFlags.NonPublic | BindingFlags.Static).ToNewHarmonyMethod()
);
}
//Copy camera settings & postprocessing components
private static void OnWorldStart() => CopyFromPlayerCam();
private static void OnWorldStart() => CopyPlayerCamValues();
private static void OnScaleAdjusted(float height) => AdjustScale(height);
}