mirror of
https://github.com/hanetzer/sdraw_mods_cvr.git
synced 2025-09-03 10:29:22 +00:00
Return of DesktopHeadTracking
This commit is contained in:
parent
c8743158ac
commit
b05447c4df
24 changed files with 812 additions and 888 deletions
|
@ -5,6 +5,7 @@ Merged set of MelonLoader mods for ChilloutVR.
|
||||||
|:---------:|:----------:|:--------------:| :----------------------------------------------------------------|
|
|:---------:|:----------:|:--------------:| :----------------------------------------------------------------|
|
||||||
| [Avatar Motion Tweaker](/ml_amt/README.md) | ml_amt | 1.3.6 [:arrow_down:](../../releases/latest/download/ml_amt.dll)| ✔ Yes<br>:hourglass: Update review |
|
| [Avatar Motion Tweaker](/ml_amt/README.md) | ml_amt | 1.3.6 [:arrow_down:](../../releases/latest/download/ml_amt.dll)| ✔ Yes<br>:hourglass: 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.0 [:arrow_down:](../../releases/latest/download/ml_asl.dll)| ✔ Yes |
|
||||||
|
| [Desktop Head Tracking](/ml_dht/README.md) | ml_dht | 1.2.0 [:arrow_down:](../../releases/latest/download/ml_dht.dll) | ✔ Yes (`Retired` group)<br>:hourglass: 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.5 [:arrow_down:](../../releases/latest/download/ml_lme.dll)| ✔ Yes |
|
||||||
| [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.0.9 [:arrow_down:](../../releases/latest/download/ml_pam.dll)| ✔ Yes |
|
||||||
| [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.4 [:arrow_down:](../../releases/latest/download/ml_pmc.dll)| ✔ Yes |
|
||||||
|
@ -16,7 +17,6 @@ Merged set of MelonLoader mods for ChilloutVR.
|
||||||
| Full name | Short name | Notes |
|
| Full name | Short name | Notes |
|
||||||
|:---------:|:----------:|-------|
|
|:---------:|:----------:|-------|
|
||||||
| Avatar Change Info | ml_aci | Superseded by `Extended Game Notifications` |
|
| Avatar Change Info | ml_aci | Superseded by `Extended Game Notifications` |
|
||||||
| Desktop Head Tracking | ml_dht | Unable to emulate fake data |
|
|
||||||
| Desktop Reticle Switch | ml_drs | Boring functionality |
|
| Desktop Reticle Switch | ml_drs | Boring functionality |
|
||||||
| Extended Game Notifications | ml_egn | In-game feature sine 2023r172 update |
|
| Extended Game Notifications | ml_egn | In-game feature sine 2023r172 update |
|
||||||
| Four Point Tracking | ml_fpt | In-game feature since 2022r170 update |
|
| Four Point Tracking | ml_fpt | In-game feature since 2022r170 update |
|
||||||
|
|
|
@ -1,245 +0,0 @@
|
||||||
// Add settings
|
|
||||||
var g_modSettingsDHT = [];
|
|
||||||
|
|
||||||
engine.on('updateModSettingDHT', function (_name, _value) {
|
|
||||||
for (var i = 0; i < g_modSettingsDHT.length; i++) {
|
|
||||||
if (g_modSettingsDHT[i].name == _name) {
|
|
||||||
g_modSettingsDHT[i].updateValue(_value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Modified from original `inp` types, because I have no js knowledge to hook stuff
|
|
||||||
function inp_slider_mod_dht(_obj, _callbackName) {
|
|
||||||
this.obj = _obj;
|
|
||||||
this.callbackName = _callbackName;
|
|
||||||
this.minValue = parseFloat(_obj.getAttribute('data-min'));
|
|
||||||
this.maxValue = parseFloat(_obj.getAttribute('data-max'));
|
|
||||||
this.percent = 0;
|
|
||||||
this.value = parseFloat(_obj.getAttribute('data-current'));
|
|
||||||
this.dragActive = false;
|
|
||||||
this.name = _obj.id;
|
|
||||||
this.type = _obj.getAttribute('data-type');
|
|
||||||
this.stepSize = _obj.getAttribute('data-stepSize') || 0;
|
|
||||||
this.format = _obj.getAttribute('data-format') || '{value}';
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (this.stepSize != 0)
|
|
||||||
this.value = Math.round(this.value / this.stepSize) * this.stepSize;
|
|
||||||
else
|
|
||||||
this.value = Math.round(this.value);
|
|
||||||
|
|
||||||
this.valueLabelBackground = document.createElement('div');
|
|
||||||
this.valueLabelBackground.className = 'valueLabel background';
|
|
||||||
this.valueLabelBackground.innerHTML = this.format.replace('{value}', this.value);
|
|
||||||
this.obj.appendChild(this.valueLabelBackground);
|
|
||||||
|
|
||||||
this.valueBar = document.createElement('div');
|
|
||||||
this.valueBar.className = 'valueBar';
|
|
||||||
this.valueBar.setAttribute('style', 'width: ' + (((this.value - this.minValue) / (this.maxValue - this.minValue)) * 100) + '%;');
|
|
||||||
this.obj.appendChild(this.valueBar);
|
|
||||||
|
|
||||||
this.valueLabelForeground = document.createElement('div');
|
|
||||||
this.valueLabelForeground.className = 'valueLabel foreground';
|
|
||||||
this.valueLabelForeground.innerHTML = this.format.replace('{value}', this.value);
|
|
||||||
this.valueLabelForeground.setAttribute('style', 'width: ' + (1.0 / ((this.value - this.minValue) / (this.maxValue - this.minValue)) * 100) + '%;');
|
|
||||||
this.valueBar.appendChild(this.valueLabelForeground);
|
|
||||||
|
|
||||||
this.mouseDown = function (_e) {
|
|
||||||
self.dragActive = true;
|
|
||||||
self.mouseMove(_e, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.mouseMove = function (_e, _write) {
|
|
||||||
if (self.dragActive) {
|
|
||||||
var rect = _obj.getBoundingClientRect();
|
|
||||||
var start = rect.left;
|
|
||||||
var end = rect.right;
|
|
||||||
self.percent = Math.min(Math.max((_e.clientX - start) / rect.width, 0), 1);
|
|
||||||
var value = self.percent;
|
|
||||||
value *= (self.maxValue - self.minValue);
|
|
||||||
value += self.minValue;
|
|
||||||
if (self.stepSize != 0) {
|
|
||||||
value = Math.round(value / self.stepSize);
|
|
||||||
self.value = value * self.stepSize;
|
|
||||||
self.percent = (self.value - self.minValue) / (self.maxValue - self.minValue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
self.value = Math.round(value);
|
|
||||||
|
|
||||||
self.valueBar.setAttribute('style', 'width: ' + (self.percent * 100) + '%;');
|
|
||||||
self.valueLabelForeground.setAttribute('style', 'width: ' + (1.0 / self.percent * 100) + '%;');
|
|
||||||
self.valueLabelBackground.innerHTML = self.valueLabelForeground.innerHTML = self.format.replace('{value}', self.value);
|
|
||||||
|
|
||||||
engine.call(self.callbackName, self.name, "" + self.value);
|
|
||||||
self.displayImperial();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.mouseUp = function (_e) {
|
|
||||||
self.mouseMove(_e, true);
|
|
||||||
self.dragActive = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_obj.addEventListener('mousedown', this.mouseDown);
|
|
||||||
document.addEventListener('mousemove', this.mouseMove);
|
|
||||||
document.addEventListener('mouseup', this.mouseUp);
|
|
||||||
|
|
||||||
this.getValue = function () {
|
|
||||||
return self.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateValue = function (value) {
|
|
||||||
if (self.stepSize != 0)
|
|
||||||
self.value = Math.round(value * self.stepSize) / self.stepSize;
|
|
||||||
else
|
|
||||||
self.value = Math.round(value);
|
|
||||||
self.percent = (self.value - self.minValue) / (self.maxValue - self.minValue);
|
|
||||||
self.valueBar.setAttribute('style', 'width: ' + (self.percent * 100) + '%;');
|
|
||||||
self.valueLabelForeground.setAttribute('style', 'width: ' + (1.0 / self.percent * 100) + '%;');
|
|
||||||
self.valueLabelBackground.innerHTML = self.valueLabelForeground.innerHTML = self.format.replace('{value}', self.value);
|
|
||||||
self.displayImperial();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.displayImperial = function () {
|
|
||||||
var displays = document.querySelectorAll('.imperialDisplay');
|
|
||||||
for (var i = 0; i < displays.length; i++) {
|
|
||||||
var binding = displays[i].getAttribute('data-binding');
|
|
||||||
if (binding == self.name) {
|
|
||||||
var realFeet = ((self.value * 0.393700) / 12);
|
|
||||||
var feet = Math.floor(realFeet);
|
|
||||||
var inches = Math.floor((realFeet - feet) * 12);
|
|
||||||
displays[i].innerHTML = feet + "'" + inches + '''';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: this.name,
|
|
||||||
value: this.getValue,
|
|
||||||
updateValue: this.updateValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modified from original `inp` types, because I have no js knowledge to hook stuff
|
|
||||||
function inp_toggle_mod_dht(_obj, _callbackName) {
|
|
||||||
this.obj = _obj;
|
|
||||||
this.callbackName = _callbackName;
|
|
||||||
this.value = _obj.getAttribute('data-current');
|
|
||||||
this.name = _obj.id;
|
|
||||||
this.type = _obj.getAttribute('data-type');
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
this.mouseDown = function (_e) {
|
|
||||||
self.value = self.value == "True" ? "False" : "True";
|
|
||||||
self.updateState();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateState = function () {
|
|
||||||
self.obj.classList.remove("checked");
|
|
||||||
if (self.value == "True") {
|
|
||||||
self.obj.classList.add("checked");
|
|
||||||
}
|
|
||||||
|
|
||||||
engine.call(self.callbackName, self.name, self.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
_obj.addEventListener('mousedown', this.mouseDown);
|
|
||||||
|
|
||||||
this.getValue = function () {
|
|
||||||
return self.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateValue = function (value) {
|
|
||||||
self.value = value;
|
|
||||||
|
|
||||||
self.obj.classList.remove("checked");
|
|
||||||
if (self.value == "True") {
|
|
||||||
self.obj.classList.add("checked");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateValue(this.value);
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: this.name,
|
|
||||||
value: this.getValue,
|
|
||||||
updateValue: this.updateValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add own menu
|
|
||||||
{
|
|
||||||
let l_block = document.createElement('div');
|
|
||||||
l_block.innerHTML = `
|
|
||||||
<div class ="settings-subcategory">
|
|
||||||
<div class ="subcategory-name">Desktop Head Tracking</div>
|
|
||||||
<div class ="subcategory-description"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
|
||||||
<div class ="option-caption">Enabled: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="Enabled" class ="inp_toggle no-scroll" data-current="false"></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 ="option-caption">Use eyes tracking: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="EyeTracking" class ="inp_toggle no-scroll" data-current="true"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
|
||||||
<div class ="option-caption">Use blinking: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="Blinking" class ="inp_toggle no-scroll" data-current="true"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
|
||||||
<div class ="option-caption">Mirrored movement: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="Mirrored" class ="inp_toggle no-scroll" data-current="false"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
|
||||||
<div class ="option-caption">Movement smoothing: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="Smoothing" class ="inp_slider no-scroll" data-min="0" data-max="99" data-current="50"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class ="row-wrapper">
|
|
||||||
<div class ="option-caption">Override face tracking: </div>
|
|
||||||
<div class ="option-input">
|
|
||||||
<div id="FaceOverride" class ="inp_toggle no-scroll" data-current="true"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
document.getElementById('settings-implementation').appendChild(l_block);
|
|
||||||
|
|
||||||
// Update sliders in new menu block
|
|
||||||
let l_sliders = l_block.querySelectorAll('.inp_slider');
|
|
||||||
for (var i = 0; i < l_sliders.length; i++) {
|
|
||||||
g_modSettingsDHT[g_modSettingsDHT.length] = new inp_slider_mod_dht(l_sliders[i], 'MelonMod_DHT_Call_InpSlider');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update toggles in new menu block
|
|
||||||
let l_toggles = l_block.querySelectorAll('.inp_toggle');
|
|
||||||
for (var i = 0; i < l_toggles.length; i++) {
|
|
||||||
g_modSettingsDHT[g_modSettingsDHT.length] = new inp_toggle_mod_dht(l_toggles[i], 'MelonMod_DHT_Call_InpToggle');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -41,42 +41,52 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.PhysicsModule">
|
<Reference Include="UnityEngine.PhysicsModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -17,30 +17,37 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 291 KiB |
|
@ -1,185 +1,144 @@
|
||||||
using ABI.CCK.Components;
|
using ABI.CCK.Components;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Player;
|
||||||
using RootMotion.FinalIK;
|
using RootMotion.FinalIK;
|
||||||
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;
|
||||||
bool m_blinking = true;
|
float m_smoothing = 0.5f;
|
||||||
bool m_eyeTracking = true;
|
|
||||||
float m_smoothing = 0.5f;
|
CVRAvatar m_avatarDescriptor = null;
|
||||||
bool m_mirrored = false;
|
Transform m_camera = null;
|
||||||
bool m_faceOverride = true;
|
LookAtIK m_lookIK = null;
|
||||||
|
Transform m_headBone = null;
|
||||||
CVRAvatar m_avatarDescriptor = null;
|
|
||||||
LookAtIK m_lookIK = null;
|
Vector3 m_headPosition;
|
||||||
Transform m_headBone = null;
|
Quaternion m_headRotation;
|
||||||
|
Vector2 m_gazeDirection;
|
||||||
Vector3 m_headPosition;
|
float m_blinkProgress = 0f;
|
||||||
Quaternion m_headRotation;
|
|
||||||
Vector2 m_gazeDirection;
|
Quaternion m_bindRotation;
|
||||||
float m_blinkProgress = 0f;
|
Quaternion m_lastHeadRotation;
|
||||||
Vector2 m_mouthShapes;
|
|
||||||
float m_eyebrowsProgress = 0f;
|
// Unity events
|
||||||
|
void Start()
|
||||||
Quaternion m_bindRotation;
|
{
|
||||||
Quaternion m_lastHeadRotation;
|
SetEnabled(Settings.Enabled);
|
||||||
|
SetHeadTracking(Settings.HeadTracking);
|
||||||
// Unity events
|
SetSmoothing(Settings.Smoothing);
|
||||||
void Start()
|
|
||||||
{
|
Settings.EnabledChange += this.SetEnabled;
|
||||||
Settings.EnabledChange += this.SetEnabled;
|
Settings.HeadTrackingChange += this.SetHeadTracking;
|
||||||
Settings.HeadTrackingChange += this.SetHeadTracking;
|
Settings.SmoothingChange += this.SetSmoothing;
|
||||||
Settings.EyeTrackingChange += this.SetEyeTracking;
|
}
|
||||||
Settings.BlinkingChange += this.SetBlinking;
|
|
||||||
Settings.SmoothingChange += this.SetSmoothing;
|
void OnDestroy()
|
||||||
Settings.MirroredChange += this.SetMirrored;
|
{
|
||||||
Settings.FaceOverrideChange += this.SetFaceOverride;
|
Settings.EnabledChange -= this.SetEnabled;
|
||||||
}
|
Settings.HeadTrackingChange -= this.SetHeadTracking;
|
||||||
|
Settings.SmoothingChange -= this.SetSmoothing;
|
||||||
void OnDestroy()
|
}
|
||||||
{
|
|
||||||
Settings.EnabledChange -= this.SetEnabled;
|
// Tracking updates
|
||||||
Settings.HeadTrackingChange -= this.SetHeadTracking;
|
public void UpdateTrackingData(ref TrackingData p_data)
|
||||||
Settings.EyeTrackingChange -= this.SetEyeTracking;
|
{
|
||||||
Settings.BlinkingChange -= this.SetBlinking;
|
m_headPosition.Set(p_data.m_headPositionX * (Settings.Mirrored ? -1f : 1f), p_data.m_headPositionY, p_data.m_headPositionZ);
|
||||||
Settings.SmoothingChange -= this.SetSmoothing;
|
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);
|
||||||
Settings.MirroredChange -= this.SetMirrored;
|
m_gazeDirection.Set(Settings.Mirrored ? (1f - p_data.m_gazeX) : p_data.m_gazeX, p_data.m_gazeY);
|
||||||
Settings.FaceOverrideChange -= this.SetFaceOverride;
|
m_blinkProgress = p_data.m_blink;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tracking updates
|
void OnLookIKPostUpdate()
|
||||||
public void UpdateTrackingData(ref TrackingData p_data)
|
{
|
||||||
{
|
if(m_enabled && m_headTracking && (m_headBone != null))
|
||||||
m_headPosition.Set(p_data.m_headPositionX * (m_mirrored ? -1f : 1f), p_data.m_headPositionY, p_data.m_headPositionZ);
|
{
|
||||||
m_headRotation.Set(p_data.m_headRotationX, p_data.m_headRotationY * (m_mirrored ? -1f : 1f), p_data.m_headRotationZ * (m_mirrored ? -1f : 1f), p_data.m_headRotationW);
|
m_lastHeadRotation = Quaternion.Slerp(m_lastHeadRotation, m_avatarDescriptor.transform.rotation * (m_headRotation * m_bindRotation), m_smoothing);
|
||||||
m_gazeDirection.Set(m_mirrored ? (1f - p_data.m_gazeX) : p_data.m_gazeX, p_data.m_gazeY);
|
|
||||||
m_blinkProgress = p_data.m_blink;
|
if(!(bool)ms_emotePlaying.GetValue(PlayerSetup.Instance))
|
||||||
m_mouthShapes.Set(p_data.m_mouthOpen, p_data.m_mouthShape);
|
m_headBone.rotation = m_lastHeadRotation;
|
||||||
m_eyebrowsProgress = p_data.m_brows;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnLookIKPostUpdate()
|
// Game events
|
||||||
{
|
internal void OnSetupAvatar()
|
||||||
if(m_enabled && m_headTracking && (m_headBone != null))
|
{
|
||||||
{
|
m_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
||||||
m_lastHeadRotation = Quaternion.Slerp(m_lastHeadRotation, m_avatarDescriptor.transform.rotation * (m_headRotation * m_bindRotation), m_smoothing);
|
m_avatarDescriptor = PlayerSetup.Instance._avatar.GetComponent<CVRAvatar>();
|
||||||
|
m_headBone = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
if(!(bool)ms_emotePlaying.GetValue(PlayerSetup.Instance))
|
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
||||||
m_headBone.rotation = m_lastHeadRotation;
|
|
||||||
}
|
if(m_headBone != null)
|
||||||
}
|
m_bindRotation = (m_avatarDescriptor.transform.GetMatrix().inverse * m_headBone.GetMatrix()).rotation;
|
||||||
|
|
||||||
// Game events
|
if(m_lookIK != null)
|
||||||
internal void OnEyeControllerUpdate(CVREyeController p_component)
|
m_lookIK.solver.OnPostUpdate += this.OnLookIKPostUpdate;
|
||||||
{
|
|
||||||
if(m_enabled)
|
}
|
||||||
{
|
internal void OnAvatarClear()
|
||||||
// Gaze
|
{
|
||||||
if(m_eyeTracking)
|
m_avatarDescriptor = null;
|
||||||
{
|
m_lookIK = null;
|
||||||
Transform l_camera = PlayerSetup.Instance.GetActiveCamera().transform;
|
m_headBone = null;
|
||||||
|
m_lastHeadRotation = Quaternion.identity;
|
||||||
p_component.manualViewTarget = true;
|
m_bindRotation = Quaternion.identity;
|
||||||
p_component.targetViewPosition = l_camera.position + l_camera.rotation * new Vector3((m_gazeDirection.x - 0.5f) * 2f, (m_gazeDirection.y - 0.5f) * 2f, 1f);
|
}
|
||||||
}
|
|
||||||
|
internal void OnEyeControllerUpdate(CVREyeController p_component)
|
||||||
// Blink
|
{
|
||||||
if(m_blinking)
|
if(m_enabled)
|
||||||
{
|
{
|
||||||
p_component.manualBlinking = true;
|
// Gaze
|
||||||
p_component.blinkProgress = m_blinkProgress;
|
if(Settings.EyeTracking && (m_camera != null))
|
||||||
}
|
{
|
||||||
}
|
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);
|
||||||
|
}
|
||||||
internal void OnFaceTrackingUpdate(CVRFaceTracking p_component)
|
|
||||||
{
|
// Blink
|
||||||
if(m_enabled && m_faceOverride)
|
if(Settings.Blinking)
|
||||||
{
|
{
|
||||||
if(m_avatarDescriptor != null)
|
p_component.manualBlinking = true;
|
||||||
m_avatarDescriptor.useVisemeLipsync = false;
|
p_component.blinkProgress = m_blinkProgress;
|
||||||
|
}
|
||||||
float l_weight = Mathf.Clamp01(Mathf.InverseLerp(0.25f, 1f, Mathf.Abs(m_mouthShapes.y))) * 100f;
|
}
|
||||||
|
}
|
||||||
p_component.BlendShapeValues[(int)LipShape_v2.Jaw_Open] = m_mouthShapes.x * 100f;
|
|
||||||
p_component.BlendShapeValues[(int)LipShape_v2.Mouth_Pout] = ((m_mouthShapes.y > 0f) ? l_weight : 0f);
|
// Settings
|
||||||
p_component.BlendShapeValues[(int)LipShape_v2.Mouth_Smile_Left] = ((m_mouthShapes.y < 0f) ? l_weight : 0f);
|
void SetEnabled(bool p_state)
|
||||||
p_component.BlendShapeValues[(int)LipShape_v2.Mouth_Smile_Right] = ((m_mouthShapes.y < 0f) ? l_weight : 0f);
|
{
|
||||||
p_component.LipSyncWasUpdated = true;
|
if(m_enabled != p_state)
|
||||||
p_component.UpdateLipShapes();
|
{
|
||||||
}
|
m_enabled = p_state;
|
||||||
}
|
TryRestoreHeadRotation();
|
||||||
|
}
|
||||||
internal void OnSetupAvatar()
|
}
|
||||||
{
|
void SetHeadTracking(bool p_state)
|
||||||
m_avatarDescriptor = PlayerSetup.Instance._avatar.GetComponent<CVRAvatar>();
|
{
|
||||||
m_headBone = PlayerSetup.Instance._animator.GetBoneTransform(HumanBodyBones.Head);
|
if(m_headTracking != p_state)
|
||||||
m_lookIK = PlayerSetup.Instance._avatar.GetComponent<LookAtIK>();
|
{
|
||||||
|
m_headTracking = p_state;
|
||||||
if(m_headBone != null)
|
TryRestoreHeadRotation();
|
||||||
m_bindRotation = (m_avatarDescriptor.transform.GetMatrix().inverse * m_headBone.GetMatrix()).rotation;
|
}
|
||||||
|
}
|
||||||
if(m_lookIK != null)
|
void SetSmoothing(float p_value)
|
||||||
m_lookIK.solver.OnPostUpdate += this.OnLookIKPostUpdate;
|
{
|
||||||
|
m_smoothing = 1f - Mathf.Clamp(p_value, 0f, 0.99f);
|
||||||
}
|
}
|
||||||
internal void OnAvatarClear()
|
|
||||||
{
|
// Arbitrary
|
||||||
m_avatarDescriptor = null;
|
void TryRestoreHeadRotation()
|
||||||
m_lookIK = null;
|
{
|
||||||
m_headBone = null;
|
if(m_enabled && m_headTracking)
|
||||||
m_lastHeadRotation = Quaternion.identity;
|
m_lastHeadRotation = ((m_headBone != null) ? m_headBone.rotation : m_bindRotation);
|
||||||
m_bindRotation = Quaternion.identity;
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Settings
|
|
||||||
internal void SetEnabled(bool p_state)
|
|
||||||
{
|
|
||||||
if(m_enabled != p_state)
|
|
||||||
{
|
|
||||||
m_enabled = p_state;
|
|
||||||
if(m_enabled && m_headTracking)
|
|
||||||
m_lastHeadRotation = ((m_headBone != null) ? m_headBone.rotation : m_bindRotation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internal 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
internal void SetEyeTracking(bool p_state)
|
|
||||||
{
|
|
||||||
m_eyeTracking = p_state;
|
|
||||||
}
|
|
||||||
internal void SetBlinking(bool p_state)
|
|
||||||
{
|
|
||||||
m_blinking = p_state;
|
|
||||||
}
|
|
||||||
internal void SetSmoothing(float p_value)
|
|
||||||
{
|
|
||||||
m_smoothing = 1f - Mathf.Clamp(p_value, 0f, 0.99f);
|
|
||||||
}
|
|
||||||
internal void SetMirrored(bool p_state)
|
|
||||||
{
|
|
||||||
m_mirrored = p_state;
|
|
||||||
}
|
|
||||||
internal void SetFaceOverride(bool p_state)
|
|
||||||
{
|
|
||||||
m_faceOverride = p_state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,146 +1,119 @@
|
||||||
using ABI.CCK.Components;
|
using ABI_RC.Core.Player;
|
||||||
using ABI_RC.Core.Player;
|
using ABI_RC.Core.Savior;
|
||||||
using System.Reflection;
|
using ABI_RC.Systems.FaceTracking;
|
||||||
|
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;
|
||||||
MemoryMapReader m_mapReader = null;
|
|
||||||
byte[] m_buffer = null;
|
TrackingModule m_trackingModule = null;
|
||||||
TrackingData m_trackingData;
|
HeadTracked m_localTracked = null;
|
||||||
|
|
||||||
HeadTracked m_localTracked = null;
|
public override void OnInitializeMelon()
|
||||||
|
{
|
||||||
public override void OnInitializeMelon()
|
if(ms_instance == null)
|
||||||
{
|
ms_instance = this;
|
||||||
if(ms_instance == null)
|
|
||||||
ms_instance = this;
|
Settings.Init();
|
||||||
|
|
||||||
Settings.Init();
|
m_trackingModule = new TrackingModule();
|
||||||
|
|
||||||
m_mapReader = new MemoryMapReader();
|
// Patches
|
||||||
m_buffer = new byte[1024];
|
HarmonyInstance.Patch(
|
||||||
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
||||||
m_mapReader.Open("head/data");
|
null,
|
||||||
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
// Patches
|
);
|
||||||
HarmonyInstance.Patch(
|
HarmonyInstance.Patch(
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.ClearAvatar)),
|
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
||||||
null,
|
null,
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnAvatarClear_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
);
|
);
|
||||||
HarmonyInstance.Patch(
|
|
||||||
typeof(PlayerSetup).GetMethod(nameof(PlayerSetup.SetupAvatar)),
|
MelonLoader.MelonCoroutines.Start(WaitForInstances());
|
||||||
null,
|
}
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnSetupAvatar_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
|
||||||
);
|
System.Collections.IEnumerator WaitForInstances()
|
||||||
HarmonyInstance.Patch(
|
{
|
||||||
typeof(CVREyeController).GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic),
|
while(MetaPort.Instance == null)
|
||||||
null,
|
yield return null;
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnEyeControllerUpdate_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
|
||||||
);
|
while(PlayerSetup.Instance == null)
|
||||||
HarmonyInstance.Patch(
|
yield return null;
|
||||||
typeof(CVRFaceTracking).GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic),
|
|
||||||
null,
|
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
||||||
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnFaceTrackingUpdate_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
FaceTrackingManager.Instance.RegisterModule(m_trackingModule);
|
||||||
);
|
|
||||||
|
// If you think it's a joke to put patch here, go on, try to put it in OnInitializeMelon, you melon :>
|
||||||
MelonLoader.MelonCoroutines.Start(WaitForPlayer());
|
HarmonyInstance.Patch(
|
||||||
}
|
typeof(CVREyeController).GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic),
|
||||||
|
null,
|
||||||
System.Collections.IEnumerator WaitForPlayer()
|
new HarmonyLib.HarmonyMethod(typeof(DesktopHeadTracking).GetMethod(nameof(OnEyeControllerUpdate_Postfix), BindingFlags.Static | BindingFlags.NonPublic))
|
||||||
{
|
);
|
||||||
while(PlayerSetup.Instance == null)
|
}
|
||||||
yield return null;
|
|
||||||
|
public override void OnDeinitializeMelon()
|
||||||
m_localTracked = PlayerSetup.Instance.gameObject.AddComponent<HeadTracked>();
|
{
|
||||||
m_localTracked.SetEnabled(Settings.Enabled);
|
if(ms_instance == this)
|
||||||
m_localTracked.SetHeadTracking(Settings.HeadTracking);
|
ms_instance = null;
|
||||||
m_localTracked.SetEyeTracking(Settings.EyeTracking);
|
|
||||||
m_localTracked.SetBlinking(Settings.Blinking);
|
m_trackingModule = null;
|
||||||
m_localTracked.SetMirrored(Settings.Mirrored);
|
m_localTracked = null;
|
||||||
m_localTracked.SetSmoothing(Settings.Smoothing);
|
}
|
||||||
m_localTracked.SetFaceOverride(Settings.FaceOverride);
|
|
||||||
}
|
public override void OnUpdate()
|
||||||
|
{
|
||||||
public override void OnDeinitializeMelon()
|
if(Settings.Enabled && (m_trackingModule != null))
|
||||||
{
|
{
|
||||||
if(ms_instance == this)
|
m_trackingModule.Update();
|
||||||
ms_instance = null;
|
if(m_localTracked != null)
|
||||||
|
m_localTracked.UpdateTrackingData(ref m_trackingModule.GetLatestTrackingData());
|
||||||
m_mapReader?.Close();
|
}
|
||||||
m_mapReader = null;
|
}
|
||||||
m_buffer = null;
|
|
||||||
m_localTracked = null;
|
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
||||||
}
|
void OnSetupAvatar()
|
||||||
|
{
|
||||||
public override void OnUpdate()
|
try
|
||||||
{
|
{
|
||||||
if(Settings.Enabled && m_mapReader.Read(ref m_buffer))
|
if(m_localTracked != null)
|
||||||
{
|
m_localTracked.OnSetupAvatar();
|
||||||
m_trackingData = TrackingData.ToObject(m_buffer);
|
}
|
||||||
if(m_localTracked != null)
|
catch(System.Exception e)
|
||||||
m_localTracked.UpdateTrackingData(ref m_trackingData);
|
{
|
||||||
}
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
static void OnSetupAvatar_Postfix() => ms_instance?.OnSetupAvatar();
|
|
||||||
void OnSetupAvatar()
|
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
||||||
{
|
void OnAvatarClear()
|
||||||
try
|
{
|
||||||
{
|
try
|
||||||
if(m_localTracked != null)
|
{
|
||||||
m_localTracked.OnSetupAvatar();
|
if(m_localTracked != null)
|
||||||
}
|
m_localTracked.OnAvatarClear();
|
||||||
catch(System.Exception e)
|
}
|
||||||
{
|
catch(System.Exception e)
|
||||||
MelonLoader.MelonLogger.Error(e);
|
{
|
||||||
}
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
static void OnAvatarClear_Postfix() => ms_instance?.OnAvatarClear();
|
|
||||||
void OnAvatarClear()
|
static void OnEyeControllerUpdate_Postfix(ref CVREyeController __instance) => ms_instance?.OnEyeControllerUpdate(__instance);
|
||||||
{
|
void OnEyeControllerUpdate(CVREyeController p_component)
|
||||||
try
|
{
|
||||||
{
|
try
|
||||||
if(m_localTracked != null)
|
{
|
||||||
m_localTracked.OnAvatarClear();
|
if(p_component.isLocal && (m_localTracked != null))
|
||||||
}
|
m_localTracked.OnEyeControllerUpdate(p_component);
|
||||||
catch(System.Exception e)
|
}
|
||||||
{
|
catch(System.Exception e)
|
||||||
MelonLoader.MelonLogger.Error(e);
|
{
|
||||||
}
|
MelonLoader.MelonLogger.Error(e);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
static void OnEyeControllerUpdate_Postfix(ref CVREyeController __instance) => ms_instance?.OnEyeControllerUpdate(__instance);
|
}
|
||||||
void OnEyeControllerUpdate(CVREyeController p_component)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if(p_component.isLocal && (m_localTracked != null))
|
|
||||||
m_localTracked.OnEyeControllerUpdate(p_component);
|
|
||||||
}
|
|
||||||
catch(System.Exception e)
|
|
||||||
{
|
|
||||||
MelonLoader.MelonLogger.Error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void OnFaceTrackingUpdate_Postfix(ref CVRFaceTracking __instance) => ms_instance?.OnFaceTrackingUpdate(__instance);
|
|
||||||
void OnFaceTrackingUpdate(CVRFaceTracking p_component)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if(p_component.isLocal && (m_localTracked != null))
|
|
||||||
m_localTracked.OnFaceTrackingUpdate(p_component);
|
|
||||||
}
|
|
||||||
catch(System.Exception e)
|
|
||||||
{
|
|
||||||
MelonLoader.MelonLogger.Error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.1.2-ex", "SDraw", "https://github.com/SDraw/ml_mods_cvr")]
|
[assembly: MelonLoader.MelonInfo(typeof(ml_dht.DesktopHeadTracking), "DesktopHeadTracking", "1.2.0", "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,29 +1,31 @@
|
||||||
# Desktop Head Tracking
|
# Desktop Head Tracking
|
||||||
This mod adds desktop head tracking based on data from memory-mapped file `head/data`.
|
This mod adds desktop head tracking based on data from memory-mapped file `head/data`.
|
||||||
Refer to `TrackingData.cs` for reference in case of implementing own software.
|
Refer to `TrackingData.cs` for reference in case of implementing own software.
|
||||||
|
|
||||||
[](https://youtu.be/jgcFhSNi9DM)
|
[](https://youtu.be/jgcFhSNi9DM)
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
* Head rotation
|
* Head rotation
|
||||||
* Eyes gaze direction
|
* Eyes gaze direction
|
||||||
* Blinking
|
* Basic mouth shapes: open, smile and pout
|
||||||
* Basic mouth shapes
|
* Blinking
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
* Install [latest MelonLoader](https://github.com/LavaGang/MelonLoader)
|
* Install [latest MelonLoader](https://github.com/LavaGang/MelonLoader)
|
||||||
* Get [latest release DLL](../../../releases/latest):
|
* Get [latest release DLL](../../../releases/latest):
|
||||||
* Put `ml_dht.dll` in `Mods` folder of game
|
* Put `ml_dht.dll` in `Mods` folder of game
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
Available mod's settings in `Settings - Implementation - Desktop Head Tracking`:
|
Available mod's settings in `Settings - Implementation - Desktop Head Tracking`:
|
||||||
* **Enabled:** enables mod's activity; default value - `false`.
|
* **Enabled:** enables mod's activity; default value - `false`.
|
||||||
* **Use head tracking:** enables head tracking; default value - `true`.
|
* **Use head tracking:** enables head tracking; default value - `true`.
|
||||||
* **Use eyes tracking:** uses eyes tracking from data; default value - `true`.
|
* **Use eyes tracking:** enables eyes tracking; default value - `true`.
|
||||||
* **Use blinking:** uses blinking from data; default value - `true`.
|
* **Use face tracking:** enables mouth shapes tracking; default value - `true`.
|
||||||
* **Mirrored movement:** mirrors movement and gaze along 0YZ plane; default value - `false`.
|
* **Note:** You need to enable desktop tracking of `Vive Face tracking` in `Settings - Implementation` menu page.
|
||||||
* **Movement smoothing:** smoothing factor between new and old movement data; default value - `50`.
|
* **Note:** Your avatar should have configured `CVR Face Tracking` component.
|
||||||
* **Override face tracking:** overrides and activates avatar's `VRC Face Tracking` components. List of used shapes: `Jaw_Open`, `Mouth_Pout`, `Mouth_Smile_Left`, `Mouth_Smile_Right`; default value - `true`.
|
* **Use blinking:** uses blinking from data; default value - `true`.
|
||||||
|
* **Mirrored movement:** mirrors movement and gaze along 0YZ plane; default value - `false`.
|
||||||
# Known compatible tracking software
|
* **Movement smoothing:** smoothing factor between new and old movement data; default value - `50`.
|
||||||
* [VSeeFace](https://www.vseeface.icu) with [Tracking Data Parser mod](https://github.com/SDraw/ml_mods_vsf)
|
|
||||||
|
# Known compatible tracking software
|
||||||
|
* [VSeeFace](https://www.vseeface.icu) with [Tracking Data Parser mod](https://github.com/SDraw/ml_mods_vsf)
|
|
@ -1,26 +1,26 @@
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
static class Scripts
|
static class ResourcesHandler
|
||||||
{
|
{
|
||||||
public static string GetEmbeddedScript(string p_name)
|
public static string GetEmbeddedResource(string p_name)
|
||||||
{
|
{
|
||||||
string l_result = "";
|
string l_result = "";
|
||||||
Assembly l_assembly = Assembly.GetExecutingAssembly();
|
Assembly l_assembly = Assembly.GetExecutingAssembly();
|
||||||
string l_assemblyName = l_assembly.GetName().Name;
|
string l_assemblyName = l_assembly.GetName().Name;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Stream l_libraryStream = l_assembly.GetManifestResourceStream(l_assemblyName + ".resources." + p_name);
|
Stream l_libraryStream = l_assembly.GetManifestResourceStream(l_assemblyName + ".resources." + p_name);
|
||||||
StreamReader l_streadReader = new StreamReader(l_libraryStream);
|
StreamReader l_streadReader = new StreamReader(l_libraryStream);
|
||||||
l_result = l_streadReader.ReadToEnd();
|
l_result = l_streadReader.ReadToEnd();
|
||||||
}
|
}
|
||||||
catch(Exception) { }
|
catch(Exception) { }
|
||||||
|
|
||||||
return l_result;
|
return l_result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,163 +1,160 @@
|
||||||
using ABI_RC.Core.InteractionSystem;
|
using ABI_RC.Core.InteractionSystem;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ml_dht
|
namespace ml_dht
|
||||||
{
|
{
|
||||||
static class Settings
|
static class Settings
|
||||||
{
|
{
|
||||||
enum ModSetting
|
enum ModSetting
|
||||||
{
|
{
|
||||||
Enabled = 0,
|
Enabled = 0,
|
||||||
HeadTracking,
|
HeadTracking,
|
||||||
EyeTracking,
|
EyeTracking,
|
||||||
Blinking,
|
FaceTracking,
|
||||||
Mirrored,
|
Blinking,
|
||||||
Smoothing,
|
Mirrored,
|
||||||
FaceOverride
|
Smoothing,
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Enabled { get; private set; } = false;
|
public static bool Enabled { get; private set; } = false;
|
||||||
public static bool HeadTracking { get; private set; } = true;
|
public static bool HeadTracking { get; private set; } = true;
|
||||||
public static bool EyeTracking { get; private set; } = true;
|
public static bool EyeTracking { get; private set; } = true;
|
||||||
public static bool Blinking { get; private set; } = true;
|
public static bool FaceTracking { get; private set; } = true;
|
||||||
public static bool Mirrored { get; private set; } = false;
|
public static bool Blinking { get; private set; } = true;
|
||||||
public static float Smoothing { get; private set; } = 0.5f;
|
public static bool Mirrored { get; private set; } = false;
|
||||||
public static bool FaceOverride { get; private set; } = true;
|
public static float Smoothing { get; private set; } = 0.5f;
|
||||||
|
|
||||||
static MelonLoader.MelonPreferences_Category ms_category = null;
|
static MelonLoader.MelonPreferences_Category ms_category = null;
|
||||||
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> HeadTrackingChange;
|
||||||
static public event Action<bool> EyeTrackingChange;
|
static public event Action<bool> EyeTrackingChange;
|
||||||
static public event Action<bool> BlinkingChange;
|
static public event Action<bool> FaceTrackingChange;
|
||||||
static public event Action<bool> MirroredChange;
|
static public event Action<bool> BlinkingChange;
|
||||||
static public event Action<float> SmoothingChange;
|
static public event Action<bool> MirroredChange;
|
||||||
static public event Action<bool> FaceOverrideChange;
|
static public event Action<float> SmoothingChange;
|
||||||
|
|
||||||
internal static void Init()
|
|
||||||
{
|
internal static void Init()
|
||||||
ms_category = MelonLoader.MelonPreferences.CreateCategory("DHT");
|
{
|
||||||
|
ms_category = MelonLoader.MelonPreferences.CreateCategory("DHT");
|
||||||
ms_entries = new List<MelonLoader.MelonPreferences_Entry>()
|
|
||||||
{
|
ms_entries = new List<MelonLoader.MelonPreferences_Entry>()
|
||||||
ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled),
|
{
|
||||||
ms_category.CreateEntry(ModSetting.HeadTracking.ToString(), HeadTracking),
|
ms_category.CreateEntry(ModSetting.Enabled.ToString(), Enabled),
|
||||||
ms_category.CreateEntry(ModSetting.EyeTracking.ToString(), EyeTracking),
|
ms_category.CreateEntry(ModSetting.HeadTracking.ToString(), HeadTracking),
|
||||||
ms_category.CreateEntry(ModSetting.Blinking.ToString(), Blinking),
|
ms_category.CreateEntry(ModSetting.EyeTracking.ToString(), EyeTracking),
|
||||||
ms_category.CreateEntry(ModSetting.Mirrored.ToString(), Mirrored),
|
ms_category.CreateEntry(ModSetting.FaceTracking.ToString(), FaceTracking),
|
||||||
ms_category.CreateEntry(ModSetting.Smoothing.ToString(), (int)(Smoothing * 50f)),
|
ms_category.CreateEntry(ModSetting.Blinking.ToString(), Blinking),
|
||||||
ms_category.CreateEntry(ModSetting.FaceOverride.ToString(), FaceOverride)
|
ms_category.CreateEntry(ModSetting.Mirrored.ToString(), Mirrored),
|
||||||
};
|
ms_category.CreateEntry(ModSetting.Smoothing.ToString(), (int)(Smoothing * 50f)),
|
||||||
|
};
|
||||||
Load();
|
|
||||||
|
Enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue;
|
||||||
MelonLoader.MelonCoroutines.Start(WaitMainMenuUi());
|
HeadTracking = (bool)ms_entries[(int)ModSetting.HeadTracking].BoxedValue;
|
||||||
}
|
EyeTracking = (bool)ms_entries[(int)ModSetting.EyeTracking].BoxedValue;
|
||||||
|
FaceTracking = (bool)ms_entries[(int)ModSetting.FaceTracking].BoxedValue;
|
||||||
static System.Collections.IEnumerator WaitMainMenuUi()
|
Blinking = (bool)ms_entries[(int)ModSetting.Blinking].BoxedValue;
|
||||||
{
|
Mirrored = (bool)ms_entries[(int)ModSetting.Mirrored].BoxedValue;
|
||||||
while(ViewManager.Instance == null)
|
Smoothing = ((int)ms_entries[(int)ModSetting.Smoothing].BoxedValue) * 0.01f;
|
||||||
yield return null;
|
|
||||||
while(ViewManager.Instance.gameMenuView == null)
|
MelonLoader.MelonCoroutines.Start(WaitMainMenuUi());
|
||||||
yield return null;
|
}
|
||||||
while(ViewManager.Instance.gameMenuView.Listener == null)
|
|
||||||
yield return null;
|
static System.Collections.IEnumerator WaitMainMenuUi()
|
||||||
|
{
|
||||||
ViewManager.Instance.gameMenuView.Listener.ReadyForBindings += () =>
|
while(ViewManager.Instance == null)
|
||||||
{
|
yield return null;
|
||||||
ViewManager.Instance.gameMenuView.View.BindCall("MelonMod_DHT_Call_InpSlider", new Action<string, string>(OnSliderUpdate));
|
while(ViewManager.Instance.gameMenuView == null)
|
||||||
ViewManager.Instance.gameMenuView.View.BindCall("MelonMod_DHT_Call_InpToggle", new Action<string, string>(OnToggleUpdate));
|
yield return null;
|
||||||
};
|
while(ViewManager.Instance.gameMenuView.Listener == null)
|
||||||
ViewManager.Instance.gameMenuView.Listener.FinishLoad += (_) =>
|
yield return null;
|
||||||
{
|
|
||||||
ViewManager.Instance.gameMenuView.View.ExecuteScript(Scripts.GetEmbeddedScript("menu.js"));
|
ViewManager.Instance.gameMenuView.Listener.ReadyForBindings += () =>
|
||||||
foreach(var l_entry in ms_entries)
|
{
|
||||||
ViewManager.Instance.gameMenuView.View.TriggerEvent("updateModSettingDHT", l_entry.DisplayName, l_entry.GetValueAsString());
|
ViewManager.Instance.gameMenuView.View.BindCall("OnToggleUpdate_" + ms_category.Identifier, new Action<string, string>(OnToggleUpdate));
|
||||||
};
|
ViewManager.Instance.gameMenuView.View.BindCall("OnSliderUpdate_" + ms_category.Identifier, new Action<string, string>(OnSliderUpdate));
|
||||||
}
|
};
|
||||||
|
ViewManager.Instance.gameMenuView.Listener.FinishLoad += (_) =>
|
||||||
static void Load()
|
{
|
||||||
{
|
ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mods_extension.js"));
|
||||||
Enabled = (bool)ms_entries[(int)ModSetting.Enabled].BoxedValue;
|
ViewManager.Instance.gameMenuView.View.ExecuteScript(ResourcesHandler.GetEmbeddedResource("mod_menu.js"));
|
||||||
HeadTracking = (bool)ms_entries[(int)ModSetting.HeadTracking].BoxedValue;
|
foreach(var l_entry in ms_entries)
|
||||||
EyeTracking = (bool)ms_entries[(int)ModSetting.EyeTracking].BoxedValue;
|
ViewManager.Instance.gameMenuView.View.TriggerEvent("updateModSetting", ms_category.Identifier, l_entry.DisplayName, l_entry.GetValueAsString());
|
||||||
Blinking = (bool)ms_entries[(int)ModSetting.Blinking].BoxedValue;
|
};
|
||||||
Mirrored = (bool)ms_entries[(int)ModSetting.Mirrored].BoxedValue;
|
}
|
||||||
Smoothing = ((int)ms_entries[(int)ModSetting.Smoothing].BoxedValue) * 0.01f;
|
|
||||||
FaceOverride = (bool)ms_entries[(int)ModSetting.FaceOverride].BoxedValue;
|
static void OnSliderUpdate(string p_name, string p_value)
|
||||||
}
|
{
|
||||||
|
if(Enum.TryParse(p_name, out ModSetting l_setting))
|
||||||
static void OnSliderUpdate(string p_name, string p_value)
|
{
|
||||||
{
|
switch(l_setting)
|
||||||
if(Enum.TryParse(p_name, out ModSetting l_setting))
|
{
|
||||||
{
|
case ModSetting.Smoothing:
|
||||||
switch(l_setting)
|
{
|
||||||
{
|
Smoothing = int.Parse(p_value) * 0.01f;
|
||||||
case ModSetting.Smoothing:
|
SmoothingChange?.Invoke(Smoothing);
|
||||||
{
|
}
|
||||||
Smoothing = int.Parse(p_value) * 0.01f;
|
break;
|
||||||
SmoothingChange?.Invoke(Smoothing);
|
}
|
||||||
}
|
|
||||||
break;
|
ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ms_entries[(int)l_setting].BoxedValue = int.Parse(p_value);
|
|
||||||
}
|
static void OnToggleUpdate(string p_name, string p_value)
|
||||||
}
|
{
|
||||||
|
if(Enum.TryParse(p_name, out ModSetting l_setting))
|
||||||
static void OnToggleUpdate(string p_name, string p_value)
|
{
|
||||||
{
|
switch(l_setting)
|
||||||
if(Enum.TryParse(p_name, out ModSetting l_setting))
|
{
|
||||||
{
|
case ModSetting.Enabled:
|
||||||
switch(l_setting)
|
{
|
||||||
{
|
Enabled = bool.Parse(p_value);
|
||||||
case ModSetting.Enabled:
|
EnabledChange?.Invoke(Enabled);
|
||||||
{
|
}
|
||||||
Enabled = bool.Parse(p_value);
|
break;
|
||||||
EnabledChange?.Invoke(Enabled);
|
|
||||||
}
|
case ModSetting.HeadTracking:
|
||||||
break;
|
{
|
||||||
|
HeadTracking = bool.Parse(p_value);
|
||||||
case ModSetting.HeadTracking:
|
HeadTrackingChange?.Invoke(HeadTracking);
|
||||||
{
|
}
|
||||||
HeadTracking = bool.Parse(p_value);
|
break;
|
||||||
HeadTrackingChange?.Invoke(HeadTracking);
|
|
||||||
}
|
case ModSetting.EyeTracking:
|
||||||
break;
|
{
|
||||||
|
EyeTracking = bool.Parse(p_value);
|
||||||
case ModSetting.EyeTracking:
|
EyeTrackingChange?.Invoke(EyeTracking);
|
||||||
{
|
}
|
||||||
EyeTracking = bool.Parse(p_value);
|
break;
|
||||||
EyeTrackingChange?.Invoke(EyeTracking);
|
|
||||||
}
|
case ModSetting.FaceTracking:
|
||||||
break;
|
{
|
||||||
|
FaceTracking = bool.Parse(p_value);
|
||||||
case ModSetting.Blinking:
|
FaceTrackingChange?.Invoke(FaceTracking);
|
||||||
{
|
}
|
||||||
Blinking = bool.Parse(p_value);
|
break;
|
||||||
BlinkingChange?.Invoke(Blinking);
|
|
||||||
}
|
case ModSetting.Blinking:
|
||||||
break;
|
{
|
||||||
|
Blinking = bool.Parse(p_value);
|
||||||
case ModSetting.Mirrored:
|
BlinkingChange?.Invoke(Blinking);
|
||||||
{
|
}
|
||||||
Mirrored = bool.Parse(p_value);
|
break;
|
||||||
MirroredChange?.Invoke(Mirrored);
|
|
||||||
}
|
case ModSetting.Mirrored:
|
||||||
break;
|
{
|
||||||
|
Mirrored = bool.Parse(p_value);
|
||||||
case ModSetting.FaceOverride:
|
MirroredChange?.Invoke(Mirrored);
|
||||||
{
|
}
|
||||||
FaceOverride = bool.Parse(p_value);
|
break;
|
||||||
FaceOverrideChange?.Invoke(FaceOverride);
|
}
|
||||||
}
|
|
||||||
break;
|
ms_entries[(int)l_setting].BoxedValue = bool.Parse(p_value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ms_entries[(int)l_setting].BoxedValue = bool.Parse(p_value);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
70
ml_dht/TrackingModule.cs
Normal file
70
ml_dht/TrackingModule.cs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
using ABI_RC.Systems.FaceTracking;
|
||||||
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
using ViveSR.anipal.Lip;
|
||||||
|
|
||||||
|
namespace ml_dht
|
||||||
|
{
|
||||||
|
class TrackingModule : ITrackingModule
|
||||||
|
{
|
||||||
|
bool m_registered = false;
|
||||||
|
bool m_activeAsModule = false;
|
||||||
|
MemoryMapReader m_mapReader = null;
|
||||||
|
byte[] m_buffer = null;
|
||||||
|
TrackingData m_trackingData;
|
||||||
|
LipData_v2 m_lipData;
|
||||||
|
|
||||||
|
public TrackingModule()
|
||||||
|
{
|
||||||
|
m_lipData = new LipData_v2();
|
||||||
|
m_lipData.frame = 0;
|
||||||
|
m_lipData.time = 0;
|
||||||
|
m_lipData.image = IntPtr.Zero;
|
||||||
|
m_lipData.prediction_data = new PredictionData_v2();
|
||||||
|
m_lipData.prediction_data.blend_shape_weight = new float[(int)LipShape_v2.Max];
|
||||||
|
|
||||||
|
m_buffer = new byte[1024];
|
||||||
|
m_mapReader = new MemoryMapReader();
|
||||||
|
m_mapReader.Open("head/data");
|
||||||
|
}
|
||||||
|
~TrackingModule()
|
||||||
|
{
|
||||||
|
m_mapReader.Close();
|
||||||
|
m_mapReader = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public (bool, bool) Initialize(bool useEye, bool useLip)
|
||||||
|
{
|
||||||
|
m_registered = true;
|
||||||
|
m_activeAsModule = true;
|
||||||
|
return (false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Shutdown()
|
||||||
|
{
|
||||||
|
m_activeAsModule = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsEyeDataAvailable() => false;
|
||||||
|
public bool IsLipDataAvailable() => true;
|
||||||
|
|
||||||
|
internal void Update()
|
||||||
|
{
|
||||||
|
if(m_mapReader.Read(ref m_buffer))
|
||||||
|
{
|
||||||
|
m_trackingData = TrackingData.ToObject(m_buffer);
|
||||||
|
|
||||||
|
float l_weight = Mathf.Clamp01(Mathf.InverseLerp(0.25f, 1f, Mathf.Abs(m_trackingData.m_mouthShape)));
|
||||||
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Jaw_Open] = m_trackingData.m_mouthOpen;
|
||||||
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Pout] = ((m_trackingData.m_mouthShape > 0f) ? l_weight : 0f);
|
||||||
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Left] = ((m_trackingData.m_mouthShape < 0f) ? l_weight : 0f);
|
||||||
|
m_lipData.prediction_data.blend_shape_weight[(int)LipShape_v2.Mouth_Smile_Right] = ((m_trackingData.m_mouthShape < 0f) ? l_weight : 0f);
|
||||||
|
|
||||||
|
if(m_registered && m_activeAsModule && Settings.FaceTracking)
|
||||||
|
FaceTrackingManager.Instance.SubmitNewFacialData(m_lipData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal ref TrackingData GetLatestTrackingData() => ref m_trackingData;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,18 +1,18 @@
|
||||||
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 FieldInfo ms_cohtmlView = typeof(CohtmlControlledViewDisposable).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
static readonly FieldInfo ms_view = typeof(CohtmlControlledViewWrapper).GetField("_view", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
|
|
||||||
public static Matrix4x4 GetMatrix(this Transform p_transform, bool p_pos = true, bool p_rot = true, bool p_scl = false)
|
static public void ExecuteScript(this CohtmlControlledViewWrapper p_instance, string p_script) => ((cohtml.Net.View)ms_view.GetValue(p_instance)).ExecuteScript(p_script);
|
||||||
{
|
|
||||||
return Matrix4x4.TRS(p_pos ? p_transform.position : Vector3.zero, p_rot ? p_transform.rotation : Quaternion.identity, p_scl ? p_transform.localScale : Vector3.one);
|
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);
|
||||||
public static void ExecuteScript(this CohtmlControlledViewDisposable p_viewDisposable, string p_script) => ((cohtml.Net.View)ms_cohtmlView.GetValue(p_viewDisposable))?.ExecuteScript(p_script);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,71 +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.1.2</Version>
|
<Version>1.2.0</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\menu.js" />
|
<None Remove="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="resources\menu.js" />
|
<EmbeddedResource Include="resources\mod_menu.js" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="0Harmony">
|
<EmbeddedResource Include="..\js\mods_extension.js" Link="resources\mods_extension.js" />
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\0Harmony.dll</HintPath>
|
</ItemGroup>
|
||||||
<Private>false</Private>
|
|
||||||
</Reference>
|
<ItemGroup>
|
||||||
<Reference Include="Assembly-CSharp">
|
<Reference Include="0Harmony">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\0Harmony.dll</HintPath>
|
||||||
<Private>false</Private>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
<Private>false</Private>
|
||||||
<Reference Include="Assembly-CSharp-firstpass">
|
</Reference>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
<Reference Include="Assembly-CSharp">
|
||||||
<Private>false</Private>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
</Reference>
|
<Private>false</Private>
|
||||||
<Reference Include="cohtml.Net">
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
</Reference>
|
||||||
<Private>false</Private>
|
<Reference Include="Assembly-CSharp-firstpass">
|
||||||
</Reference>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
|
||||||
<Reference Include="Cohtml.Runtime">
|
<Private>false</Private>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Private>false</Private>
|
</Reference>
|
||||||
</Reference>
|
<Reference Include="cohtml.Net">
|
||||||
<Reference Include="MelonLoader">
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\cohtml.Net.dll</HintPath>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\MelonLoader.dll</HintPath>
|
<Private>false</Private>
|
||||||
<Private>false</Private>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine">
|
<Reference Include="Cohtml.Runtime">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\Cohtml.Runtime.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
</Reference>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Reference Include="UnityEngine.AnimationModule">
|
</Reference>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
<Reference Include="MelonLoader">
|
||||||
<Private>false</Private>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\MelonLoader\net35\MelonLoader.dll</HintPath>
|
||||||
</Reference>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
<Private>false</Private>
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
</Reference>
|
||||||
<Private>false</Private>
|
<Reference Include="UnityEngine">
|
||||||
</Reference>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.dll</HintPath>
|
||||||
</ItemGroup>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
</Reference>
|
||||||
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
<Reference Include="UnityEngine.AnimationModule">
|
||||||
</Target>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
|
||||||
|
<Private>false</Private>
|
||||||
</Project>
|
<SpecificVersion>false</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
|
<Exec Command="copy /y "$(TargetPath)" "D:\Games\Steam\steamapps\common\ChilloutVR\Mods\"" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
</Project>
|
70
ml_dht/resources/mod_menu.js
Normal file
70
ml_dht/resources/mod_menu.js
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
// Add own menu
|
||||||
|
{
|
||||||
|
let l_block = document.createElement('div');
|
||||||
|
l_block.innerHTML = `
|
||||||
|
<div class ="settings-subcategory">
|
||||||
|
<div class ="subcategory-name">Desktop Head Tracking</div>
|
||||||
|
<div class ="subcategory-description"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Enabled: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="Enabled" class ="inp_toggle no-scroll" data-current="false"></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 ="option-caption">Use eyes tracking: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="EyeTracking" class ="inp_toggle no-scroll" data-current="true"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Use face tracking: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="FaceTracking" class ="inp_toggle no-scroll" data-current="true"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Use blinking: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="Blinking" class ="inp_toggle no-scroll" data-current="true"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Mirrored movement: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="Mirrored" class ="inp_toggle no-scroll" data-current="false"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class ="row-wrapper">
|
||||||
|
<div class ="option-caption">Movement smoothing: </div>
|
||||||
|
<div class ="option-input">
|
||||||
|
<div id="Smoothing" class ="inp_slider no-scroll" data-min="0" data-max="99" data-current="50"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
`;
|
||||||
|
document.getElementById('settings-implementation').appendChild(l_block);
|
||||||
|
|
||||||
|
// Toggles
|
||||||
|
for (let l_toggle of l_block.querySelectorAll('.inp_toggle'))
|
||||||
|
modsExtension.addSetting('DHT', l_toggle.id, modsExtension.createToggle(l_toggle, 'OnToggleUpdate_DHT'));
|
||||||
|
|
||||||
|
// Sliders
|
||||||
|
for (let l_slider of l_block.querySelectorAll('.inp_slider'))
|
||||||
|
modsExtension.addSetting('DHT', l_slider.id, modsExtension.createSlider(l_slider, 'OnSliderUpdate_DHT'));
|
||||||
|
}
|
|
@ -41,50 +41,62 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ml_pmc">
|
<Reference Include="ml_pmc">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\ml_pmc.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\ml_pmc.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.AssetBundleModule">
|
<Reference Include="UnityEngine.AssetBundleModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.XRModule">
|
<Reference Include="UnityEngine.XRModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.XRModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_vei", "ml_vei\ml_vei.csp
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_prm", "ml_prm\ml_prm.csproj", "{C4C3F080-379F-49DB-ADC6-6328BE884AE3}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_prm", "ml_prm\ml_prm.csproj", "{C4C3F080-379F-49DB-ADC6-6328BE884AE3}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ml_asl", "ml_asl\ml_asl.csproj", "{5B4EC6EF-541A-47D2-B602-915205590553}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_asl", "ml_asl\ml_asl.csproj", "{5B4EC6EF-541A-47D2-B602-915205590553}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ml_pin", "ml_pin\ml_pin.csproj", "{7E493C28-7202-46F8-9789-D6C6FF7E5241}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_pin", "ml_pin\ml_pin.csproj", "{7E493C28-7202-46F8-9789-D6C6FF7E5241}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ml_dht", "ml_dht\ml_dht.csproj", "{31987392-989C-40C1-A48B-7F6099816EBE}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -54,6 +56,10 @@ Global
|
||||||
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Debug|x64.ActiveCfg = Debug|x64
|
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Release|x64.ActiveCfg = Release|x64
|
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Release|x64.ActiveCfg = Release|x64
|
||||||
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Release|x64.Build.0 = Release|x64
|
{7E493C28-7202-46F8-9789-D6C6FF7E5241}.Release|x64.Build.0 = Release|x64
|
||||||
|
{31987392-989C-40C1-A48B-7F6099816EBE}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{31987392-989C-40C1-A48B-7F6099816EBE}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{31987392-989C-40C1-A48B-7F6099816EBE}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{31987392-989C-40C1-A48B-7F6099816EBE}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -32,42 +32,52 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.InputLegacyModule">
|
<Reference Include="UnityEngine.InputLegacyModule">
|
||||||
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
<HintPath>D:\Games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -30,42 +30,52 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -28,38 +28,47 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="BTKUILib">
|
<Reference Include="BTKUILib">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.PhysicsModule">
|
<Reference Include="UnityEngine.PhysicsModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -24,50 +24,62 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="BTKUILib">
|
<Reference Include="BTKUILib">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\Mods\BTKUILib.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.ClothModule">
|
<Reference Include="UnityEngine.ClothModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<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>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.InputLegacyModule">
|
<Reference Include="UnityEngine.InputLegacyModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.PhysicsModule">
|
<Reference Include="UnityEngine.PhysicsModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="UnityEngine.ParticleSystemModule">
|
<Reference Include="UnityEngine.ParticleSystemModule">
|
||||||
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
|
<HintPath>D:\games\Steam\steamapps\common\ChilloutVR\ChilloutVR_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
|
||||||
<Private>false</Private>
|
<Private>false</Private>
|
||||||
|
<SpecificVersion>false</SpecificVersion>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -19,38 +19,47 @@
|
||||||
<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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</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>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue