mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Version bump
This commit is contained in:
parent
26257ab886
commit
8375a1323c
25 changed files with 1282 additions and 1282 deletions
18
README.md
18
README.md
|
@ -3,15 +3,15 @@ Merged set of MelonLoader mods for ChilloutVR.
|
||||||
**Table for game build 2023r173:**
|
**Table for game build 2023r173:**
|
||||||
| Full name | Short name | Latest version | Available in [CVRMA](https://github.com/knah/CVRMelonAssistant) |
|
| Full name | Short name | Latest version | Available in [CVRMA](https://github.com/knah/CVRMelonAssistant) |
|
||||||
|:---------:|:----------:|:--------------:| :----------------------------------------------------------------|
|
|:---------:|:----------:|:--------------:| :----------------------------------------------------------------|
|
||||||
| [Avatar Motion Tweaker](/ml_amt/README.md) | ml_amt | 1.3.6 [:arrow_down:](../../releases/latest/download/ml_amt.dll)| ✔ Yes |
|
| [Avatar Motion Tweaker](/ml_amt/README.md) | ml_amt | 1.3.7 [:arrow_down:](../../releases/latest/download/ml_amt.dll)| ✔ Yes<br>Update review |
|
||||||
| [Avatar Synced Look](/ml_asl/README.md) | ml_asl | 1.0.0 [:arrow_down:](../../releases/latest/download/ml_asl.dll)| ✔ Yes |
|
| [Avatar Synced Look](/ml_asl/README.md) | ml_asl | 1.0.1 [:arrow_down:](../../releases/latest/download/ml_asl.dll)| ✔ Yes<br>Update review |
|
||||||
| [Desktop Head Tracking](/ml_dht/README.md) | ml_dht | 1.2.0 [:arrow_down:](../../releases/latest/download/ml_dht.dll) | ✔ Yes |
|
| [Desktop Head Tracking](/ml_dht/README.md) | ml_dht | 1.2.1 [:arrow_down:](../../releases/latest/download/ml_dht.dll) | ✔ Yes<br>Update review |
|
||||||
| [Leap Motion Extension](/ml_lme/README.md)| ml_lme | 1.4.5 [:arrow_down:](../../releases/latest/download/ml_lme.dll)| ✔ Yes |
|
| [Leap Motion Extension](/ml_lme/README.md)| ml_lme | 1.4.6 [:arrow_down:](../../releases/latest/download/ml_lme.dll)| ✔ Yes<br>Update review |
|
||||||
| [Pickup Arm Movement](/ml_pam/README.md)| ml_pam | 1.0.9 [:arrow_down:](../../releases/latest/download/ml_pam.dll)| ✔ Yes |
|
| [Pickup Arm Movement](/ml_pam/README.md)| ml_pam | 1.1.0 [:arrow_down:](../../releases/latest/download/ml_pam.dll)| ✔ Yes<br>Update review |
|
||||||
| [Player Movement Copycat](/ml_pmc/README.md)| ml_pmc | 1.0.4 [:arrow_down:](../../releases/latest/download/ml_pmc.dll)| ✔ Yes |
|
| [Player Movement Copycat](/ml_pmc/README.md)| ml_pmc | 1.0.5 [:arrow_down:](../../releases/latest/download/ml_pmc.dll)| ✔ Yes<br>Update review |
|
||||||
| [Player Ragdoll Mod](/ml_prm/README.md) | ml_prm | 1.1.2 [:arrow_down:](../../releases/latest/download/ml_prm.dll)| ✔ Yes |
|
| [Player Ragdoll Mod](/ml_prm/README.md) | ml_prm | 1.1.3 [:arrow_down:](../../releases/latest/download/ml_prm.dll)| ✔ Yes<br>Update review |
|
||||||
| [Players Instance Notifier](/ml_pin/README.md) | ml_pin | 1.0.1 [:arrow_down:](../../releases/latest/download/ml_ml_pin.dll)| ✔ Yes |
|
| [Players Instance Notifier](/ml_pin/README.md) | ml_pin | 1.0.2 [:arrow_down:](../../releases/latest/download/ml_ml_pin.dll)| ✔ Yes<br>Update review |
|
||||||
| [Vive Extended Input](/ml_vei/README.md) | ml_vei | 1.0.0 [:arrow_down:](../../releases/latest/download/ml_vei.dll)| ✔ Yes |
|
| [Vive Extended Input](/ml_vei/README.md) | ml_vei | 1.0.1 [:arrow_down:](../../releases/latest/download/ml_vei.dll)| ✔ Yes<br>Update review |
|
||||||
|
|
||||||
**Archived mods:**
|
**Archived mods:**
|
||||||
| Full name | Short name | Notes |
|
| Full name | Short name | Notes |
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.3.7-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_amt.AvatarMotionTweaker), "AvatarMotionTweaker", "1.3.7", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace ml_asl
|
namespace ml_asl
|
||||||
{
|
{
|
||||||
public class AvatarSyncedLook : MelonLoader.MelonMod
|
public class AvatarSyncedLook : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
Settings.Init();
|
Settings.Init();
|
||||||
|
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod("UpdatePlayerAvatarMovementData", BindingFlags.NonPublic | BindingFlags.Instance),
|
typeof(PlayerSetup).GetMethod("UpdatePlayerAvatarMovementData", BindingFlags.NonPublic | BindingFlags.Instance),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(AvatarSyncedLook).GetMethod(nameof(OnPlayerAvatarMovementDataUpdate_Postfix), BindingFlags.NonPublic | BindingFlags.Static))
|
new HarmonyLib.HarmonyMethod(typeof(AvatarSyncedLook).GetMethod(nameof(OnPlayerAvatarMovementDataUpdate_Postfix), BindingFlags.NonPublic | BindingFlags.Static))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnPlayerAvatarMovementDataUpdate_Postfix(ref PlayerSetup __instance, PlayerAvatarMovementData ____playerAvatarMovementData)
|
static void OnPlayerAvatarMovementDataUpdate_Postfix(ref PlayerSetup __instance, PlayerAvatarMovementData ____playerAvatarMovementData)
|
||||||
{
|
{
|
||||||
if(Settings.Enabled && (__instance.EyeMovementController != null))
|
if(Settings.Enabled && (__instance.EyeMovementController != null))
|
||||||
____playerAvatarMovementData.EyeTrackingOverride = true;
|
____playerAvatarMovementData.EyeTrackingOverride = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_asl.AvatarSyncedLook), "AvatarSyncedLook", "1.0.1-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_asl.AvatarSyncedLook), "AvatarSyncedLook", "1.0.1", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
||||||
|
|
|
@ -1,64 +1,64 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
<PackageId>AvatarSyncedLook</PackageId>
|
<PackageId>AvatarSyncedLook</PackageId>
|
||||||
<Authors>SDraw</Authors>
|
<Authors>SDraw</Authors>
|
||||||
<Company>None</Company>
|
<Company>None</Company>
|
||||||
<Product>AvatarSyncedLook</Product>
|
<Product>AvatarSyncedLook</Product>
|
||||||
<Version>1.0.1</Version>
|
<Version>1.0.1</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="resources\mod_menu.js" />
|
<None Remove="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="0Harmony">
|
<Reference Include="0Harmony">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="Assembly-CSharp">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp-firstpass">
|
<Reference Include="Assembly-CSharp-firstpass">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="cohtml.Net">
|
<Reference Include="cohtml.Net">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Cohtml.Runtime">
|
<Reference Include="Cohtml.Runtime">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MelonLoader">
|
<Reference Include="MelonLoader">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
||||||
<EmbeddedResource Include="resources\mod_menu.js" />
|
<EmbeddedResource Include="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
class DataParser
|
class DataParser
|
||||||
{
|
{
|
||||||
MemoryMapReader m_mapReader = null;
|
MemoryMapReader m_mapReader = null;
|
||||||
byte[] m_buffer = null;
|
byte[] m_buffer = null;
|
||||||
TrackingData m_trackingData;
|
TrackingData m_trackingData;
|
||||||
|
|
||||||
public DataParser()
|
public DataParser()
|
||||||
{
|
{
|
||||||
m_buffer = new byte[1024];
|
m_buffer = new byte[1024];
|
||||||
m_mapReader = new MemoryMapReader();
|
m_mapReader = new MemoryMapReader();
|
||||||
m_mapReader.Open("head/data");
|
m_mapReader.Open("head/data");
|
||||||
}
|
}
|
||||||
~DataParser()
|
~DataParser()
|
||||||
{
|
{
|
||||||
m_mapReader.Close();
|
m_mapReader.Close();
|
||||||
m_mapReader = null;
|
m_mapReader = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if(m_mapReader.Read(ref m_buffer))
|
if(m_mapReader.Read(ref m_buffer))
|
||||||
m_trackingData = TrackingData.ToObject(m_buffer);
|
m_trackingData = TrackingData.ToObject(m_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ref TrackingData GetLatestTrackingData() => ref m_trackingData;
|
public ref TrackingData GetLatestTrackingData() => ref m_trackingData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,197 +1,197 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Core.Player.EyeMovement;
|
using ABI_RC.Core.Player.EyeMovement;
|
||||||
using ABI_RC.Systems.FaceTracking;
|
using ABI_RC.Systems.FaceTracking;
|
||||||
using ABI_RC.Systems.VRModeSwitch;
|
using ABI_RC.Systems.VRModeSwitch;
|
||||||
using RootMotion.FinalIK;
|
using RootMotion.FinalIK;
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using ViveSR.anipal.Lip;
|
using ViveSR.anipal.Lip;
|
||||||
|
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
[DisallowMultipleComponent]
|
[DisallowMultipleComponent]
|
||||||
class HeadTracked : MonoBehaviour
|
class HeadTracked : MonoBehaviour
|
||||||
{
|
{
|
||||||
static FieldInfo ms_emotePlaying = typeof(PlayerSetup).GetField("_emotePlaying", BindingFlags.NonPublic | BindingFlags.Instance);
|
static FieldInfo ms_emotePlaying = typeof(PlayerSetup).GetField("_emotePlaying", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
|
||||||
bool m_enabled = false;
|
bool m_enabled = false;
|
||||||
bool m_headTracking = true;
|
bool m_headTracking = true;
|
||||||
float m_smoothing = 0.5f;
|
float m_smoothing = 0.5f;
|
||||||
|
|
||||||
CVRAvatar m_avatarDescriptor = null;
|
CVRAvatar m_avatarDescriptor = null;
|
||||||
Transform m_camera = null;
|
Transform m_camera = null;
|
||||||
LookAtIK m_lookIK = null;
|
LookAtIK m_lookIK = null;
|
||||||
Transform m_headBone = null;
|
Transform m_headBone = null;
|
||||||
|
|
||||||
Vector3 m_headPosition;
|
Vector3 m_headPosition;
|
||||||
Quaternion m_headRotation;
|
Quaternion m_headRotation;
|
||||||
Vector2 m_gazeDirection;
|
Vector2 m_gazeDirection;
|
||||||
float m_blinkProgress = 0f;
|
float m_blinkProgress = 0f;
|
||||||
LipData_v2 m_lipData;
|
LipData_v2 m_lipData;
|
||||||
bool m_lipDataSent = false;
|
bool m_lipDataSent = false;
|
||||||
|
|
||||||
Quaternion m_bindRotation;
|
Quaternion m_bindRotation;
|
||||||
Quaternion m_lastHeadRotation;
|
Quaternion m_lastHeadRotation;
|
||||||
|
|
||||||
internal HeadTracked()
|
internal HeadTracked()
|
||||||
{
|
{
|
||||||
m_lipData = new LipData_v2();
|
m_lipData = new LipData_v2();
|
||||||
m_lipData.frame = 0;
|
m_lipData.frame = 0;
|
||||||
m_lipData.time = 0;
|
m_lipData.time = 0;
|
||||||
m_lipData.image = IntPtr.Zero;
|
m_lipData.image = IntPtr.Zero;
|
||||||
m_lipData.prediction_data = new PredictionData_v2();
|
m_lipData.prediction_data = new PredictionData_v2();
|
||||||
m_lipData.prediction_data.blend_shape_weight = new float[(int)LipShape_v2.Max];
|
m_lipData.prediction_data.blend_shape_weight = new float[(int)LipShape_v2.Max];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unity events
|
// Unity events
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
SetEnabled(Settings.Enabled);
|
SetEnabled(Settings.Enabled);
|
||||||
SetHeadTracking(Settings.HeadTracking);
|
SetHeadTracking(Settings.HeadTracking);
|
||||||
SetSmoothing(Settings.Smoothing);
|
SetSmoothing(Settings.Smoothing);
|
||||||
|
|
||||||
Settings.EnabledChange += this.SetEnabled;
|
Settings.EnabledChange += this.SetEnabled;
|
||||||
Settings.HeadTrackingChange += this.SetHeadTracking;
|
Settings.HeadTrackingChange += this.SetHeadTracking;
|
||||||
Settings.SmoothingChange += this.SetSmoothing;
|
Settings.SmoothingChange += this.SetSmoothing;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy()
|
void OnDestroy()
|
||||||
{
|
{
|
||||||
Settings.EnabledChange -= this.SetEnabled;
|
Settings.EnabledChange -= this.SetEnabled;
|
||||||
Settings.HeadTrackingChange -= this.SetHeadTracking;
|
Settings.HeadTrackingChange -= this.SetHeadTracking;
|
||||||
Settings.SmoothingChange -= this.SetSmoothing;
|
Settings.SmoothingChange -= this.SetSmoothing;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update()
|
void Update()
|
||||||
{
|
{
|
||||||
if(m_lipDataSent)
|
if(m_lipDataSent)
|
||||||
m_lipDataSent = false;
|
m_lipDataSent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tracking updates
|
// Tracking updates
|
||||||
public void UpdateTrackingData(ref TrackingData p_data)
|
public void UpdateTrackingData(ref TrackingData p_data)
|
||||||
{
|
{
|
||||||
m_headPosition.Set(p_data.m_headPositionX * (Settings.Mirrored ? -1f : 1f), p_data.m_headPositionY, p_data.m_headPositionZ);
|
m_headPosition.Set(p_data.m_headPositionX * (Settings.Mirrored ? -1f : 1f), p_data.m_headPositionY, p_data.m_headPositionZ);
|
||||||
m_headRotation.Set(p_data.m_headRotationX, p_data.m_headRotationY * (Settings.Mirrored ? -1f : 1f), p_data.m_headRotationZ * (Settings.Mirrored ? -1f : 1f), p_data.m_headRotationW);
|
m_headRotation.Set(p_data.m_headRotationX, p_data.m_headRotationY * (Settings.Mirrored ? -1f : 1f), p_data.m_headRotationZ * (Settings.Mirrored ? -1f : 1f), p_data.m_headRotationW);
|
||||||
m_gazeDirection.Set(Settings.Mirrored ? (1f - p_data.m_gazeX) : p_data.m_gazeX, p_data.m_gazeY);
|
m_gazeDirection.Set(Settings.Mirrored ? (1f - p_data.m_gazeX) : p_data.m_gazeX, p_data.m_gazeY);
|
||||||
m_blinkProgress = p_data.m_blink;
|
m_blinkProgress = p_data.m_blink;
|
||||||
|
|
||||||
float l_weight = Mathf.Clamp01(Mathf.InverseLerp(0.25f, 1f, Mathf.Abs(p_data.m_mouthShape)));
|
float l_weight = Mathf.Clamp01(Mathf.InverseLerp(0.25f, 1f, Mathf.Abs(p_data.m_mouthShape)));
|
||||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Jaw_Open] = p_data.m_mouthOpen;
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Jaw_Open] = p_data.m_mouthOpen;
|
||||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Pout] = ((p_data.m_mouthShape > 0f) ? l_weight : 0f);
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Pout] = ((p_data.m_mouthShape > 0f) ? l_weight : 0f);
|
||||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Left] = ((p_data.m_mouthShape < 0f) ? l_weight : 0f);
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Left] = ((p_data.m_mouthShape < 0f) ? l_weight : 0f);
|
||||||
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Right] = ((p_data.m_mouthShape < 0f) ? l_weight : 0f);
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Right] = ((p_data.m_mouthShape < 0f) ? l_weight : 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnLookIKPostUpdate()
|
void OnLookIKPostUpdate()
|
||||||
{
|
{
|
||||||
if(m_enabled && m_headTracking && (m_headBone != null))
|
if(m_enabled && m_headTracking && (m_headBone != null))
|
||||||
{
|
{
|
||||||
m_lastHeadRotation = Quaternion.Slerp(m_lastHeadRotation, m_avatarDescriptor.transform.rotation * (m_headRotation * m_bindRotation), m_smoothing);
|
m_lastHeadRotation = Quaternion.Slerp(m_lastHeadRotation, m_avatarDescriptor.transform.rotation * (m_headRotation * m_bindRotation), m_smoothing);
|
||||||
|
|
||||||
if(!(bool)ms_emotePlaying.GetValue(PlayerSetup.Instance))
|
if(!(bool)ms_emotePlaying.GetValue(PlayerSetup.Instance))
|
||||||
m_headBone.rotation = m_lastHeadRotation;
|
m_headBone.rotation = m_lastHeadRotation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Game events
|
// Game events
|
||||||
internal void OnSetupAvatar()
|
internal void OnSetupAvatar()
|
||||||
{
|
{
|
||||||
m_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
m_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
||||||
m_avatarDescriptor = PlayerSetup.Instance._avatar.GetComponent<CVRAvatar>();
|
m_avatarDescriptor = PlayerSetup.Instance._avatar.GetComponent<CVRAvatar>();
|
||||||
m_headBone = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Head);
|
m_headBone = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
||||||
|
|
||||||
if(m_headBone != null)
|
if(m_headBone != null)
|
||||||
m_bindRotation = (m_avatarDescriptor.transform.GetMatrix().inverse * m_headBone.GetMatrix()).rotation;
|
m_bindRotation = (m_avatarDescriptor.transform.GetMatrix().inverse * m_headBone.GetMatrix()).rotation;
|
||||||
|
|
||||||
if(m_lookIK != null)
|
if(m_lookIK != null)
|
||||||
m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate);
|
m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate);
|
||||||
|
|
||||||
}
|
}
|
||||||
internal void OnAvatarClear()
|
internal void OnAvatarClear()
|
||||||
{
|
{
|
||||||
m_avatarDescriptor = null;
|
m_avatarDescriptor = null;
|
||||||
m_lookIK = null;
|
m_lookIK = null;
|
||||||
m_headBone = null;
|
m_headBone = null;
|
||||||
m_lastHeadRotation = Quaternion.identity;
|
m_lastHeadRotation = Quaternion.identity;
|
||||||
m_bindRotation = Quaternion.identity;
|
m_bindRotation = Quaternion.identity;
|
||||||
}
|
}
|
||||||
internal void OnAvatarReinitialize()
|
internal void OnAvatarReinitialize()
|
||||||
{
|
{
|
||||||
m_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
m_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
||||||
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
||||||
if(m_lookIK != null)
|
if(m_lookIK != null)
|
||||||
m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate);
|
m_lookIK.onPostSolverUpdate.AddListener(this.OnLookIKPostUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void OnEyeControllerUpdate(EyeMovementController p_component)
|
internal void OnEyeControllerUpdate(EyeMovementController p_component)
|
||||||
{
|
{
|
||||||
if(m_enabled)
|
if(m_enabled)
|
||||||
{
|
{
|
||||||
// Gaze
|
// Gaze
|
||||||
if(Settings.EyeTracking && (m_camera != null))
|
if(Settings.EyeTracking && (m_camera != null))
|
||||||
{
|
{
|
||||||
p_component.manualViewTarget = true;
|
p_component.manualViewTarget = true;
|
||||||
p_component.targetViewPosition = m_camera.position + m_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * 2f, (m_gazeDirection.y - 0.5f) * 2f, 1f);
|
p_component.targetViewPosition = m_camera.position + m_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * 2f, (m_gazeDirection.y - 0.5f) * 2f, 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blink
|
// Blink
|
||||||
if(Settings.Blinking)
|
if(Settings.Blinking)
|
||||||
{
|
{
|
||||||
p_component.manualBlinking = true;
|
p_component.manualBlinking = true;
|
||||||
p_component.blinkProgress = m_blinkProgress;
|
p_component.blinkProgress = m_blinkProgress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool UpdateFaceTracking(CVRFaceTracking p_component)
|
internal bool UpdateFaceTracking(CVRFaceTracking p_component)
|
||||||
{
|
{
|
||||||
bool l_result = false;
|
bool l_result = false;
|
||||||
if(m_enabled && Settings.FaceTracking)
|
if(m_enabled && Settings.FaceTracking)
|
||||||
{
|
{
|
||||||
if(!m_lipDataSent)
|
if(!m_lipDataSent)
|
||||||
{
|
{
|
||||||
FaceTrackingManager.Instance.SubmitNewFacialData(m_lipData);
|
FaceTrackingManager.Instance.SubmitNewFacialData(m_lipData);
|
||||||
m_lipDataSent = true;
|
m_lipDataSent = true;
|
||||||
}
|
}
|
||||||
p_component.LipSyncWasUpdated = true;
|
p_component.LipSyncWasUpdated = true;
|
||||||
p_component.UpdateShapesLocal_Private();
|
p_component.UpdateShapesLocal_Private();
|
||||||
|
|
||||||
l_result = true;
|
l_result = true;
|
||||||
}
|
}
|
||||||
return l_result;
|
return l_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
void SetEnabled(bool p_state)
|
void SetEnabled(bool p_state)
|
||||||
{
|
{
|
||||||
if(m_enabled != p_state)
|
if(m_enabled != p_state)
|
||||||
{
|
{
|
||||||
m_enabled = p_state;
|
m_enabled = p_state;
|
||||||
TryRestoreHeadRotation();
|
TryRestoreHeadRotation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void SetHeadTracking(bool p_state)
|
void SetHeadTracking(bool p_state)
|
||||||
{
|
{
|
||||||
if(m_headTracking != p_state)
|
if(m_headTracking != p_state)
|
||||||
{
|
{
|
||||||
m_headTracking = p_state;
|
m_headTracking = p_state;
|
||||||
TryRestoreHeadRotation();
|
TryRestoreHeadRotation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void SetSmoothing(float p_value)
|
void SetSmoothing(float p_value)
|
||||||
{
|
{
|
||||||
m_smoothing = 1f - Mathf.Clamp(p_value, 0f, 0.99f);
|
m_smoothing = 1f - Mathf.Clamp(p_value, 0f, 0.99f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Arbitrary
|
// Arbitrary
|
||||||
void TryRestoreHeadRotation()
|
void TryRestoreHeadRotation()
|
||||||
{
|
{
|
||||||
if(m_enabled && m_headTracking)
|
if(m_enabled && m_headTracking)
|
||||||
m_lastHeadRotation = ((m_headBone != null) ? m_headBone.rotation : m_bindRotation);
|
m_lastHeadRotation = ((m_headBone != null) ? m_headBone.rotation : m_bindRotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
308
ml_dht/Main.cs
308
ml_dht/Main.cs
|
@ -1,155 +1,155 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Core.Player.EyeMovement;
|
using ABI_RC.Core.Player.EyeMovement;
|
||||||
using ABI_RC.Core.Savior;
|
using ABI_RC.Core.Savior;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
public class DesktopHeadTracking : MelonLoader.MelonMod
|
public class DesktopHeadTracking : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
static DesktopHeadTracking ms_instance = null;
|
static DesktopHeadTracking ms_instance = null;
|
||||||
|
|
||||||
DataParser m_dataParser = null;
|
DataParser m_dataParser = null;
|
||||||
HeadTracked m_localTracked = null;
|
HeadTracked m_localTracked = null;
|
||||||
|
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == null)
|
if(ms_instance == null)
|
||||||
ms_instance = this;
|
ms_instance = this;
|
||||||
|
|
||||||
Settings.Init();
|
Settings.Init();
|
||||||
|
|
||||||
// Patches
|
// Patches
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
|
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForInstances());
|
MelonLoader.MelonCoroutines.Start(WaitForInstances());
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Collections.IEnumerator WaitForInstances()
|
System.Collections.IEnumerator WaitForInstances()
|
||||||
{
|
{
|
||||||
while(MetaPort.Instance == null)
|
while(MetaPort.Instance == null)
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
while(PlayerSetup.Instance == null)
|
while(PlayerSetup.Instance == null)
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
m_dataParser = new DataParser();
|
m_dataParser = new DataParser();
|
||||||
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
||||||
|
|
||||||
// If you think it's a joke to put patch here, go on, try to put it in OnInitializeMelon, you melon :>
|
// If you think it's a joke to put patch here, go on, try to put it in OnInitializeMelon, you melon :>
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(EyeMovementController).GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic),
|
typeof(EyeMovementController).GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnEyeControllerUpdate_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnEyeControllerUpdate_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(CVRFaceTracking).GetMethod("UpdateLocalData", BindingFlags.Instance | BindingFlags.NonPublic),
|
typeof(CVRFaceTracking).GetMethod("UpdateLocalData", BindingFlags.Instance | BindingFlags.NonPublic),
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnFaceTrackingLocalUpdate_Prefix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnFaceTrackingLocalUpdate_Prefix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDeinitializeMelon()
|
public override void OnDeinitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == this)
|
if(ms_instance == this)
|
||||||
ms_instance = null;
|
ms_instance = null;
|
||||||
|
|
||||||
m_dataParser = null;
|
m_dataParser = null;
|
||||||
m_localTracked = null;
|
m_localTracked = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnUpdate()
|
public override void OnUpdate()
|
||||||
{
|
{
|
||||||
if(Settings.Enabled && (m_dataParser != null))
|
if(Settings.Enabled && (m_dataParser != null))
|
||||||
{
|
{
|
||||||
m_dataParser.Update();
|
m_dataParser.Update();
|
||||||
if(m_localTracked != null)
|
if(m_localTracked != null)
|
||||||
m_localTracked.UpdateTrackingData(ref m_dataParser.GetLatestTrackingData());
|
m_localTracked.UpdateTrackingData(ref m_dataParser.GetLatestTrackingData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
||||||
void OnSetupAvatar()
|
void OnSetupAvatar()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localTracked != null)
|
if(m_localTracked != null)
|
||||||
m_localTracked.OnSetupAvatar();
|
m_localTracked.OnSetupAvatar();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
||||||
void OnAvatarClear()
|
void OnAvatarClear()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localTracked != null)
|
if(m_localTracked != null)
|
||||||
m_localTracked.OnAvatarClear();
|
m_localTracked.OnAvatarClear();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
||||||
void OnAvatarReinitialize()
|
void OnAvatarReinitialize()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localTracked != null)
|
if(m_localTracked != null)
|
||||||
m_localTracked.OnAvatarReinitialize();
|
m_localTracked.OnAvatarReinitialize();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnEyeControllerUpdate_Postfix(ref EyeMovementController __instance) => ms_instance?.OnEyeControllerUpdate(__instance);
|
static void OnEyeControllerUpdate_Postfix(ref EyeMovementController __instance) => ms_instance?.OnEyeControllerUpdate(__instance);
|
||||||
void OnEyeControllerUpdate(EyeMovementController p_component)
|
void OnEyeControllerUpdate(EyeMovementController p_component)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(p_component.IsLocal && (m_localTracked != null))
|
if(p_component.IsLocal && (m_localTracked != null))
|
||||||
m_localTracked.OnEyeControllerUpdate(p_component);
|
m_localTracked.OnEyeControllerUpdate(p_component);
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool OnFaceTrackingLocalUpdate_Prefix(ref CVRFaceTracking __instance)
|
static bool OnFaceTrackingLocalUpdate_Prefix(ref CVRFaceTracking __instance)
|
||||||
{
|
{
|
||||||
bool? l_result = ms_instance?.OnFaceTrackingLocalUpdate(__instance);
|
bool? l_result = ms_instance?.OnFaceTrackingLocalUpdate(__instance);
|
||||||
return l_result.GetValueOrDefault(true);
|
return l_result.GetValueOrDefault(true);
|
||||||
}
|
}
|
||||||
bool OnFaceTrackingLocalUpdate(CVRFaceTracking p_component)
|
bool OnFaceTrackingLocalUpdate(CVRFaceTracking p_component)
|
||||||
{
|
{
|
||||||
bool l_result = true;
|
bool l_result = true;
|
||||||
if(p_component.UseFacialTracking && (m_localTracked != null))
|
if(p_component.UseFacialTracking && (m_localTracked != null))
|
||||||
l_result = !m_localTracked.UpdateFaceTracking(p_component);
|
l_result = !m_localTracked.UpdateFaceTracking(p_component);
|
||||||
return l_result;
|
return l_result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.2.1-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.2.1", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
|
@ -1,23 +1,23 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.UI;
|
using ABI_RC.Core.UI;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
static class Utils
|
static class Utils
|
||||||
{
|
{
|
||||||
static readonly object[] ms_emptyArray = new object[0];
|
static readonly object[] ms_emptyArray = new object[0];
|
||||||
static readonly FieldInfo ms_view = typeof(CohtmlControlledViewWrapper).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
static readonly FieldInfo ms_view = typeof(CohtmlControlledViewWrapper).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
static readonly MethodInfo ms_updateShapesLocal = typeof(CVRFaceTracking).GetMethod("UpdateShapesLocal", BindingFlags.NonPublic | BindingFlags.Instance);
|
static readonly MethodInfo ms_updateShapesLocal = typeof(CVRFaceTracking).GetMethod("UpdateShapesLocal", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
|
||||||
static public void ExecuteScript(this CohtmlControlledViewWrapper p_instance, string p_script) => ((cohtml.Net.View)ms_view.GetValue(p_instance)).ExecuteScript(p_script);
|
static public void ExecuteScript(this CohtmlControlledViewWrapper p_instance, string p_script) => ((cohtml.Net.View)ms_view.GetValue(p_instance)).ExecuteScript(p_script);
|
||||||
|
|
||||||
static public void UpdateShapesLocal_Private(this CVRFaceTracking p_instance) => ms_updateShapesLocal?.Invoke(p_instance, ms_emptyArray);
|
static public void UpdateShapesLocal_Private(this CVRFaceTracking p_instance) => ms_updateShapesLocal?.Invoke(p_instance, ms_emptyArray);
|
||||||
|
|
||||||
public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false)
|
public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false)
|
||||||
{
|
{
|
||||||
return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one);
|
return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,84 +1,84 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
<PackageId>DesktopHeadTracking</PackageId>
|
<PackageId>DesktopHeadTracking</PackageId>
|
||||||
<Authors>SDraw</Authors>
|
<Authors>SDraw</Authors>
|
||||||
<Company>None</Company>
|
<Company>None</Company>
|
||||||
<Product>DesktopHeadTracking</Product>
|
<Product>DesktopHeadTracking</Product>
|
||||||
<Version>1.2.1</Version>
|
<Version>1.2.1</Version>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
<DebugSymbols>false</DebugSymbols>
|
<DebugSymbols>false</DebugSymbols>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="DesktopHeadTracking.json" />
|
<None Remove="DesktopHeadTracking.json" />
|
||||||
<None Remove="resources\mod_menu.js" />
|
<None Remove="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="resources\mod_menu.js" />
|
<EmbeddedResource Include="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="0Harmony">
|
<Reference Include="0Harmony">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="Assembly-CSharp">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp-firstpass">
|
<Reference Include="Assembly-CSharp-firstpass">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="cohtml.Net">
|
<Reference Include="cohtml.Net">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Cohtml.Runtime">
|
<Reference Include="Cohtml.Runtime">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MelonLoader">
|
<Reference Include="MelonLoader">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine">
|
<Reference Include="UnityEngine">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AnimationModule">
|
<Reference Include="UnityEngine.AnimationModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
332
ml_lme/Main.cs
332
ml_lme/Main.cs
|
@ -1,166 +1,166 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace ml_lme
|
namespace ml_lme
|
||||||
{
|
{
|
||||||
|
|
||||||
public class LeapMotionExtension : MelonLoader.MelonMod
|
public class LeapMotionExtension : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
static LeapMotionExtension ms_instance = null;
|
static LeapMotionExtension ms_instance = null;
|
||||||
|
|
||||||
LeapManager m_leapManager = null;
|
LeapManager m_leapManager = null;
|
||||||
|
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == null)
|
if(ms_instance == null)
|
||||||
ms_instance = this;
|
ms_instance = this;
|
||||||
|
|
||||||
DependenciesHandler.ExtractDependencies();
|
DependenciesHandler.ExtractDependencies();
|
||||||
Settings.Init();
|
Settings.Init();
|
||||||
AssetsHandler.Load();
|
AssetsHandler.Load();
|
||||||
|
|
||||||
// Patches
|
// Patches
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetControllerRayScale)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetControllerRayScale)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnRayScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnRayScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod("SetPlaySpaceScale", BindingFlags.NonPublic | BindingFlags.Instance),
|
typeof(PlayerSetup).GetMethod("SetPlaySpaceScale", BindingFlags.NonPublic | BindingFlags.Instance),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
|
|
||||||
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Grab), BindingFlags.Public | BindingFlags.Instance),
|
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Grab), BindingFlags.Public | BindingFlags.Instance),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnPickupGrab_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(LeapMotionExtension).GetMethod(nameof(OnPickupGrab_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
|
|
||||||
ModSupporter.Init();
|
ModSupporter.Init();
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForRootLogic());
|
MelonLoader.MelonCoroutines.Start(WaitForRootLogic());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDeinitializeMelon()
|
public override void OnDeinitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == this)
|
if(ms_instance == this)
|
||||||
ms_instance = null;
|
ms_instance = null;
|
||||||
|
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
Object.Destroy(m_leapManager);
|
Object.Destroy(m_leapManager);
|
||||||
m_leapManager = null;
|
m_leapManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator WaitForRootLogic()
|
IEnumerator WaitForRootLogic()
|
||||||
{
|
{
|
||||||
while(ABI_RC.Core.RootLogic.Instance == null)
|
while(ABI_RC.Core.RootLogic.Instance == null)
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
m_leapManager = new GameObject("LeapMotionManager").AddComponent<LeapManager>();
|
m_leapManager = new GameObject("LeapMotionManager").AddComponent<LeapManager>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Patches
|
// Patches
|
||||||
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
||||||
void OnAvatarClear()
|
void OnAvatarClear()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnAvatarClear();
|
m_leapManager.OnAvatarClear();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
||||||
void OnSetupAvatar()
|
void OnSetupAvatar()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnAvatarSetup();
|
m_leapManager.OnAvatarSetup();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
||||||
void OnAvatarReinitialize()
|
void OnAvatarReinitialize()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnAvatarReinitialize();
|
m_leapManager.OnAvatarReinitialize();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnRayScale_Postfix(float __0) => ms_instance?.OnRayScale(__0);
|
static void OnRayScale_Postfix(float __0) => ms_instance?.OnRayScale(__0);
|
||||||
void OnRayScale(float p_scale)
|
void OnRayScale(float p_scale)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnRayScale(p_scale);
|
m_leapManager.OnRayScale(p_scale);
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnPlayspaceScale_Postfix(float ____avatarScaleRelation) => ms_instance?.OnPlayspaceScale(____avatarScaleRelation);
|
static void OnPlayspaceScale_Postfix(float ____avatarScaleRelation) => ms_instance?.OnPlayspaceScale(____avatarScaleRelation);
|
||||||
void OnPlayspaceScale(float p_relation)
|
void OnPlayspaceScale(float p_relation)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnPlayspaceScale(p_relation);
|
m_leapManager.OnPlayspaceScale(p_relation);
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnPickupGrab_Postfix(ref CVRPickupObject __instance) => ms_instance?.OnPickupGrab(__instance);
|
static void OnPickupGrab_Postfix(ref CVRPickupObject __instance) => ms_instance?.OnPickupGrab(__instance);
|
||||||
void OnPickupGrab(CVRPickupObject p_pickup)
|
void OnPickupGrab(CVRPickupObject p_pickup)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_leapManager != null)
|
if(m_leapManager != null)
|
||||||
m_leapManager.OnPickupGrab(p_pickup);
|
m_leapManager.OnPickupGrab(p_pickup);
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
|
|
||||||
namespace ml_lme
|
namespace ml_lme
|
||||||
{
|
{
|
||||||
static class PoseHelper
|
static class PoseHelper
|
||||||
{
|
{
|
||||||
public static void ForceTPose(Animator p_animator)
|
public static void ForceTPose(Animator p_animator)
|
||||||
{
|
{
|
||||||
if(p_animator.isHuman)
|
if(p_animator.isHuman)
|
||||||
{
|
{
|
||||||
HumanPoseHandler l_handler = new HumanPoseHandler(p_animator.avatar, p_animator.transform);
|
HumanPoseHandler l_handler = new HumanPoseHandler(p_animator.avatar, p_animator.transform);
|
||||||
HumanPose l_pose = new HumanPose();
|
HumanPose l_pose = new HumanPose();
|
||||||
l_handler.GetHumanPose(ref l_pose);
|
l_handler.GetHumanPose(ref l_pose);
|
||||||
|
|
||||||
for(int i=0, j = Mathf.Min(l_pose.muscles.Length,MusclePoses.TPoseMuscles.Length); i < j; i++)
|
for(int i=0, j = Mathf.Min(l_pose.muscles.Length,MusclePoses.TPoseMuscles.Length); i < j; i++)
|
||||||
l_pose.muscles[i] = MusclePoses.TPoseMuscles[i];
|
l_pose.muscles[i] = MusclePoses.TPoseMuscles[i];
|
||||||
|
|
||||||
l_pose.bodyPosition = Vector3.up;
|
l_pose.bodyPosition = Vector3.up;
|
||||||
l_pose.bodyRotation = Quaternion.identity;
|
l_pose.bodyRotation = Quaternion.identity;
|
||||||
l_handler.SetHumanPose(ref l_pose);
|
l_handler.SetHumanPose(ref l_pose);
|
||||||
l_handler.Dispose();
|
l_handler.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.4.6-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_lme.LeapMotionExtension), "LeapMotionExtension", "1.4.6", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonOptionalDependencies("ml_pmc")]
|
[assembly: MelonLoader.MelonOptionalDependencies("ml_pmc")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
|
|
320
ml_pam/Main.cs
320
ml_pam/Main.cs
|
@ -1,160 +1,160 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.InteractionSystem;
|
using ABI_RC.Core.InteractionSystem;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace ml_pam
|
namespace ml_pam
|
||||||
{
|
{
|
||||||
public class PickupArmMovement : MelonLoader.MelonMod
|
public class PickupArmMovement : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
static PickupArmMovement ms_instance = null;
|
static PickupArmMovement ms_instance = null;
|
||||||
|
|
||||||
ArmMover m_localMover = null;
|
ArmMover m_localMover = null;
|
||||||
|
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == null)
|
if(ms_instance == null)
|
||||||
ms_instance = this;
|
ms_instance = this;
|
||||||
|
|
||||||
Settings.Init();
|
Settings.Init();
|
||||||
|
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.NonPublic | BindingFlags.Static))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.NonPublic | BindingFlags.Static))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
typeof(IKSystem).GetMethod(nameof(IKSystem.ReinitializeAvatar), BindingFlags.Instance | BindingFlags.Public),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnAvatarReinitialize_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Grab)),
|
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Grab)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnCVRPickupObjectGrab_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnCVRPickupObjectGrab_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Drop)),
|
typeof(CVRPickupObject).GetMethod(nameof(CVRPickupObject.Drop)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnCVRPickupObjectDrop_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnCVRPickupObjectDrop_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod("SetPlaySpaceScale", BindingFlags.NonPublic | BindingFlags.Instance),
|
typeof(PlayerSetup).GetMethod("SetPlaySpaceScale", BindingFlags.NonPublic | BindingFlags.Instance),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(PickupArmMovement).GetMethod(nameof(OnPlayspaceScale_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
|
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
|
MelonLoader.MelonCoroutines.Start(WaitForLocalPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
System.Collections.IEnumerator WaitForLocalPlayer()
|
System.Collections.IEnumerator WaitForLocalPlayer()
|
||||||
{
|
{
|
||||||
while(PlayerSetup.Instance == null)
|
while(PlayerSetup.Instance == null)
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
m_localMover = PlayerSetup.Instance.gameObject.AddComponent<ArmMover>();
|
m_localMover = PlayerSetup.Instance.gameObject.AddComponent<ArmMover>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDeinitializeMelon()
|
public override void OnDeinitializeMelon()
|
||||||
{
|
{
|
||||||
if(ms_instance == this)
|
if(ms_instance == this)
|
||||||
ms_instance = null;
|
ms_instance = null;
|
||||||
|
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
UnityEngine.Object.Destroy(m_localMover);
|
UnityEngine.Object.Destroy(m_localMover);
|
||||||
m_localMover = null;
|
m_localMover = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
||||||
void OnAvatarClear()
|
void OnAvatarClear()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
m_localMover.OnAvatarClear();
|
m_localMover.OnAvatarClear();
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
||||||
void OnSetupAvatar()
|
void OnSetupAvatar()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
m_localMover.OnAvatarSetup();
|
m_localMover.OnAvatarSetup();
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
static void OnAvatarReinitialize_Postfix() => ms_instance?.OnAvatarReinitialize();
|
||||||
void OnAvatarReinitialize()
|
void OnAvatarReinitialize()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
m_localMover.OnAvatarReinitialize();
|
m_localMover.OnAvatarReinitialize();
|
||||||
}
|
}
|
||||||
catch(System.Exception e)
|
catch(System.Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnCVRPickupObjectGrab_Postfix(ref CVRPickupObject __instance, ControllerRay __1, Vector3 __2) => ms_instance?.OnCVRPickupObjectGrab(__instance, __1, __2);
|
static void OnCVRPickupObjectGrab_Postfix(ref CVRPickupObject __instance, ControllerRay __1, Vector3 __2) => ms_instance?.OnCVRPickupObjectGrab(__instance, __1, __2);
|
||||||
void OnCVRPickupObjectGrab(CVRPickupObject p_pickup, ControllerRay p_ray, Vector3 p_hit)
|
void OnCVRPickupObjectGrab(CVRPickupObject p_pickup, ControllerRay p_ray, Vector3 p_hit)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(p_pickup.IsGrabbedByMe() && (m_localMover != null))
|
if(p_pickup.IsGrabbedByMe() && (m_localMover != null))
|
||||||
m_localMover.OnPickupGrab(p_pickup, p_ray, p_hit);
|
m_localMover.OnPickupGrab(p_pickup, p_ray, p_hit);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnCVRPickupObjectDrop_Postfix(ref CVRPickupObject __instance) => ms_instance?.OnCVRPickupObjectDrop(__instance);
|
static void OnCVRPickupObjectDrop_Postfix(ref CVRPickupObject __instance) => ms_instance?.OnCVRPickupObjectDrop(__instance);
|
||||||
void OnCVRPickupObjectDrop(CVRPickupObject p_pickup)
|
void OnCVRPickupObjectDrop(CVRPickupObject p_pickup)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
m_localMover.OnPickupDrop(p_pickup);
|
m_localMover.OnPickupDrop(p_pickup);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnPlayspaceScale_Postfix(float ____avatarScaleRelation) => ms_instance?.OnPlayspaceScale(____avatarScaleRelation);
|
static void OnPlayspaceScale_Postfix(float ____avatarScaleRelation) => ms_instance?.OnPlayspaceScale(____avatarScaleRelation);
|
||||||
void OnPlayspaceScale(float p_relation)
|
void OnPlayspaceScale(float p_relation)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(m_localMover != null)
|
if(m_localMover != null)
|
||||||
m_localMover.OnPlayspaceScale(p_relation);
|
m_localMover.OnPlayspaceScale(p_relation);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Error(e);
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using ABI_RC.Systems.IK;
|
using ABI_RC.Systems.IK;
|
||||||
|
|
||||||
namespace ml_pam
|
namespace ml_pam
|
||||||
{
|
{
|
||||||
static class PoseHelper
|
static class PoseHelper
|
||||||
{
|
{
|
||||||
public static void ForceTPose(Animator p_animator)
|
public static void ForceTPose(Animator p_animator)
|
||||||
{
|
{
|
||||||
if(p_animator.isHuman)
|
if(p_animator.isHuman)
|
||||||
{
|
{
|
||||||
HumanPoseHandler l_handler = new HumanPoseHandler(p_animator.avatar, p_animator.transform);
|
HumanPoseHandler l_handler = new HumanPoseHandler(p_animator.avatar, p_animator.transform);
|
||||||
HumanPose l_pose = new HumanPose();
|
HumanPose l_pose = new HumanPose();
|
||||||
l_handler.GetHumanPose(ref l_pose);
|
l_handler.GetHumanPose(ref l_pose);
|
||||||
|
|
||||||
for(int i = 0, j = Mathf.Min(l_pose.muscles.Length, MusclePoses.TPoseMuscles.Length); i < j; i++)
|
for(int i = 0, j = Mathf.Min(l_pose.muscles.Length, MusclePoses.TPoseMuscles.Length); i < j; i++)
|
||||||
l_pose.muscles[i] = MusclePoses.TPoseMuscles[i];
|
l_pose.muscles[i] = MusclePoses.TPoseMuscles[i];
|
||||||
|
|
||||||
l_pose.bodyPosition = Vector3.up;
|
l_pose.bodyPosition = Vector3.up;
|
||||||
l_pose.bodyRotation = Quaternion.identity;
|
l_pose.bodyRotation = Quaternion.identity;
|
||||||
l_handler.SetHumanPose(ref l_pose);
|
l_handler.SetHumanPose(ref l_pose);
|
||||||
l_handler.Dispose();
|
l_handler.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.1.0-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_pam.PickupArmMovement), "PickupArmMovement", "1.1.0", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPriority(1)]
|
[assembly: MelonLoader.MelonPriority(1)]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
using ABI_RC.Core.Savior;
|
using ABI_RC.Core.Savior;
|
||||||
using ABI_RC.Core.UI;
|
using ABI_RC.Core.UI;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace ml_pam
|
namespace ml_pam
|
||||||
{
|
{
|
||||||
static class Utils
|
static class Utils
|
||||||
{
|
{
|
||||||
static readonly FieldInfo ms_view = typeof(CohtmlControlledViewWrapper).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
static readonly FieldInfo ms_view = typeof(CohtmlControlledViewWrapper).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
|
||||||
public static bool IsInVR() => ((MetaPort.Instance != null) && MetaPort.Instance.isUsingVr);
|
public static bool IsInVR() => ((MetaPort.Instance != null) && MetaPort.Instance.isUsingVr);
|
||||||
|
|
||||||
static public void ExecuteScript(this CohtmlControlledViewWrapper p_instance, string p_script) => ((cohtml.Net.View)ms_view.GetValue(p_instance)).ExecuteScript(p_script);
|
static public void ExecuteScript(this CohtmlControlledViewWrapper p_instance, string p_script) => ((cohtml.Net.View)ms_view.GetValue(p_instance)).ExecuteScript(p_script);
|
||||||
|
|
||||||
// Extensions
|
// Extensions
|
||||||
public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false)
|
public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false)
|
||||||
{
|
{
|
||||||
return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one);
|
return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
226
ml_pin/Main.cs
226
ml_pin/Main.cs
|
@ -1,113 +1,113 @@
|
||||||
using ABI_RC.Core.AudioEffects;
|
using ABI_RC.Core.AudioEffects;
|
||||||
using ABI_RC.Core.Networking.IO.Social;
|
using ABI_RC.Core.Networking.IO.Social;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Core.Savior;
|
using ABI_RC.Core.Savior;
|
||||||
using ABI_RC.Systems.GameEventSystem;
|
using ABI_RC.Systems.GameEventSystem;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
|
||||||
namespace ml_pin
|
namespace ml_pin
|
||||||
{
|
{
|
||||||
public class PlayersInstanceNotifier : MelonLoader.MelonMod
|
public class PlayersInstanceNotifier : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
SoundManager m_soundManager = null;
|
SoundManager m_soundManager = null;
|
||||||
|
|
||||||
public override void OnInitializeMelon()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
Settings.Init();
|
Settings.Init();
|
||||||
ResourcesHandler.ExtractAudioResources();
|
ResourcesHandler.ExtractAudioResources();
|
||||||
|
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForInstances());
|
MelonLoader.MelonCoroutines.Start(WaitForInstances());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnDeinitializeMelon()
|
public override void OnDeinitializeMelon()
|
||||||
{
|
{
|
||||||
m_soundManager = null;
|
m_soundManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerator WaitForInstances()
|
IEnumerator WaitForInstances()
|
||||||
{
|
{
|
||||||
if(InterfaceAudio.Instance == null)
|
if(InterfaceAudio.Instance == null)
|
||||||
yield return null;
|
yield return null;
|
||||||
|
|
||||||
m_soundManager = new SoundManager();
|
m_soundManager = new SoundManager();
|
||||||
m_soundManager.LoadSounds();
|
m_soundManager.LoadSounds();
|
||||||
|
|
||||||
CVRGameEventSystem.Player.OnJoin.AddListener(OnPlayerJoin);
|
CVRGameEventSystem.Player.OnJoin.AddListener(OnPlayerJoin);
|
||||||
CVRGameEventSystem.Player.OnLeave.AddListener(OnPlayerLeave);
|
CVRGameEventSystem.Player.OnLeave.AddListener(OnPlayerLeave);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnPlayerJoin(PlayerDescriptor p_player)
|
void OnPlayerJoin(PlayerDescriptor p_player)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(p_player != null) // This happens sometimes, no idea why
|
if(p_player != null) // This happens sometimes, no idea why
|
||||||
{
|
{
|
||||||
bool l_isFriend = Friends.FriendsWith(p_player.ownerId);
|
bool l_isFriend = Friends.FriendsWith(p_player.ownerId);
|
||||||
bool l_notify = false;
|
bool l_notify = false;
|
||||||
|
|
||||||
switch(Settings.NotifyType)
|
switch(Settings.NotifyType)
|
||||||
{
|
{
|
||||||
case Settings.NotificationType.None:
|
case Settings.NotificationType.None:
|
||||||
l_notify = false;
|
l_notify = false;
|
||||||
break;
|
break;
|
||||||
case Settings.NotificationType.Friends:
|
case Settings.NotificationType.Friends:
|
||||||
l_notify = (l_isFriend && ShouldNotifyInCurrentInstance());
|
l_notify = (l_isFriend && ShouldNotifyInCurrentInstance());
|
||||||
break;
|
break;
|
||||||
case Settings.NotificationType.All:
|
case Settings.NotificationType.All:
|
||||||
l_notify = ShouldNotifyInCurrentInstance();
|
l_notify = ShouldNotifyInCurrentInstance();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
l_notify |= (l_isFriend && Settings.FriendsAlways);
|
l_notify |= (l_isFriend && Settings.FriendsAlways);
|
||||||
|
|
||||||
if(l_notify)
|
if(l_notify)
|
||||||
m_soundManager?.PlaySound(l_isFriend ? SoundManager.SoundType.FriendJoin : SoundManager.SoundType.PlayerJoin);
|
m_soundManager?.PlaySound(l_isFriend ? SoundManager.SoundType.FriendJoin : SoundManager.SoundType.PlayerJoin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Warning(e);
|
MelonLoader.MelonLogger.Warning(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void OnPlayerLeave(PlayerDescriptor p_player)
|
void OnPlayerLeave(PlayerDescriptor p_player)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(p_player != null) // This happens sometimes, no idea why
|
if(p_player != null) // This happens sometimes, no idea why
|
||||||
{
|
{
|
||||||
bool l_isFriend = Friends.FriendsWith(p_player.ownerId);
|
bool l_isFriend = Friends.FriendsWith(p_player.ownerId);
|
||||||
bool l_notify = false;
|
bool l_notify = false;
|
||||||
|
|
||||||
switch(Settings.NotifyType)
|
switch(Settings.NotifyType)
|
||||||
{
|
{
|
||||||
case Settings.NotificationType.None:
|
case Settings.NotificationType.None:
|
||||||
l_notify = false;
|
l_notify = false;
|
||||||
break;
|
break;
|
||||||
case Settings.NotificationType.Friends:
|
case Settings.NotificationType.Friends:
|
||||||
l_notify = (l_isFriend && ShouldNotifyInCurrentInstance());
|
l_notify = (l_isFriend && ShouldNotifyInCurrentInstance());
|
||||||
break;
|
break;
|
||||||
case Settings.NotificationType.All:
|
case Settings.NotificationType.All:
|
||||||
l_notify = ShouldNotifyInCurrentInstance();
|
l_notify = ShouldNotifyInCurrentInstance();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
l_notify |= (l_isFriend && Settings.FriendsAlways);
|
l_notify |= (l_isFriend && Settings.FriendsAlways);
|
||||||
|
|
||||||
if(l_notify)
|
if(l_notify)
|
||||||
m_soundManager?.PlaySound(l_isFriend ? SoundManager.SoundType.FriendLeave : SoundManager.SoundType.PlayerLeave);
|
m_soundManager?.PlaySound(l_isFriend ? SoundManager.SoundType.FriendLeave : SoundManager.SoundType.PlayerLeave);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Warning(e);
|
MelonLoader.MelonLogger.Warning(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShouldNotifyInCurrentInstance()
|
bool ShouldNotifyInCurrentInstance()
|
||||||
{
|
{
|
||||||
bool l_isInPublic = (MetaPort.Instance.CurrentInstancePrivacy.Contains("Public") && Settings.NotifyInPublic);
|
bool l_isInPublic = (MetaPort.Instance.CurrentInstancePrivacy.Contains("Public") && Settings.NotifyInPublic);
|
||||||
bool l_isInFriends = (MetaPort.Instance.CurrentInstancePrivacy.Contains("Friends") && Settings.NotifyInFriends);
|
bool l_isInFriends = (MetaPort.Instance.CurrentInstancePrivacy.Contains("Friends") && Settings.NotifyInFriends);
|
||||||
bool l_isInPrivate = (MetaPort.Instance.CurrentInstancePrivacy.Contains("invite") && Settings.NotifyInPrivate);
|
bool l_isInPrivate = (MetaPort.Instance.CurrentInstancePrivacy.Contains("invite") && Settings.NotifyInPrivate);
|
||||||
return (l_isInPublic || l_isInFriends || l_isInPrivate);
|
return (l_isInPublic || l_isInFriends || l_isInPrivate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_pin.PlayersInstanceNotifier), "PlayersInstanceNotifier", "1.0.2-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_pin.PlayersInstanceNotifier), "PlayersInstanceNotifier", "1.0.2", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
||||||
|
|
|
@ -1,86 +1,86 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
<PackageId>PlayersInstanceNotifier</PackageId>
|
<PackageId>PlayersInstanceNotifier</PackageId>
|
||||||
<Authors>SDraw</Authors>
|
<Authors>SDraw</Authors>
|
||||||
<Company>None</Company>
|
<Company>None</Company>
|
||||||
<Product>PlayersInstanceNotifier</Product>
|
<Product>PlayersInstanceNotifier</Product>
|
||||||
<Version>1.0.2</Version>
|
<Version>1.0.2</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="resources\Chime.wav" />
|
<None Remove="resources\Chime.wav" />
|
||||||
<None Remove="resources\DoorClose.wav" />
|
<None Remove="resources\DoorClose.wav" />
|
||||||
<None Remove="resources\mod_menu.js" />
|
<None Remove="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="resources\Chime.wav" />
|
<EmbeddedResource Include="resources\Chime.wav" />
|
||||||
<EmbeddedResource Include="resources\DoorClose.wav" />
|
<EmbeddedResource Include="resources\DoorClose.wav" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
||||||
<EmbeddedResource Include="resources\mod_menu.js" />
|
<EmbeddedResource Include="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="0Harmony">
|
<Reference Include="0Harmony">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="Assembly-CSharp">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="cohtml.Net">
|
<Reference Include="cohtml.Net">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Cohtml.Runtime">
|
<Reference Include="Cohtml.Runtime">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MelonLoader">
|
<Reference Include="MelonLoader">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine">
|
<Reference Include="UnityEngine">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AudioModule">
|
<Reference Include="UnityEngine.AudioModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
|
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.UnityWebRequestModule">
|
<Reference Include="UnityEngine.UnityWebRequestModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_pmc.PlayerMovementCopycat), "PlayerMovementCopycat", "1.0.5-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_pmc.PlayerMovementCopycat), "PlayerMovementCopycat", "1.0.5", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPriority(3)]
|
[assembly: MelonLoader.MelonPriority(3)]
|
||||||
[assembly: MelonLoader.MelonAdditionalDependencies("BTKUILib")]
|
[assembly: MelonLoader.MelonAdditionalDependencies("BTKUILib")]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_prm.PlayerRagdollMod), "PlayerRagdollMod", "1.1.3-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_prm.PlayerRagdollMod), "PlayerRagdollMod", "1.1.3", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPriority(2)]
|
[assembly: MelonLoader.MelonPriority(2)]
|
||||||
[assembly: MelonLoader.MelonOptionalDependencies("BTKUILib")]
|
[assembly: MelonLoader.MelonOptionalDependencies("BTKUILib")]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_vei.ViveExtendedInput), "ViveExtendedInput", "1.0.1-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_vei.ViveExtendedInput), "ViveExtendedInput", "1.0.1", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
||||||
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
[assembly: MelonLoader.MelonGame(null, "ChilloutVR")]
|
||||||
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
[assembly: MelonLoader.MelonPlatform(MelonLoader.MelonPlatformAttribute.CompatiblePlatforms.WINDOWS_X64)]
|
||||||
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
[assembly: MelonLoader.MelonPlatformDomain(MelonLoader.MelonPlatformDomainAttribute.CompatibleDomains.MONO)]
|
||||||
|
|
|
@ -1,78 +1,78 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.1</TargetFramework>
|
<TargetFramework>netstandard2.1</TargetFramework>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
<PackageId>ViveExtendedInput</PackageId>
|
<PackageId>ViveExtendedInput</PackageId>
|
||||||
<Version>1.0.1</Version>
|
<Version>1.0.1</Version>
|
||||||
<Authors>SDraw</Authors>
|
<Authors>SDraw</Authors>
|
||||||
<Company>None</Company>
|
<Company>None</Company>
|
||||||
<Product>ViveExtendedInput</Product>
|
<Product>ViveExtendedInput</Product>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="PlayerRagdollMod.json" />
|
<None Remove="PlayerRagdollMod.json" />
|
||||||
<None Remove="resources\mod_menu.js" />
|
<None Remove="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="0Harmony">
|
<Reference Include="0Harmony">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="Assembly-CSharp">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="cohtml.Net">
|
<Reference Include="cohtml.Net">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Cohtml.Runtime">
|
<Reference Include="Cohtml.Runtime">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MelonLoader">
|
<Reference Include="MelonLoader">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Unity.Postprocessing.Runtime">
|
<Reference Include="Unity.Postprocessing.Runtime">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Unity.Postprocessing.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine">
|
<Reference Include="UnityEngine">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AnimationModule">
|
<Reference Include="UnityEngine.AnimationModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
<SpecificVersion>false</SpecificVersion>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="resources\mod_menu.js" />
|
<EmbeddedResource Include="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue