mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
[OriginShift] Fixes for ThirdPerson & Ragdoll
This commit is contained in:
parent
69e6298281
commit
c75fc028d3
7 changed files with 118 additions and 17 deletions
|
@ -61,6 +61,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AASDefaultProfileFix", "AAS
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OriginShift", "OriginShift\OriginShift.csproj", "{F381F604-9C16-4870-AD49-4BD7CA3F36DC}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OriginShift", "OriginShift\OriginShift.csproj", "{F381F604-9C16-4870-AD49-4BD7CA3F36DC}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScrollFlight", "ScrollFlight\ScrollFlight.csproj", "{1B5D7DCB-01A4-4988-8B25-211948AEED76}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -183,6 +185,10 @@ Global
|
||||||
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Release|Any CPU.Build.0 = Release|Any CPU
|
{F381F604-9C16-4870-AD49-4BD7CA3F36DC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1B5D7DCB-01A4-4988-8B25-211948AEED76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1B5D7DCB-01A4-4988-8B25-211948AEED76}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1B5D7DCB-01A4-4988-8B25-211948AEED76}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1B5D7DCB-01A4-4988-8B25-211948AEED76}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
using ABI_RC.Core.Base;
|
||||||
|
using NAK.OriginShift;
|
||||||
|
using NAK.OriginShift.Hacks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace OriginShift.ModCompatibility;
|
||||||
|
|
||||||
|
public static class ThirdPersonCompatibility
|
||||||
|
{
|
||||||
|
internal static void Fix()
|
||||||
|
{
|
||||||
|
GameObject thirdPersonCameraObj = GameObject.Find("_PLAYERLOCAL/[CameraRigDesktop]/Camera/ThirdPersonCameraObj");
|
||||||
|
if (thirdPersonCameraObj == null) return;
|
||||||
|
OriginShiftMod.Logger.Msg("Found ThirdPerson, fixing compatibility...");
|
||||||
|
thirdPersonCameraObj.AddComponentIfMissing<OriginShiftOcclusionCullingDisabler>();
|
||||||
|
}
|
||||||
|
}
|
37
OriginShift/Integrations/Ragdoll/RagdollAddon.cs
Normal file
37
OriginShift/Integrations/Ragdoll/RagdollAddon.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System.Collections;
|
||||||
|
using ABI_RC.Core.Base;
|
||||||
|
using ABI_RC.Core.Player;
|
||||||
|
using HarmonyLib;
|
||||||
|
using MelonLoader;
|
||||||
|
using NAK.OriginShift;
|
||||||
|
using NAK.OriginShift.Components;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace OriginShift.Integrations;
|
||||||
|
|
||||||
|
public static class RagdollAddon
|
||||||
|
{
|
||||||
|
public static void Initialize()
|
||||||
|
{
|
||||||
|
OriginShiftMod.HarmonyInst.Patch(
|
||||||
|
AccessTools.Method(typeof(PlayerSetup), nameof(PlayerSetup.SetupAvatar)),
|
||||||
|
postfix: new HarmonyMethod(typeof(RagdollAddon), nameof(OnPostPlayerSetupSetupAvatar))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnPostPlayerSetupSetupAvatar()
|
||||||
|
{
|
||||||
|
OriginShiftMod.Logger.Msg("Found Ragdoll, fixing compatibility...");
|
||||||
|
MelonCoroutines.Start(FixRagdollCompatibility());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerator FixRagdollCompatibility()
|
||||||
|
{
|
||||||
|
yield return null; // wait a frame for the avatar to be setup
|
||||||
|
GameObject ragdollObj = GameObject.Find("_PLAYERLOCAL/[PlayerAvatarPuppet]");
|
||||||
|
|
||||||
|
// get all rigidbodies in the ragdoll
|
||||||
|
var ragdollRigidbodies = ragdollObj.GetComponentsInChildren<Rigidbody>();
|
||||||
|
foreach (Rigidbody rb in ragdollRigidbodies) rb.AddComponentIfMissing<OriginShiftRigidbodyReceiver>();
|
||||||
|
}
|
||||||
|
}
|
36
OriginShift/Integrations/ThirdPerson/ThirdPersonAddon.cs
Normal file
36
OriginShift/Integrations/ThirdPerson/ThirdPersonAddon.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Collections;
|
||||||
|
using ABI_RC.Core.Base;
|
||||||
|
using ABI_RC.Core.Player;
|
||||||
|
using MelonLoader;
|
||||||
|
using NAK.OriginShift;
|
||||||
|
using NAK.OriginShift.Hacks;
|
||||||
|
using UnityEngine;
|
||||||
|
using AccessTools = HarmonyLib.AccessTools;
|
||||||
|
using HarmonyMethod = HarmonyLib.HarmonyMethod;
|
||||||
|
|
||||||
|
namespace OriginShift.Integrations;
|
||||||
|
|
||||||
|
public static class ThirdPersonAddon
|
||||||
|
{
|
||||||
|
public static void Initialize()
|
||||||
|
{
|
||||||
|
OriginShiftMod.HarmonyInst.Patch(
|
||||||
|
AccessTools.Method(typeof(PlayerSetup), nameof(PlayerSetup.Start)),
|
||||||
|
postfix: new HarmonyMethod(typeof(ThirdPersonAddon), nameof(OnPostPlayerSetupStart))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnPostPlayerSetupStart()
|
||||||
|
{
|
||||||
|
OriginShiftMod.Logger.Msg("Found ThirdPerson, fixing compatibility...");
|
||||||
|
MelonCoroutines.Start(FixThirdPersonCompatibility());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerator FixThirdPersonCompatibility()
|
||||||
|
{
|
||||||
|
yield return null; // wait a frame for the camera to be setup
|
||||||
|
GameObject thirdPersonCameraObj = GameObject.Find("_PLAYERLOCAL/[CameraRigDesktop]/Camera/ThirdPersonCameraObj");
|
||||||
|
thirdPersonCameraObj.AddComponentIfMissing<OriginShiftOcclusionCullingDisabler>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ using ABI_RC.Systems.Movement;
|
||||||
using MelonLoader;
|
using MelonLoader;
|
||||||
using NAK.OriginShift.Components;
|
using NAK.OriginShift.Components;
|
||||||
using NAK.OriginShiftMod.Integrations;
|
using NAK.OriginShiftMod.Integrations;
|
||||||
|
using OriginShift.Integrations;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace NAK.OriginShift;
|
namespace NAK.OriginShift;
|
||||||
|
@ -19,12 +20,14 @@ namespace NAK.OriginShift;
|
||||||
public class OriginShiftMod : MelonMod
|
public class OriginShiftMod : MelonMod
|
||||||
{
|
{
|
||||||
internal static MelonLogger.Instance Logger;
|
internal static MelonLogger.Instance Logger;
|
||||||
|
internal static HarmonyLib.Harmony HarmonyInst;
|
||||||
|
|
||||||
#region Melon Mod Overrides
|
#region Melon Mod Overrides
|
||||||
|
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
Logger = LoggerInstance;
|
Logger = LoggerInstance;
|
||||||
|
HarmonyInst = HarmonyInstance;
|
||||||
|
|
||||||
ModSettings.Initialize();
|
ModSettings.Initialize();
|
||||||
|
|
||||||
|
@ -54,22 +57,8 @@ public class OriginShiftMod : MelonMod
|
||||||
WorldFilter._Base.Add(typeof(OriginShiftTransformReceiver)); // transform
|
WorldFilter._Base.Add(typeof(OriginShiftTransformReceiver)); // transform
|
||||||
|
|
||||||
InitializeIntegration("BTKUILib", BtkUiAddon.Initialize);
|
InitializeIntegration("BTKUILib", BtkUiAddon.Initialize);
|
||||||
}
|
InitializeIntegration("ThirdPerson", ThirdPersonAddon.Initialize);
|
||||||
|
InitializeIntegration("PlayerRagdollMod", RagdollAddon.Initialize);
|
||||||
public override void OnUpdate()
|
|
||||||
{
|
|
||||||
if (BetterBetterCharacterController.Instance == null
|
|
||||||
|| !BetterBetterCharacterController.Instance.IsFlying()
|
|
||||||
|| Input.GetKey(KeyCode.Mouse2)
|
|
||||||
|| Cursor.lockState != CursorLockMode.Locked)
|
|
||||||
return;
|
|
||||||
|
|
||||||
BetterBetterCharacterController.Instance.worldFlightSpeedMultiplier = Math.Max(0f,
|
|
||||||
BetterBetterCharacterController.Instance.worldFlightSpeedMultiplier + Input.mouseScrollDelta.y);
|
|
||||||
if (Input.mouseScrollDelta.y != 0f)
|
|
||||||
CohtmlHud.Instance.ViewDropTextImmediate("(Local) ScrollFlight",
|
|
||||||
BetterBetterCharacterController.Instance.worldFlightSpeedMultiplier.ToString(CultureInfo
|
|
||||||
.InvariantCulture), "Speed multiplier");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Melon Mod Overrides
|
#endregion Melon Mod Overrides
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using UnityEngine;
|
using JetBrains.Annotations;
|
||||||
|
using UnityEngine;
|
||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
|
|
||||||
#if !UNITY_EDITOR
|
#if !UNITY_EDITOR
|
||||||
|
|
|
@ -2,6 +2,21 @@
|
||||||
|
|
||||||
Experimental mod that allows world origin to be shifted to prevent floating point precision issues.
|
Experimental mod that allows world origin to be shifted to prevent floating point precision issues.
|
||||||
|
|
||||||
|
## Compromises
|
||||||
|
- Steam Audio data cannot be shifted.
|
||||||
|
- NavMesh data cannot be shifted.
|
||||||
|
- Light Probe data cannot be shifted (until [unity 2022](https://docs.unity3d.com/2022.3/Documentation/Manual/LightProbes-Moving.html)).
|
||||||
|
- Occlusion Culling data cannot be shifted.
|
||||||
|
- When using "Forced" mode, occlusion culling is disabled.
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
- Player position on a Movement Parent may slightly drift when passing a chunk boundary if being moved by a Force Applicator.
|
||||||
|
- Mod Network is not yet implemented, so Compatibility Mode is required to play with others.
|
||||||
|
- Portable Camera drone mode is not yet offset by the world origin shift.
|
||||||
|
|
||||||
|
## Mod Incompatibilities
|
||||||
|
- PlayerRagdollMod will freak out when you ragdoll between chunk boundaries.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Here is the block of text where I tell you this mod is not affiliated with or endorsed by ABI.
|
Here is the block of text where I tell you this mod is not affiliated with or endorsed by ABI.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue