From 35d5b7554ab33f63ea8727468f01374364f89f11 Mon Sep 17 00:00:00 2001 From: kafeijao Date: Fri, 8 Sep 2023 18:55:43 +0100 Subject: [PATCH] [NavMeshFollower] Added nav mesh follower. Updated project to unity 2021. --- {ManagedLibs => .ManagedLibs}/.keep | 0 .gitignore | 5 +- Directory.Build.props | 655 ++++++++++++++------- EyeMovementFix/EyeMovementFix.csproj | 6 +- Kafe_CVR_CCKs.sln | 6 + NavMeshFollower/CCK/FollowerInfo.cs | 178 ++++++ NavMeshFollower/NavMeshFollower.csproj | 6 + NavMeshFollower/Properties/AssemblyInfo.cs | 15 + NavMeshFollower/README.md | 175 ++++++ README.md | 67 ++- copy_and_nstrip_dll.bat | 19 - copy_and_nstrip_dll.ps1 | 165 +++++- 12 files changed, 1023 insertions(+), 274 deletions(-) rename {ManagedLibs => .ManagedLibs}/.keep (100%) create mode 100644 NavMeshFollower/CCK/FollowerInfo.cs create mode 100644 NavMeshFollower/NavMeshFollower.csproj create mode 100644 NavMeshFollower/Properties/AssemblyInfo.cs create mode 100644 NavMeshFollower/README.md delete mode 100644 copy_and_nstrip_dll.bat diff --git a/ManagedLibs/.keep b/.ManagedLibs/.keep similarity index 100% rename from ManagedLibs/.keep rename to .ManagedLibs/.keep diff --git a/.gitignore b/.gitignore index e3cc896..77cae62 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ FodyWeavers.xsd /.vscode NStrip.exe lib_names -ManagedLibs/*.dll -ManagedLibs/*.db +.ManagedLibs/*.dll +.ManagedLibs/*.db +lib_names.xml diff --git a/Directory.Build.props b/Directory.Build.props index fd6cb26..b8c6486 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,17 +1,20 @@ - out\ - preview + bin\ + latest false - net472 + netstandard2.1 enable false + false + + true true - full + embedded false DEBUG;TRACE prompt @@ -19,768 +22,1002 @@ - none + true + embedded true TRACE prompt 4 + + + + + + - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEditor.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEditor.dll False + + + - $(MsBuildThisFileDirectory)\ManagedLibs\0Harmony.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\0Harmony.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\MelonLoader.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\MelonLoader.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Accessibility.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Accessibility.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Assembly-CSharp-firstpass.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Assembly-CSharp-firstpass.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Assembly-CSharp.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Assembly-CSharp.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Aura2_Core.dll - False - - - $(MsBuildThisFileDirectory)\ManagedLibs\AVProVideo.Demos.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Aura2_Core.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AVProVideo.Extensions.Timeline.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AVProVideo.Extensions.Timeline.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AVProVideo.Extensions.UnityUI.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AVProVideo.Extensions.UnityUI.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AVProVideo.Extensions.VisualEffectGraph.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AVProVideo.Extensions.VisualEffectGraph.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AVProVideo.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AVProVideo.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AwesomeTechnologies.TouchReactSystemPro.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AwesomeTechnologies.TouchReactSystemPro.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\AwesomeTechnologies.VegetationStudioPro.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\AwesomeTechnologies.VegetationStudioPro.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Bhaptics.Tact.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Bhaptics.Tact.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Boxophobic.TheVehetationEngine.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Boxophobic.TheVehetationEngine.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Boxophobic.Utils.Scripts.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Boxophobic.Utils.Scripts.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Cinemachine.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Cinemachine.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\cohtml.Net.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\cohtml.Net.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Cohtml.RenderingBackend.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Cohtml.RenderingBackend.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Cohtml.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Cohtml.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Crc32.NET.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Crc32.NET.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\DarkRift.Client.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\DarkRift.Client.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\DarkRift.dll - False - - - $(MsBuildThisFileDirectory)\ManagedLibs\DarkRift.Server.dll - False - - - $(MsBuildThisFileDirectory)\ManagedLibs\DissonanceVoip.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\DarkRift.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\endel.nativewebsocket.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\endel.nativewebsocket.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\ICSharpCode.SharpZipLib.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\ICSharpCode.SharpZipLib.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\LibVLCSharp.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\MagicaCloth.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\MagicaCloth.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\MeshBakerCore.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\MeshBakerCore.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Mono.Data.Sqlite.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Mono.Data.Sqlite.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Mono.Posix.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Mono.Posix.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Mono.Security.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Mono.Security.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Mono.WebBrowser.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Mono.WebBrowser.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\MPUIKit.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\MPUIKit.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\mscorlib.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\mscorlib.dll False - - $(MsBuildThisFileDirectory)\ManagedLibs\netstandard.dll + + $(MsBuildThisFileDirectory)\.ManagedLibs\MTJobSystem.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Newtonsoft.Json.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Newtonsoft.Json.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\NicoKuroKusagi.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\NicoKuroKusagi.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Novell.Directory.Ldap.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Novell.Directory.Ldap.dll False - - $(MsBuildThisFileDirectory)\ManagedLibs\PWCommon3DLL.dll - False - - - $(MsBuildThisFileDirectory)\ManagedLibs\QHierarchyNullable.dll + + $(MsBuildThisFileDirectory)\.ManagedLibs\Oculus.LipSync.dll False - - $(MsBuildThisFileDirectory)\ManagedLibs\QHierarchyRuntime.dll + + $(MsBuildThisFileDirectory)\.ManagedLibs\PWCommon3DLL.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\SALSA-LipSync.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\SALSA-LipSync.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\SALSA.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\SALSA.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\ShapesRuntime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\ShapesRuntime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\SteamAudioUnity.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\SteamAudioUnity.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\SteamVR.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\SteamVR.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\SteamVR_Actions.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\SteamVR_Actions.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Buffers.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.ComponentModel.Composition.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.ComponentModel.Composition.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.ComponentModel.DataAnnotations.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.ComponentModel.DataAnnotations.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Configuration.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Configuration.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Core.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Core.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Data.DataSetExtensions.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Data.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Data.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Design.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Design.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Diagnostics.StackTrace.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Diagnostics.StackTrace.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.DirectoryServices.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.DirectoryServices.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Drawing.Design.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Drawing.Design.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Drawing.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Drawing.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.EnterpriseServices.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.EnterpriseServices.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Globalization.Extensions.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Globalization.Extensions.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.IO.Compression.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.IO.Compression.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.IO.Compression.FileSystem.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.IO.Compression.FileSystem.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Memory.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Net.Http.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Net.Http.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Numerics.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Numerics.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Runtime.CompilerServices.Unsafe.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Runtime.CompilerServices.Unsafe.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Runtime.Serialization.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Runtime.Serialization.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Runtime.Serialization.Formatters.Soap.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Runtime.Serialization.Formatters.Soap.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Runtime.Serialization.Xml.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Runtime.Serialization.Xml.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Security.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Security.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.ServiceModel.Internals.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.ServiceModel.Internals.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Transactions.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Transactions.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Web.ApplicationServices.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Web.ApplicationServices.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Web.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Web.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Web.Services.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Web.Services.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Windows.Forms.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Windows.Forms.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Xml.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Xml.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Xml.Linq.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Xml.Linq.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\System.Xml.XPath.XDocument.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\System.Xml.XPath.XDocument.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Tobii.GameIntegration.Net.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Tobii.GameIntegration.Net.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\TobiiXRCore.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\TobiiXRCore.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\TobiiXRDevTools.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\TobiiXRDevTools.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\TobiiXRG2OM.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\TobiiXRG2OM.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\TobiiXRSDK.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\TobiiXRSDK.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UniTask.Addressables.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UniTask.Addressables.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UniTask.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UniTask.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UniTask.DOTween.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UniTask.DOTween.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UniTask.Linq.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UniTask.Linq.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UniTask.TextMeshPro.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UniTask.TextMeshPro.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.AI.Navigation.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Analytics.DataPrivacy.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Analytics.DataPrivacy.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Build.SlimPlayerRuntime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Build.SlimPlayerRuntime.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.Cecil.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.Cecil.Mdb.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.Cecil.Pdb.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.Cecil.Rocks.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Burst.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Burst.Unsafe.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Burst.Unsafe.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Collections.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Collections.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Collections.LowLevel.ILSupport.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Deformations.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Deformations.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Entities.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Entities.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Entities.Hybrid.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Entities.Hybrid.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Entities.Hybrid.HybridComponents.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Entities.Hybrid.Tests.SeparateAssembly.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Entities.UI.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.InputSystem.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.InternalAPIEngineBridge.002.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.InternalAPIEngineBridge.003.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.InternalAPIEngineBridge.003.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.InternalAPIEngineBridge.012.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Jobs.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Jobs.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Mathematics.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Mathematics.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Mathematics.Extensions.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Mathematics.Extensions.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Mathematics.Extensions.Hybrid.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Mathematics.Extensions.Hybrid.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.MemoryProfiler.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Platforms.Common.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Platforms.Common.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Polybrush.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Polybrush.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Postprocessing.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Postprocessing.Runtime.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ProBuilder.Csg.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.ProBuilder.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ProBuilder.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.ProBuilder.KdTree.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ProBuilder.KdTree.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.ProBuilder.Poly2Tri.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ProBuilder.Poly2Tri.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.ProBuilder.Stl.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ProBuilder.Stl.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Profiling.Core.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Properties.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Properties.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Properties.Reflection.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Properties.Reflection.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Properties.UI.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Properties.UI.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.RenderPipelines.Core.Runtime.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.RenderPipelines.Core.Runtime.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.RenderPipelines.Core.ShaderLibrary.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.RenderPipelines.Core.ShaderLibrary.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Scenes.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Scenes.Hybrid.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Scenes.Hybrid.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.ScriptableBuildPipeline.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.ScriptableBuildPipeline.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Serialization.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Serialization.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Analytics.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Analytics.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Configuration.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Device.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Environments.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Environments.Internal.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Internal.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Networking.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Registration.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Scheduler.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Telemetry.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Core.Threading.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Services.Vivox.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Subsystem.Registration.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.TextMeshPro.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.TextMeshPro.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Timeline.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Timeline.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Transforms.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Transforms.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.Transforms.Hybrid.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.Transforms.Hybrid.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Unity.VectorGraphics.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.VectorGraphics.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.Management.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.Oculus.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenVR.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.ConformanceAutomation.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.MetaQuestSupport.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.MockRuntime.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.OculusQuestSupport.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.PICOSupport.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXR.Features.RuntimeDebugger.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\Unity.XR.OpenXRPico.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AccessibilityModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AccessibilityModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.Advertisements.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.Advertisements.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AIModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AIModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AndroidJNIModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AndroidJNIModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AnimationModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AnimationModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ARModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ARModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AssetBundleModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AssetBundleModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.AudioModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.AudioModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ClothModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ClothModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ClusterInputModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ClusterInputModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ClusterRendererModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ClusterRendererModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ContentLoadModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.CoreModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.CoreModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.CrashReportingModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.CrashReportingModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.DirectorModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.DirectorModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.DSPGraphModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.DSPGraphModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.GameCenterModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.GameCenterModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.GIModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.GridModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.GridModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.HotReloadModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.HotReloadModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ImageConversionModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ImageConversionModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.IMGUIModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.IMGUIModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.InputLegacyModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.InputLegacyModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.InputModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.InputModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.JSONSerializeModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.JSONSerializeModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.LocalizationModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.LocalizationModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.Monetization.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.Monetization.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.NVIDIAModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ParticleSystemModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ParticleSystemModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.PerformanceReportingModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.PerformanceReportingModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.Physics2DModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.Physics2DModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.PhysicsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.PhysicsModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ProfilerModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ProfilerModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.PropertiesModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.ScreenCaptureModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.ScreenCaptureModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.SharedInternalsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SharedInternalsModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SpatialTracking.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.SpriteMaskModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SpriteMaskModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.SpriteShapeModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SpriteShapeModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.StreamingModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.StreamingModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.SubstanceModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SubstanceModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.SubsystemsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.SubsystemsModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TerrainModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TerrainModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TerrainPhysicsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TerrainPhysicsModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TextCoreFontEngineModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TextCoreModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TextCoreModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TextCoreTextEngineModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TextRenderingModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TextRenderingModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TilemapModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TilemapModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.TLSModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.TLSModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UI.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UI.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UIElementsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UIElementsModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UIElementsNativeModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UIModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UIModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UmbraModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UmbraModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UNETModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UNETModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityAnalyticsCommonModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityAnalyticsModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityAnalyticsModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityConnectModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityConnectModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityCurlModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityTestProtocolModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityTestProtocolModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityWebRequestAssetBundleModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityWebRequestAssetBundleModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityWebRequestAudioModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityWebRequestAudioModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityWebRequestModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityWebRequestModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityWebRequestTextureModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityWebRequestTextureModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.UnityWebRequestWWWModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.UnityWebRequestWWWModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.VehiclesModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.VehiclesModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.VFXModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.VFXModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.VideoModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.VideoModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.VirtualTexturingModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.VRModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.VRModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.WindModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.WindModule.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.XR.LegacyInputHelpers.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\UnityEngine.XRModule.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\UnityEngine.XRModule.dll False - $(MsBuildThisFileDirectory)\ManagedLibs\Valve.Newtonsoft.Json.dll + $(MsBuildThisFileDirectory)\.ManagedLibs\Valve.Newtonsoft.Json.dll + False + + + $(MsBuildThisFileDirectory)\.ManagedLibs\VivoxUnity.dll False diff --git a/EyeMovementFix/EyeMovementFix.csproj b/EyeMovementFix/EyeMovementFix.csproj index bf1ead6..66a50a8 100644 --- a/EyeMovementFix/EyeMovementFix.csproj +++ b/EyeMovementFix/EyeMovementFix.csproj @@ -1,6 +1,2 @@ - - - - - + diff --git a/Kafe_CVR_CCKs.sln b/Kafe_CVR_CCKs.sln index c80815f..beac8b2 100644 --- a/Kafe_CVR_CCKs.sln +++ b/Kafe_CVR_CCKs.sln @@ -4,6 +4,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EyeMovementFix", "EyeMoveme EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CVRSuperMario64", "CVRSuperMario64\CVRSuperMario64.csproj", "{A73A34C6-2E5F-451D-A8CB-412F85000C5A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NavMeshFollower", "NavMeshFollower\NavMeshFollower.csproj", "{B64DE9CC-C0EE-43AE-99FB-4B3262308B04}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -18,5 +20,9 @@ Global {A73A34C6-2E5F-451D-A8CB-412F85000C5A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A73A34C6-2E5F-451D-A8CB-412F85000C5A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A73A34C6-2E5F-451D-A8CB-412F85000C5A}.Release|Any CPU.Build.0 = Release|Any CPU + {B64DE9CC-C0EE-43AE-99FB-4B3262308B04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B64DE9CC-C0EE-43AE-99FB-4B3262308B04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B64DE9CC-C0EE-43AE-99FB-4B3262308B04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B64DE9CC-C0EE-43AE-99FB-4B3262308B04}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/NavMeshFollower/CCK/FollowerInfo.cs b/NavMeshFollower/CCK/FollowerInfo.cs new file mode 100644 index 0000000..6934ea0 --- /dev/null +++ b/NavMeshFollower/CCK/FollowerInfo.cs @@ -0,0 +1,178 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.AI; + +using ABI.CCK.Components; +using NavMeshFollower.Properties; + +namespace Kafe.NavMeshFollower.CCK; + +[InitializeOnLoad] +public static class FollowerInfoInitializer { + static FollowerInfoInitializer() { + const string symbol = "KAFE_CVR_CCK_NAV_MESH_FOLLOWER_EXISTS"; + var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + if (defines.Contains(symbol)) return; + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, $"{defines};{symbol}"); + Debug.Log($"Added {symbol} Scripting Symbol."); + } +} + +public class FollowerInfo : MonoBehaviour { + + [SerializeField] public string version = AssemblyInfoParams.Version; + + [SerializeField] public CVRSpawnable spawnable; + [SerializeField] public NavMeshAgent navMeshAgent; + + [SerializeField] public Animator humanoidAnimator; + + [SerializeField] public bool hasLookAt; + [SerializeField] public Transform lookAtTargetTransform; + [SerializeField] public Transform headTransform; + + [SerializeField] public bool hasVRIK; + + // VRIK Left Arm + [SerializeField] public bool hasLeftArmIK; + [SerializeField] public Transform vrikLeftArmTargetTransform; + [SerializeField] public Transform leftHandAttachmentPoint; + + // VRIK Right Arm + [SerializeField] public bool hasRightArmIK; + [SerializeField] public Transform vrikRightArmTargetTransform; + [SerializeField] public Transform rightHandAttachmentPoint; +} + +[CanEditMultipleObjects] +[CustomEditor(typeof(FollowerInfo))] +public class FollowerInfoEditor : Editor { + + SerializedProperty spawnable; + SerializedProperty navMeshAgent; + SerializedProperty humanoidAnimator; + + SerializedProperty hasLookAt; + SerializedProperty lookAtTargetTransform; + SerializedProperty headTransform; + + SerializedProperty hasLeftArmIK; + SerializedProperty vrikLeftArmTargetTransform; + SerializedProperty leftHandAttachmentPoint; + + SerializedProperty hasRightArmIK; + SerializedProperty vrikRightArmTargetTransform; + SerializedProperty rightHandAttachmentPoint; + + private void OnEnable() { + + spawnable = serializedObject.FindProperty("spawnable"); + navMeshAgent = serializedObject.FindProperty("navMeshAgent"); + humanoidAnimator = serializedObject.FindProperty("humanoidAnimator"); + + hasLookAt = serializedObject.FindProperty("hasLookAt"); + lookAtTargetTransform = serializedObject.FindProperty("lookAtTargetTransform"); + headTransform = serializedObject.FindProperty("headTransform"); + + hasLeftArmIK = serializedObject.FindProperty("hasLeftArmIK"); + vrikLeftArmTargetTransform = serializedObject.FindProperty("vrikLeftArmTargetTransform"); + leftHandAttachmentPoint = serializedObject.FindProperty("leftHandAttachmentPoint"); + + hasRightArmIK = serializedObject.FindProperty("hasRightArmIK"); + vrikRightArmTargetTransform = serializedObject.FindProperty("vrikRightArmTargetTransform"); + rightHandAttachmentPoint = serializedObject.FindProperty("rightHandAttachmentPoint"); + } + + private bool ValidateComponent(string propertyName, Component component, Transform spawnableTransform, bool? shouldBeEnabled){ + if (component == null) { + EditorGUILayout.HelpBox($"{propertyName} needs to be assigned!", MessageType.Error); + return false; + } + var valid = true; + if (!component.transform.IsChildOf(spawnableTransform)) { + EditorGUILayout.HelpBox($"{propertyName} needs to be either on the same component or deeper in the hierarchy of the CVRSpawnable!", MessageType.Error); + valid = false; + } + if (shouldBeEnabled.HasValue && component is MonoBehaviour behavior && behavior.enabled != shouldBeEnabled.Value) { + var status = shouldBeEnabled.Value ? "enabled" : "disabled"; + EditorGUILayout.HelpBox($"{propertyName} component should be {status}!", MessageType.Error); + valid = false; + } + return valid; + } + + + public override void OnInspectorGUI() { + + if (Application.isPlaying) { + EditorGUILayout.HelpBox("You can't edit this script play mode!", MessageType.Warning); + return; + } + + serializedObject.Update(); + + var behavior = (FollowerInfo) target; + + EditorGUILayout.LabelField("Base Setup", EditorStyles.boldLabel); + + EditorGUILayout.PropertyField(spawnable); + var spawnableObject = spawnable.objectReferenceValue as CVRSpawnable; + if (spawnableObject == null) { + EditorGUILayout.HelpBox("The CVRSpawnable needs to be assigned!", MessageType.Error); + return; + } + ValidateComponent(nameof(spawnable), spawnableObject, spawnableObject.transform, true); + + EditorGUILayout.PropertyField(navMeshAgent); + ValidateComponent(nameof(navMeshAgent), navMeshAgent.objectReferenceValue as NavMeshAgent, spawnableObject.transform, false); + + EditorGUILayout.Space(); + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Look At Setup", EditorStyles.boldLabel); + + EditorGUILayout.PropertyField(hasLookAt); + if (hasLookAt.boolValue) { + + EditorGUILayout.PropertyField(lookAtTargetTransform); + ValidateComponent(nameof(lookAtTargetTransform), lookAtTargetTransform.objectReferenceValue as Transform, spawnableObject.transform, null); + + EditorGUILayout.PropertyField(headTransform); + ValidateComponent(nameof(headTransform), headTransform.objectReferenceValue as Transform, spawnableObject.transform, null); + } + + EditorGUILayout.Space(); + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Humanoid IK Setup", EditorStyles.boldLabel); + + if (hasRightArmIK.boolValue || hasLeftArmIK.boolValue) { + EditorGUILayout.PropertyField(humanoidAnimator); + var animator = humanoidAnimator.objectReferenceValue as Animator; + if (ValidateComponent(nameof(humanoidAnimator), animator, spawnableObject.transform, null)) { + if (!animator!.isHuman) { + EditorGUILayout.HelpBox($"{nameof(humanoidAnimator)} needs to be a humanoid animator, as we need to get the hand transform references.", MessageType.Error); + } + } + EditorGUILayout.HelpBox($"{nameof(humanoidAnimator)} You can add the bool parameter #SpawnedByMe to this animator, it will set by the mod to be true on followers you spawn.", MessageType.Info); + } + + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(hasLeftArmIK); + if (hasLeftArmIK.boolValue) { + EditorGUILayout.PropertyField(vrikLeftArmTargetTransform); + ValidateComponent(nameof(vrikLeftArmTargetTransform), vrikLeftArmTargetTransform.objectReferenceValue as Transform, spawnableObject.transform, null); + EditorGUILayout.PropertyField(leftHandAttachmentPoint); + ValidateComponent(nameof(leftHandAttachmentPoint), leftHandAttachmentPoint.objectReferenceValue as Transform, spawnableObject.transform, null); + } + + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(hasRightArmIK); + if (hasRightArmIK.boolValue) { + EditorGUILayout.PropertyField(vrikRightArmTargetTransform); + ValidateComponent(nameof(vrikRightArmTargetTransform), vrikRightArmTargetTransform.objectReferenceValue as Transform, spawnableObject.transform, null); + EditorGUILayout.PropertyField(rightHandAttachmentPoint); + ValidateComponent(nameof(rightHandAttachmentPoint), rightHandAttachmentPoint.objectReferenceValue as Transform, spawnableObject.transform, null); + } + + serializedObject.ApplyModifiedProperties(); + } +} diff --git a/NavMeshFollower/NavMeshFollower.csproj b/NavMeshFollower/NavMeshFollower.csproj new file mode 100644 index 0000000..bc823b5 --- /dev/null +++ b/NavMeshFollower/NavMeshFollower.csproj @@ -0,0 +1,6 @@ + + + + F:\UnityProjects\ChilloutVR\2021\NavMeshRealtimeBaker\Assets\Kafeijao.CCK\ + + diff --git a/NavMeshFollower/Properties/AssemblyInfo.cs b/NavMeshFollower/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..da32b7e --- /dev/null +++ b/NavMeshFollower/Properties/AssemblyInfo.cs @@ -0,0 +1,15 @@ +using System.Reflection; +using NavMeshFollower.Properties; + +[assembly: AssemblyVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyFileVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyInformationalVersion(AssemblyInfoParams.Version)] +[assembly: AssemblyTitle(nameof(NavMeshFollower))] +[assembly: AssemblyCompany(AssemblyInfoParams.Author)] +[assembly: AssemblyProduct(nameof(NavMeshFollower))] + +namespace NavMeshFollower.Properties; +internal static class AssemblyInfoParams { + public const string Version = "0.0.1"; + public const string Author = "kafeijao"; +} diff --git a/NavMeshFollower/README.md b/NavMeshFollower/README.md new file mode 100644 index 0000000..85109d6 --- /dev/null +++ b/NavMeshFollower/README.md @@ -0,0 +1,175 @@ +# NavMeshFollower + +Rushed instructions on how to create your own follower! + +You can Download the latest NavMeshFollower unity package on +the [latest releases](https://github.com/kafeijao/Kafe_CVR_CCKs/releases/latest) + +I suggest starting on an empty project in case something goes wrong. Keep in mind this is still in early development! +Feel free to contribute to these instructions, it would help me a lot :3 + +There are 3 types, each one increasing in complexity: + +- Simple follower that just moves a game object around [section](#Simple-follower) +- Follower with head IK, so it can look at the targets using IK [section](#Follower-with-LookAt-IK) +- Follower with head IK and Arms IK, so it can look and lift the arms to interact with the + targets. [section](#Follower-with-LookAt-IK-and-VRIK-for-Arm-movement) + +## Simple follower + +This is the most basic setup, and it only requires a `NavMeshAgent` for the setup. + +### Requirements + +- [CVR CCK](https://developers.abinteractive.net/cck/setup/) + +### Instructions + +1. Drag the example CVRChan prefab from `Assets/kafeijao/Followers/CVRChan/CVRChan Example.Prefab` to the root of the + scene +2. Place your model inside of `CVRChan Example` next to `CVRChan` game object, I'll call it `Custom Model` +3. Make sure the avatar is at position `(0, 0, 0)` inside `Taipan Example` +4. [Optional] Rename `CVRChan Example` to anything you want +5. Copy the `Parent Constraint` constraint setup from `CVRChan` to `Custom Model`, update the value so it + references itself instead of `CVRChan` on the source with weight `1` and press `Activate` +6. Slot your animator on your model, you can take a look at how `CVRChan_Example_Animator` is made (it's a very simple + blend tree that uses different animations for idle/walk/run). And in the `CVRSpawnable` update the references on the + SyncValues to point at your character animator, and pick the correct parameter name to associate. +7. Set the `Culling Mode` on the animator to `Always Animate`, otherwise some stuff won't happen when you're not + looking at the follower. +8. And to finish adjust the `NavMeshAgent` in `NavMeshAgent` to match your character size, and set the speed, + stopping distance, etc for the agent. **Note: The `NavMeshAgent` component should be `disabled`! Don't change the + `Agent Type` (Humanoid), `Base Offset` (0), `Auto Traverse Off Mesh Link` (On), `Auto Repath` (On), + and `Mask Area` (Everything). + + +## Follower with LookAt IK + +A bit more advanced setup that includes a LookAt IK script from the final IK asset in order for the follower to look at +the targets. + +### Requirements + +- Head Bone +- [CVR CCK](https://developers.abinteractive.net/cck/setup/) +- FinalIK asset (or stub) *[More Info](#FinalIK)* + +### Instructions + +1. Drag the example Taipan prefab from `Assets/kafeijao/Followers/Taipan/Taipan Example.Prefab` to the root of the scene +2. Place your model inside of `Taipan Example` next to `Taipan Model`, I'll call it `Custom Model` +3. Make sure the avatar is at position `(0, 0, 0)` inside `Taipan Example` +4. [Optional] Rename `Taipan Example` to anything you want +5. Copy the `Parent Constraint` constraint setup from `Taipan Model` to `Custom Model`, update the value so it + references itself instead of `Taipan Model` on the source with weight `1` and press `Activate` +6. Copy the `Look At IK` like it's setup on `Taipan Model`, and update the `Head` to your character's Head transform, on + the `Spine` section you should input the bones you want to move while looking at stuff, do not include the head! On a + regular humanoid rig would be: `Spine`, `Chest`, `Upper Chest`, `Neck` in that order. If any is missing remove the + slot (in our example we have `neck.01` and `neck.02`). Also Update the `Eyes` if your character has bones for them ( + this might not work depending on the bone rolls, so you might have to remove them) +7. Move `[NavMeshFollower]/LookAtTarget [Raw]` to the height of your head bone (re-parenting and zeroing can help) +8. Move `[NavMeshFollower]/LookAtTarget [Raw] -> Offset` to the height of the eyes and then invert the y value (this is + to create the offset for the look at, otherwise the character will be looking too high/low). The y value of the inner + will almost be a negative value, after aligning with the eye level, just make the y value negative. +9. Slot your animator on your model, you can take a look at how `Taipan_Example_Animator` is made (it's a very simple + blend tree that uses different animations for idle/walk/run). And in the `CVRSpawnable` update the references on the + SyncValues to point at your character animator, and pick the correct parameter name to associate. +10. Set the `Culling Mode` on the animator to `Always Animate`, otherwise some stuff won't happen when you're not + looking at the follower. +11. Finally go to the root of the prop where the `CVRSpawnable` is, and scroll down to the component `Follower Info`, + some stuff should be already filled, but you need to update the `Head Transform` to your character's head transform. + The rest should be fine. +12. And to finish adjust the `NavMeshAgent` in `NavMeshAgent [Raw]` to match your character size, and set the speed, + stopping distance, etc for the agent. **Note: The `NavMeshAgent` component should be `disabled`! Don't change the + `Agent Type` (Humanoid), `Base Offset` (0), `Auto Traverse Off Mesh Link` (On), `Auto Repath` (On), + and `Mask Area` (Everything). + + +## Follower with LookAt IK and VRIK for Arm movement + +This example is a bit complex, it has a lot of hacks like the dampen constraint to keep movement smooth for remote +users. This is because Sub-Sync transforms don't have interpolation, so we need to make our own. + +Also since remote users don't have the mod there are some particularities of the setup to keep things working, for +example the need of the nav mesh agent to be disabled by default (so the mod later enables for the person controlling) +and the remote users don't. When objects are suffixed as `[Raw]` it means they are synced over the network, so they need +to be smoothed so other players don't see it jittery (solved by dampening constraints mostly named`[Smooth]`) + +Feel free to experiment with it, if you do find easier ways to setup or improve do tell! c: Either way here's the steps +to "quickly" get your custom follower: + +### Requirements + +- Humanoid Animator Rig +- [CVR CCK](https://developers.abinteractive.net/cck/setup/) +- FinalIK asset (or stub) *[More Info](#FinalIK)* + +### Instructions + +1. Drag the example kyle prefab from `Assets/kafeijao/Followers/Kyle/Kyle Example.Prefab` to the root of the scene. +2. Place your model inside of `Kyle Example` next to `Robot Kyle`, I'll call it `Custom Model` +3. Make sure the avatar is at position `(0, 0, 0)` inside `Kyle Example` +4. [Optional] Rename `Kyle Example` to anything you want +5. Copy the `Parent Constraint` constraint setup from `Robot Kyle` to `Custom Model` update the value so it + references itself instead of `Robot Kyle` on the source with weight `1` and press `Activate` +6. Copy the `Look At IK` like it's setup on `Robot Kyle`, and update the `Head` to your character's Head transform, on + the `Spine` section you should input the bones `Spine`, `Chest`, `Upper Chest`, `Neck` in that order. If any is + missing remove the slot (kyle doesn't have `Spine` nor `Upper Chest` for example). Also Update the `Eyes` if your + character has bones for them (this might not work depending on the bone rolls, so you might have to remove them) +7. Move `[NavMeshFollower]/LookAtTarget [Raw]` to the height of your head bone (re-parenting and zeroing can help) +8. Move `[NavMeshFollower]/LookAtTarget [Raw] -> Offset` to the height of the eyes and then invert the y value (this is + to create the offset for the look at, otherwise the character will be looking too high/low). The y value of the inner + will almost be a negative value, after aligning with the eye level, just make the y value negative. +9. Inside of `[NavMeshFollower]/VRIK/Scripts` you have 3 game object with VRIK scripts on them. You need to update their + bone references. The best way to do this is grabbing the VRIK component and drag on the root of your character where + your animator is, and then if you right click on top of `References` and click on the + option `Auto-detect References`. This should've updated the references to your avatar bones, now drag it back to the + object where it was originally. Do this for all 3 GameObjects (this option will only be available if you have FinalIK + installed in your project (not the stub), otherwise you need to do it manually). **Make sure you keep the VRIK + objects disabled**! +10. Inside of `[NavMeshFollower]/VRIK/Targets`, go to the `LeftArm [Raw]` and `RightArm [Raw]`, set your character's + hand transforms as source of the `Parent Constraint`, right click on top of the `Parent Constraint` and click the + option `Reset`, and now click on the button `Zero`. +11. Slot the animator `Kyle_Example_Animator` in your character Animator Slot (you can expand this animator when you + know what you're doing). And in the `CVRSpawnable` update the references on the SyncValues to point at your + character animator, and pick the correct parameter name to associate. **Do NOT put your character animator + on `VRIK/LeftArm/Weight` and `VRIK/RightArm/Weight`, that one should point to the animator that's + on `VRIK` GameObject!** +12. Set the `Culling Mode` on the animator to `Always Animate`, otherwise some stuff won't happen when you're not + looking at the follower. +13. Finally go to the root of the prop where the `CVRSpawnable` is, and scroll down to the component `Follower Info`, + some stuff should be already filled, but you need to update the `Head Transform` to your character's head transform, + and the `HumanoidAnimator` to your character's animator. The rest should be fine. +14. Now you need to adjust the `LeftHandAttachmentPoint` and `RightHandAttachmentPoint`, reset the constraints so you + can move it, and drag where you would like the grabbing point to be for each hand, after that you need to align it + properly. If you set the tool handle rotation to `Local` the orientation for the GameObject should be blue arrow + facing forward along your index finger, and the green arrow pointing towards the thumb direction. +15. And to finish adjust the `NavMeshAgent` in `NavMeshAgent [Raw]` to match your character size, and set the speed, + stopping distance, etc for the agent. **Note: The `NavMeshAgent` component should be `disabled`! Don't change the + `Agent Type` (Humanoid), `Base Offset` (0), `Auto Traverse Off Mesh Link` (On), `Auto Repath` (On), + and `Mask Area` (Everything) + + +## FinalIK + +If you want to take advantage of the look at, or the arm ik you will need FinalIK. If you don't have +[FinalIK Unity Asset](https://assetstore.unity.com/packages/tools/animation/final-ik-14290) you can +use [FinalIK 1.9 Stub](https://github.com/VRLabs/Final-IK-Stub). But FinalIK is recommended because some steps become +easier and you can even test it in the editor. + +--- + +## Credits + +I based my example animator on @NotAKidOnSteam [CCK.BaseAnimatorPatch](https://github.com/NotAKidOnSteam/CCK.BaseAnimatorPatch) + +--- + +## Disclosure + +> --- +> ⚠️ **Notice!** +> +> This mod's developer(s) and the mod itself, along with the respective mod loaders, have no affiliation with ABI! +> +> --- diff --git a/README.md b/README.md index 380f8a7..c341f13 100644 --- a/README.md +++ b/README.md @@ -4,46 +4,67 @@ Welcome to my little collection of CCK mods for CVR, these will probably be CCK --- -## In-Depth Mods info Links: +## Mods -- [EyeMovementFix](EyeMovementFix) *in-depth url* +| Mod name | More Info | Description | +|-----------------|----------------------------------------|---------------------------------------------------------| +| CVRSuperMario64 | [README.md](CVRSuperMario64/README.md) | CVRSuperMario64 CCK Components | +| EyeMovementFix | [README.md](EyeMovementFix/README.md) | EyeMovementFix component to set the limits | +| NavMeshFollower | [README.md](NavMeshFollower/README.md) | NavMeshFollower components to create your own followers | --- -## Small Descriptions: -### Eye Movement Fix +## Building -Setup the eye rotation limits on your avatar. Only people with -the [EyeMovementFix](https://github.com/kafeijao/Kafe_CVR_Mods/tree/master/EyeMovementFix) mod will see those limits -enforced! +In order to build this project follow the instructions (thanks [@Daky](https://github.com/dakyneko)): -Check [Eye Movement Fix In-Dept](EyeMovementFix) for more info. +- (1) Install `NStrip.exe` from https://github.com/BepInEx/NStrip into this directory (or into your PATH). This tools + converts all assembly symbols to public ones! If you don't strip the dlls, you won't be able to compile some mods. +- (2) If your ChilloutVR folder is `C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR` you can ignore this step. + Otherwise follow the instructions bellow + to [Set CVR Folder Environment Variable](#set-cvr-folder-environment-variable) +- (3) Run `copy_and_nstrip_dll.ps1` on the Power Shell. This will copy the required CVR, MelonLoader, and Mod DLLs into + this project's `/.ManagedLibs`. Note if some of the required mods are not found, it will display the url from the CVR + Modding Group API so you can download. ---- +### Set CVR Folder Environment Variable -## Building +To build the project you need `CVRPATH` to be set to your ChilloutVR Folder, so we get the path to grab the libraries +we need to compile. By running the `copy_and_nstrip_dll.ps1` script that env variable is set automatically, but only +works if the ChilloutVR folder is on the default location `C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR`. -In order to build this project follow the instructions (thanks [@Daky](https://github.com/dakyneko)): +Otherwise you need to set the `CVRPATH` env variable yourself, you can do that by either updating the default path in +the `copy_and_nstrip_dll.ps1` and then run it, or manually set it via the windows menus. + + +#### Setup via editing copy_and_nstrip_dll.ps1 + +Edit `copy_and_nstrip_dll.ps1` and look the line bellow, and then replace the Path with your actual path. +```$cvrDefaultPath = "C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR"``` + +You'll probably need to restart your computer so the Environment Variable variable gets updated... + +Now you're all set and you can go to the step (2) of the [Building](#building) instructions! + + +#### Setup via Windows menus + +In Windows Start Menu, search for `Edit environment variables for your account`, and click `New` on the top panel. +Now you input `CVRPATH` for the **Variable name**, and the location of your ChilloutVR folder as the **Variable value** -- (1) Install NStrip.exe from https://github.com/BepInEx/NStrip into this directory (or into your PATH). This tools - converts all assembly symbols to public ones. Make life easy! -- (2) Create a new Windows environment variable `CVRPATH` which should point to your game path (folder - where `ChilloutVR.exe` resides). In Windows, look for Settings > Advanced system settings > Advanced > Environment - Variables, add a new one there, it should point to something - like `C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR` or similar. -- (3) Run `copy_and_nstrip_dll.bat` (cmd prompt only) or `copy_and_nstrip_dll.ps1` (Powershell only) this will copy the -game + MelonLoader .dll into this project and run NStrip.exe to make them public (easier developers). -- (4) Copy `UnityEditor.dll` from your Unity Editor folder `...\2019.4.31f1\Editor\Data\Managed\UnityEditor.dll` into - the `ManagedLibs` folder in this project's root. +By default this value would be `C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR`, but you wouldn't need to do +this if that was the case! Make sure it points to the folder where your `ChilloutVR.exe` is located. +Now you're all set and you can go to the step (2) of the [Building](#building) instructions! If you already had a power +shell window opened, you need to close and open again, so it refreshes the Environment Variables. --- -# Disclosure +# Disclosure > --- -> ⚠️ **Notice!** +> ⚠️ **Notice!** > > This mod's developer(s) and the mod itself, along with the respective mod loaders, have no affiliation with ABI! > diff --git a/copy_and_nstrip_dll.bat b/copy_and_nstrip_dll.bat deleted file mode 100644 index 085a37a..0000000 --- a/copy_and_nstrip_dll.bat +++ /dev/null @@ -1,19 +0,0 @@ -@echo off -setlocal enableDelayedExpansion - -echo Copy all dll from the game so we can work and modify them -xcopy /f /y "%CVRPATH%\MelonLoader\0Harmony.dll" "%0\..\ManagedLibs" -xcopy /f /y "%CVRPATH%\MelonLoader\MelonLoader.dll" "%0\..\ManagedLibs" -xcopy /f /s /y "%CVRPATH%\ChilloutVR_Data\Managed" "%0\..\ManagedLibs" - -@REM echo Generating file with all lib names -@REM echo 0Harmony>lib_names -@REM echo MelonLoader>>lib_names -@REM for %%f in ("%CVRPATH%\ChilloutVR_Data\Managed\*") do echo %%~nf>>lib_names - -echo Nstrip convert all private/protected stuff to public, yay -for %%x in (Assembly-CSharp.dll Assembly-CSharp-firstpass.dll UnityEngine.CoreModule.dll Cohtml.Runtime.dll) do ( - NStrip.exe -p -n "%CVRPATH%\ChilloutVR_Data\Managed\%%x" "%0\..\ManagedLibs\%%x" -) -echo We re done now -pause diff --git a/copy_and_nstrip_dll.ps1 b/copy_and_nstrip_dll.ps1 index 9ccd4b2..4d91943 100644 --- a/copy_and_nstrip_dll.ps1 +++ b/copy_and_nstrip_dll.ps1 @@ -1,28 +1,161 @@ -$0HarmonydllPath="\MelonLoader\0Harmony.dll" -$melonLoaderdllPath="\MelonLoader\MelonLoader.dll" -$cvrManagedDataPath="\ChilloutVR_Data\Managed" -$cvrPath=$env:CVRPATH +# CVR and Melon Loader Dependencies +$0HarmonydllPath = "\MelonLoader\net35\0Harmony.dll" +$melonLoaderdllPath = "\MelonLoader\net35\MelonLoader.dll" +$CecilallPath = "\MelonLoader\net35\Mono.Cecil.dll" +$cvrManagedDataPath = "\ChilloutVR_Data\Managed" +$unityEditorDllPath = "E:\Software\UnityEditors\2021.3.23f1\Editor\Data\Managed\UnityEditor.dll" + +$cvrPath = $env:CVRPATH +$cvrExecutable = "ChilloutVR.exe" +$cvrDefaultPath = "C:\Program Files (x86)\Steam\steamapps\common\ChilloutVR" +# $cvrDefaultPath = "E:\temp\CVR_Experimental" + +# Array with the dlls to strip +$dllsToStrip = @() + +# Array with the mods to grab +$modNames = @() + +# Array with dlls to ignore from ManagedLibs +$cvrManagedLibNamesToIgnore = @("netstandard") + +if ($cvrPath -and (Test-Path "$cvrPath\$cvrExecutable")) { + # Found ChilloutVR.exe in the existing CVRPATH + Write-Host "" + Write-Host "Found the ChilloutVR folder on: $cvrPath" +} +else { + # Check if ChilloutVR.exe exists in default Steam location + if (Test-Path "$cvrDefaultPath\$cvrExecutable") { + # Set CVRPATH environment variable to default Steam location + Write-Host "Found the ChilloutVR on the default steam location, setting the CVRPATH Env Var at User Level!" + [Environment]::SetEnvironmentVariable("CVRPATH", $cvrDefaultPath, "User") + $env:CVRPATH = $cvrDefaultPath + $cvrPath = $env:CVRPATH + } + else { + Write-Host "[ERROR] ChilloutVR.exe not found in CVRPATH or the default Steam location." + Write-Host " Please define the Environment Variable CVRPATH pointing to the ChilloutVR folder!" + return + } +} $scriptDir = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition -Write-Host "Copy all dll from the game so we can work and modify them" +$managedLibsFolder = $scriptDir + "\.ManagedLibs" + +if (!(Test-Path $managedLibsFolder)) { + New-Item -ItemType Directory -Path $managedLibsFolder + Write-Host ".ManagedLibs folder created successfully." +} + +Write-Host "" +Write-Host "Copying the DLLs from the CVR, MelonLoader, and Mods folder to the .ManagedLibs" + + +Copy-Item $cvrPath$0HarmonydllPath -Destination $managedLibsFolder +Copy-Item $cvrPath$melonLoaderdllPath -Destination $managedLibsFolder +Copy-Item $cvrPath$CecilallPath -Destination $managedLibsFolder +Copy-Item $cvrPath$cvrManagedDataPath"\*" -Destination $managedLibsFolder + +Copy-Item $unityEditorDllPath -Destination $managedLibsFolder + + +# Saving XML ready libs for the Build.props file +$lib_names_xml = "" +$lib_names_xml += '$(MsBuildThisFileDirectory)\.ManagedLibs\0Harmony.dllFalse' +$lib_names_xml += '$(MsBuildThisFileDirectory)\.ManagedLibs\MelonLoader.dllFalse' +foreach ($file in Get-ChildItem $cvrPath$cvrManagedDataPath"\*") { + if($cvrManagedLibNamesToIgnore -notcontains $file.BaseName) { + $lib_names_xml += "`$(MsBuildThisFileDirectory)\.ManagedLibs\$($file.BaseName).dllFalse" + } +} +$lib_names_xml += "" +$lib_names_xml | Out-File -Encoding UTF8 -FilePath lib_names.xml -Copy-Item $cvrPath$0HarmonydllPath -Destination $scriptDir"\ManagedLibs" -Copy-Item $cvrPath$melonLoaderdllPath -Destination $scriptDir"\ManagedLibs" -Copy-Item $cvrPath$cvrManagedDataPath"\*" -Destination $scriptDir"\ManagedLibs" +# Third Party Dependencies +$melonModsPath="\Mods\" +$missingMods = New-Object System.Collections.Generic.List[string] -Write-Host "Nstrip convert all private/protected stuff to public, yay" -$dllsToStrip=@('Assembly-CSharp.dll','Assembly-CSharp-firstpass.dll','UnityEngine.CoreModule.dll','Cohtml.Runtime.dll') +foreach ($modName in $modNames) { + $modDll = $modName + ".dll" + $modPath = $cvrPath + $melonModsPath + $modDll + $managedLibsModPath = "$managedLibsFolder\$modDll" -foreach($dllFile in $dllsToStrip) -{ - Write-Host "stripping dll : "$dllFile - .\NStrip.exe -p -n $cvrPath$cvrManagedDataPath"\"$dllFile $scriptDir"\ManagedLibs\"$dllFile + # Attempt to grab from the mods folder + if (Test-Path $modPath -PathType Leaf) { + Write-Host " Copying $modDll from $melonModsPath to \.ManagedLibs!" + Copy-Item $modPath -Destination $managedLibsFolder + } + # Check if they already exist in the .ManagedLibs + elseif (Test-Path $managedLibsModPath -PathType Leaf) { + Write-Host " Ignoring $modDll since already exists in \.ManagedLibs!" + } + # If we fail, lets add to the missing mods list + else { + $missingMods.Add($modName) + } } -Write-Host "Process Completed" +if ($missingMods.Count -gt 0) { + # If we have missing mods, let's fetch them from the latest CVR Modding Group API + Write-Host "" + Write-Host "Failed to find $($missingMods.Count) mods. We're going to search in CVR MG verified mods" -ForegroundColor Red + Write-Host "You can download them and move to $managedLibsFolder" + + $cvrModdingApiUrl = "https://api.cvrmg.com/v1/mods" + $cvrModdingDownloadUrl = "https://api.cvrmg.com/v1/mods/download/" + $latestModsResponse = Invoke-RestMethod $cvrModdingApiUrl -UseBasicParsing + + foreach ($modName in $missingMods) { + $mod = $latestModsResponse | Where-Object { $_.name -eq $modName } + if ($mod) { + $modDownloadUrl = $cvrModdingDownloadUrl + $($mod._id) + # It seems power shell doesn't like to download .dll from https://api.cvrmg.com (messes with some anti-virus) + # Invoke-WebRequest -Uri $modDownloadUrl -OutFile $managedLibsFolder -UseBasicParsing + # Write-Host " $modName was downloaded successfully to $managedLibsFolder!" + Write-Host " $modName Download Url: $modDownloadUrl" + } else { + Write-Host " $modName was not found in the CVR Modding Group verified mods!" + } + } +} + + +Write-Host "" +Write-Host "Copied all libraries!" +Write-Host "" +Write-Host "Press any key to strip the Dlls using NStrip" +$HOST.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | OUT-NULL +$HOST.UI.RawUI.Flushinputbuffer() + +Write-Host "NStrip Convert all private/protected stuff to public. Requires true>" + +# Check if NStrip.exe exists in the current directory +if(Test-Path -Path ".\NStrip.exe") { + $nStripPath = ".\NStrip.exe" +} +else { + # Try to locate NStrip.exe in the PATH + $nStripPath = Get-Command -Name NStrip.exe -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Source + if($nStripPath -eq $null) { + # Display an error message if NStrip.exe could not be found + Write-Host "Could not find NStrip.exe in the current directory nor in the PATH." -ForegroundColor Red + Write-Host "Visit https://github.com/bbepis/NStrip/releases/latest to grab a copy." -ForegroundColor Red + return + } +} + +# Loop through each DLL file to strip and call NStrip.exe +foreach($dllFile in $dllsToStrip) { + $dllPath = Join-Path -Path $managedLibsFolder -ChildPath $dllFile + & $nStripPath -p -n $dllPath $dllPath +} + +Write-Host "" +Write-Host "Copied all libraries and stripped the DLLs!" Write-Host "" Write-Host "Press any key to exit" -$HOST.UI.RawUI.ReadKey(“NoEcho,IncludeKeyDown”) | OUT-NULL +$HOST.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | OUT-NULL $HOST.UI.RawUI.Flushinputbuffer()