mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 06:19:22 +00:00
prop origin fixes, version 2
This commit is contained in:
parent
9fee74f587
commit
7f860f4fc2
3 changed files with 107 additions and 20 deletions
59
DesktopVRSwitch/Patches/CVRPickupObjectTracker.cs
Normal file
59
DesktopVRSwitch/Patches/CVRPickupObjectTracker.cs
Normal file
|
@ -0,0 +1,59 @@
|
|||
using ABI.CCK.Components;
|
||||
using ABI_RC.Core.Savior;
|
||||
using HarmonyLib;
|
||||
using MelonLoader;
|
||||
using UnityEngine;
|
||||
|
||||
//Thanks Ben! I was scared of transpiler so I reworked a bit...
|
||||
|
||||
namespace DesktopVRSwitch.Patches;
|
||||
|
||||
[HarmonyPatch]
|
||||
internal class CVRPickupObject_Patch
|
||||
{
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(CVRPickupObject), "Start")]
|
||||
private static void CVRPickupObject_Start_Prefix(ref CVRPickupObject __instance)
|
||||
{
|
||||
Transform desktopOrigin = __instance.gripOrigin.Find("[Desktop]");
|
||||
if (desktopOrigin == null) return;
|
||||
|
||||
var pickupTracker = __instance.GetComponent<CVRPickupObjectTracker>();
|
||||
if (pickupTracker != null) return;
|
||||
|
||||
__instance.gameObject.AddComponent<CVRPickupObjectTracker>();
|
||||
|
||||
StorePreviousPosition(__instance, (!MetaPort.Instance.isUsingVr) ? __instance.gripOrigin : desktopOrigin);
|
||||
}
|
||||
|
||||
private static void StorePreviousPosition(CVRPickupObject pickupObject, Transform gripOrigin)
|
||||
{
|
||||
MelonLogger.Msg("Storing previous gripOrigin.");
|
||||
CVRPickupObjectTracker.previousGripOrigin[pickupObject] = gripOrigin;
|
||||
}
|
||||
}
|
||||
|
||||
public class CVRPickupObjectTracker : MonoBehaviour
|
||||
{
|
||||
//maybe i should store both transforms instead and getcomponent for CVRPickupObject..?
|
||||
public static Dictionary<CVRPickupObject, Transform> previousGripOrigin = new();
|
||||
|
||||
public void OnSwitch()
|
||||
{
|
||||
var pickupObject = GetComponent<CVRPickupObject>();
|
||||
|
||||
if (pickupObject != null)
|
||||
{
|
||||
if (pickupObject.IsGrabbedByMe()) pickupObject.Drop();
|
||||
(previousGripOrigin[pickupObject], pickupObject.gripOrigin) = (pickupObject.gripOrigin, previousGripOrigin[pickupObject]);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
var pickupObject = GetComponent<CVRPickupObject>();
|
||||
|
||||
if (pickupObject != null)
|
||||
previousGripOrigin.Remove(pickupObject);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue