mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-05 11:29:23 +00:00
Head tracking toggle option
This commit is contained in:
parent
ecc1347181
commit
dcd94ae906
7 changed files with 49 additions and 13 deletions
|
@ -4,9 +4,9 @@ Merged set of MelonLoader mods for ChilloutVR.
|
||||||
| Full name | Short name | Latest version | Available in [CVRMA](https://github.com/knah/CVRMelonAssistant) | Current Status | Notes |
|
| Full name | Short name | Latest version | Available in [CVRMA](https://github.com/knah/CVRMelonAssistant) | Current Status | Notes |
|
||||||
|-----------|------------|----------------|-----------------------------------------------------------------|----------------|-------|
|
|-----------|------------|----------------|-----------------------------------------------------------------|----------------|-------|
|
||||||
| Avatar Change Info | ml_aci | 1.0.3 | Yes | Working |
|
| Avatar Change Info | ml_aci | 1.0.3 | Yes | Working |
|
||||||
| Avatar Motion Tweaker | ml_amt | 1.1.8 | Yes, pending update | Working |
|
| Avatar Motion Tweaker | ml_amt | 1.1.8 | Yes | Working |
|
||||||
| Desktop Head Tracking | ml_dht | 1.1.0 | Yes, pending update | Working |
|
| Desktop Head Tracking | ml_dht | 1.1.1 | Yes, pending update | Working |
|
||||||
| Desktop Reticle Switch | ml_drs | 1.0.0 | Yes | Working |
|
| Desktop Reticle Switch | ml_drs | 1.0.0 | Yes | Working |
|
||||||
| Four Point Tracking | ml_fpt | 1.0.9 | Yes | Working |
|
| Four Point Tracking | ml_fpt | 1.0.9 | Yes | Working |
|
||||||
| Leap Motion Extension | ml_lme | 1.2.7 | Yes, pending update | Working |
|
| Leap Motion Extension | ml_lme | 1.2.7 | Yes | Working |
|
||||||
| Server Connection Info | ml_sci | 1.0.2 | Yes | Working |
|
| Server Connection Info | ml_sci | 1.0.2 | Yes | Working |
|
||||||
|
|
|
@ -13,6 +13,7 @@ namespace ml_dht
|
||||||
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_blinking = true;
|
bool m_blinking = true;
|
||||||
bool m_eyeTracking = true;
|
bool m_eyeTracking = true;
|
||||||
float m_smoothing = 0.5f;
|
float m_smoothing = 0.5f;
|
||||||
|
@ -21,7 +22,6 @@ namespace ml_dht
|
||||||
|
|
||||||
CVRAvatar m_avatarDescriptor = null;
|
CVRAvatar m_avatarDescriptor = null;
|
||||||
LookAtIK m_lookIK = null;
|
LookAtIK m_lookIK = null;
|
||||||
Transform m_camera = null;
|
|
||||||
Transform m_headBone = null;
|
Transform m_headBone = null;
|
||||||
|
|
||||||
Vector3 m_headPosition;
|
Vector3 m_headPosition;
|
||||||
|
@ -36,9 +36,8 @@ namespace ml_dht
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
m_camera = PlayerSetup.Instance.desktopCamera.transform;
|
|
||||||
|
|
||||||
Settings.EnabledChange += this.SetEnabled;
|
Settings.EnabledChange += this.SetEnabled;
|
||||||
|
Settings.HeadTrackingChange += this.SetHeadTracking;
|
||||||
Settings.EyeTrackingChange += this.SetEyeTracking;
|
Settings.EyeTrackingChange += this.SetEyeTracking;
|
||||||
Settings.BlinkingChange += this.SetBlinking;
|
Settings.BlinkingChange += this.SetBlinking;
|
||||||
Settings.SmoothingChange += this.SetSmoothing;
|
Settings.SmoothingChange += this.SetSmoothing;
|
||||||
|
@ -49,6 +48,7 @@ namespace ml_dht
|
||||||
void OnDestroy()
|
void OnDestroy()
|
||||||
{
|
{
|
||||||
Settings.EnabledChange -= this.SetEnabled;
|
Settings.EnabledChange -= this.SetEnabled;
|
||||||
|
Settings.HeadTrackingChange -= this.SetHeadTracking;
|
||||||
Settings.EyeTrackingChange -= this.SetEyeTracking;
|
Settings.EyeTrackingChange -= this.SetEyeTracking;
|
||||||
Settings.BlinkingChange -= this.SetBlinking;
|
Settings.BlinkingChange -= this.SetBlinking;
|
||||||
Settings.SmoothingChange -= this.SetSmoothing;
|
Settings.SmoothingChange -= this.SetSmoothing;
|
||||||
|
@ -68,7 +68,7 @@ namespace ml_dht
|
||||||
|
|
||||||
void OnLookIKPostUpdate()
|
void OnLookIKPostUpdate()
|
||||||
{
|
{
|
||||||
if(m_enabled && (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);
|
||||||
|
|
||||||
|
@ -84,8 +84,10 @@ namespace ml_dht
|
||||||
// Gaze
|
// Gaze
|
||||||
if(m_eyeTracking)
|
if(m_eyeTracking)
|
||||||
{
|
{
|
||||||
|
Transform l_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
||||||
|
|
||||||
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 = l_camera.position + l_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * 2f, (m_gazeDirection.y - 0.5f) * 2f, 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blink
|
// Blink
|
||||||
|
@ -142,7 +144,16 @@ namespace ml_dht
|
||||||
if(m_enabled != p_state)
|
if(m_enabled != p_state)
|
||||||
{
|
{
|
||||||
m_enabled = p_state;
|
m_enabled = p_state;
|
||||||
if(m_enabled)
|
if(m_enabled && m_headTracking)
|
||||||
|
m_lastHeadRotation = ((m_headBone != null) ? m_headBone.rotation : m_bindRotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void SetHeadTracking(bool p_state)
|
||||||
|
{
|
||||||
|
if(m_headTracking != p_state)
|
||||||
|
{
|
||||||
|
m_headTracking = p_state;
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ namespace ml_dht
|
||||||
|
|
||||||
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
||||||
m_localTracked.SetEnabled(Settings.Enabled);
|
m_localTracked.SetEnabled(Settings.Enabled);
|
||||||
|
m_localTracked.SetHeadTracking(Settings.HeadTracking);
|
||||||
m_localTracked.SetEyeTracking(Settings.EyeTracking);
|
m_localTracked.SetEyeTracking(Settings.EyeTracking);
|
||||||
m_localTracked.SetBlinking(Settings.Blinking);
|
m_localTracked.SetBlinking(Settings.Blinking);
|
||||||
m_localTracked.SetMirrored(Settings.Mirrored);
|
m_localTracked.SetMirrored(Settings.Mirrored);
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyTitle("DesktopHeadTracking")]
|
[assembly: AssemblyTitle("DesktopHeadTracking")]
|
||||||
[assembly: AssemblyVersion("1.1.0")]
|
[assembly: AssemblyVersion("1.1.1")]
|
||||||
[assembly: AssemblyFileVersion("1.1.0")]
|
[assembly: AssemblyFileVersion("1.1.1")]
|
||||||
|
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.1.0", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.1.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)]
|
|
@ -17,7 +17,8 @@ Refer to `TrackingData.cs` for reference in case of implementing own software.
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
Available mod's settings in `Settings - Implementation - Desktop Head Tracking`:
|
Available mod's settings in `Settings - Implementation - Desktop Head Tracking`:
|
||||||
* **Enabled:** enabled head tracking; default value - `false`.
|
* **Enabled:** enables mod's activity; default value - `false`.
|
||||||
|
* **Use head tracking:** enables head tracking; default value - `true`.
|
||||||
* **Use eyes tracking:** uses eyes tracking from data; default value - `true`.
|
* **Use eyes tracking:** uses eyes tracking from data; default value - `true`.
|
||||||
* **Use blinking:** uses blinking from data; default value - `true`.
|
* **Use blinking:** uses blinking from data; default value - `true`.
|
||||||
* **Mirrored movement:** mirrors movement and gaze along 0YZ plane; default value - `false`.
|
* **Mirrored movement:** mirrors movement and gaze along 0YZ plane; default value - `false`.
|
||||||
|
|
|
@ -10,6 +10,7 @@ namespace ml_dht
|
||||||
enum ModSetting
|
enum ModSetting
|
||||||
{
|
{
|
||||||
Enabled = 0,
|
Enabled = 0,
|
||||||
|
HeadTracking,
|
||||||
EyeTracking,
|
EyeTracking,
|
||||||
Blinking,
|
Blinking,
|
||||||
Mirrored,
|
Mirrored,
|
||||||
|
@ -18,6 +19,7 @@ namespace ml_dht
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ms_enabled = false;
|
static bool ms_enabled = false;
|
||||||
|
static bool ms_headTracking = true;
|
||||||
static bool ms_eyeTracking = true;
|
static bool ms_eyeTracking = true;
|
||||||
static bool ms_blinking = true;
|
static bool ms_blinking = true;
|
||||||
static bool ms_mirrored = false;
|
static bool ms_mirrored = false;
|
||||||
|
@ -28,6 +30,7 @@ namespace ml_dht
|
||||||
static List<MelonLoader.MelonPreferences_Entry> ms_entries = null;
|
static List<MelonLoader.MelonPreferences_Entry> ms_entries = null;
|
||||||
|
|
||||||
static public event Action<bool> EnabledChange;
|
static public event Action<bool> EnabledChange;
|
||||||
|
static public event Action<bool> HeadTrackingChange;
|
||||||
static public event Action<bool> EyeTrackingChange;
|
static public event Action<bool> EyeTrackingChange;
|
||||||
static public event Action<bool> BlinkingChange;
|
static public event Action<bool> BlinkingChange;
|
||||||
static public event Action<bool> MirroredChange;
|
static public event Action<bool> MirroredChange;
|
||||||
|
@ -40,6 +43,7 @@ namespace ml_dht
|
||||||
|
|
||||||
ms_entries = new List<MelonLoader.MelonPreferences_Entry>();
|
ms_entries = new List<MelonLoader.MelonPreferences_Entry>();
|
||||||
ms_entries.Add(ms_category.CreateEntry(ModSetting.Enabled.ToString(), false));
|
ms_entries.Add(ms_category.CreateEntry(ModSetting.Enabled.ToString(), false));
|
||||||
|
ms_entries.Add(ms_category.CreateEntry(ModSetting.HeadTracking.ToString(), false));
|
||||||
ms_entries.Add(ms_category.CreateEntry(ModSetting.EyeTracking.ToString(), true));
|
ms_entries.Add(ms_category.CreateEntry(ModSetting.EyeTracking.ToString(), true));
|
||||||
ms_entries.Add(ms_category.CreateEntry(ModSetting.Blinking.ToString(), true));
|
ms_entries.Add(ms_category.CreateEntry(ModSetting.Blinking.ToString(), true));
|
||||||
ms_entries.Add(ms_category.CreateEntry(ModSetting.Mirrored.ToString(), false));
|
ms_entries.Add(ms_category.CreateEntry(ModSetting.Mirrored.ToString(), false));
|
||||||
|
@ -76,6 +80,7 @@ namespace ml_dht
|
||||||
static void Load()
|
static void Load()
|
||||||
{
|
{
|
||||||
ms_enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue;
|
ms_enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue;
|
||||||
|
ms_headTracking = (bool)ms_entries[(int)ModSetting.HeadTracking].BoxedValue;
|
||||||
ms_eyeTracking = (bool)ms_entries[(int)ModSetting.EyeTracking].BoxedValue;
|
ms_eyeTracking = (bool)ms_entries[(int)ModSetting.EyeTracking].BoxedValue;
|
||||||
ms_blinking = (bool)ms_entries[(int)ModSetting.Blinking].BoxedValue;
|
ms_blinking = (bool)ms_entries[(int)ModSetting.Blinking].BoxedValue;
|
||||||
ms_mirrored = (bool)ms_entries[(int)ModSetting.Mirrored].BoxedValue;
|
ms_mirrored = (bool)ms_entries[(int)ModSetting.Mirrored].BoxedValue;
|
||||||
|
@ -114,6 +119,13 @@ namespace ml_dht
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ModSetting.HeadTracking:
|
||||||
|
{
|
||||||
|
ms_headTracking = bool.Parse(p_value);
|
||||||
|
HeadTrackingChange?.Invoke(ms_headTracking);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ModSetting.EyeTracking:
|
case ModSetting.EyeTracking:
|
||||||
{
|
{
|
||||||
ms_eyeTracking = bool.Parse(p_value);
|
ms_eyeTracking = bool.Parse(p_value);
|
||||||
|
@ -148,6 +160,10 @@ namespace ml_dht
|
||||||
{
|
{
|
||||||
get => ms_enabled;
|
get => ms_enabled;
|
||||||
}
|
}
|
||||||
|
public static bool HeadTracking
|
||||||
|
{
|
||||||
|
get => ms_headTracking;
|
||||||
|
}
|
||||||
public static bool EyeTracking
|
public static bool EyeTracking
|
||||||
{
|
{
|
||||||
get => ms_eyeTracking;
|
get => ms_eyeTracking;
|
||||||
|
|
|
@ -187,6 +187,13 @@ function inp_toggle_mod_dht(_obj, _callbackName) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Use head tracking: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="HeadTracking" class ="inp_toggle no-scroll" data-current="true"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
<div class ="row-wrapper">
|
||||||
<div class ="option-caption">Use eyes tracking: </div>
|
<div class ="option-caption">Use eyes tracking: </div>
|
||||||
<div class ="option-input">
|
<div class ="option-input">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue