From c7d87ae88af80bf8bb279c686c50e0797fac68d2 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Wed, 20 Aug 2025 23:57:49 +0800 Subject: [PATCH 01/18] struct --- Jolt.Unity/JoltEditorInitialization.cs | 1 - Jolt/Bindings/Bindings.cs | 17 ++ Jolt/Jolt.cs | 7 +- Jolt/Native/NativeHandle.cs | 74 ++++--- Jolt/Native/NativeSafetyHandle.cs | 264 ++++++++++++------------- Jolt/Types/BodyInterface.cs | 14 +- 6 files changed, 204 insertions(+), 173 deletions(-) diff --git a/Jolt.Unity/JoltEditorInitialization.cs b/Jolt.Unity/JoltEditorInitialization.cs index ba65a97..b148922 100644 --- a/Jolt.Unity/JoltEditorInitialization.cs +++ b/Jolt.Unity/JoltEditorInitialization.cs @@ -27,7 +27,6 @@ private static void OnPlayModeStateChanged(PlayModeStateChange change) private static void OnEnteredEditMode() { Jolt.Shutdown(); - NativeSafetyHandle.Dispose(); } } } diff --git a/Jolt/Bindings/Bindings.cs b/Jolt/Bindings/Bindings.cs index f741885..85ad514 100644 --- a/Jolt/Bindings/Bindings.cs +++ b/Jolt/Bindings/Bindings.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.CompilerServices; +using Unity.Burst; using UnityEngine; [assembly: InternalsVisibleTo("Jolt.Tests")] @@ -20,11 +21,27 @@ internal static void Initialize() #endif [MethodImpl(MethodImplOptions.AggressiveInlining)] private static void AssertInitialized() + { + AssertInitializedManaged(); + AssertInitializedBurst(); + } + + [BurstDiscard] + private static void AssertInitializedManaged() { if (!Jolt.Initialized) { throw new InvalidOperationException("The Jolt native plugin has not been initialized. You must call Jolt.Initialize() before using Jolt."); } } + + [BurstDiscard] + private static void AssertInitializedBurst() + { + if (!Jolt.s_Initialized.Data) + { + throw new InvalidOperationException("The Jolt native plugin has not been initialized. You must call Jolt.Initialize() before using Jolt."); + } + } } } diff --git a/Jolt/Jolt.cs b/Jolt/Jolt.cs index 1b536bf..1027941 100644 --- a/Jolt/Jolt.cs +++ b/Jolt/Jolt.cs @@ -1,13 +1,16 @@ -using static Jolt.Bindings; +using Unity.Burst; +using static Jolt.Bindings; namespace Jolt { public static class Jolt { + public struct InitializedDummy {} /// /// True Jolt is current initialized. /// public static bool Initialized { get; private set; } + public static SharedStatic s_Initialized = SharedStatic.GetOrCreate(); /// /// Initialize Jolt, returning true if initialization succeeded. @@ -17,6 +20,7 @@ public static bool Initialize() if (!Initialized) { Initialized = JPH_Init(); + s_Initialized.Data = Initialized; } return Initialized; @@ -38,6 +42,7 @@ public static void Shutdown() JPH_Shutdown(); Initialized = false; + s_Initialized.Data = false; } } } diff --git a/Jolt/Native/NativeHandle.cs b/Jolt/Native/NativeHandle.cs index 9a29ac5..ec13b2f 100644 --- a/Jolt/Native/NativeHandle.cs +++ b/Jolt/Native/NativeHandle.cs @@ -1,28 +1,40 @@ using System; using System.Runtime.CompilerServices; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; namespace Jolt { /// /// A pointer to a native resource with optional safety checks against use-after-free. /// + [NativeContainer] internal unsafe struct NativeHandle : IDisposable, IEquatable> where T : unmanaged { - #if !JOLT_DISABLE_SAFETY_CHECKS - private NativeSafetyHandle safety; - #endif + [NativeDisableUnsafePtrRestriction] + private T* m_Ptr; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + internal AtomicSafetyHandle m_Safety; - private T* ptr; + static readonly SharedStatic s_SafetyId = SharedStatic.GetOrCreate>(); + + [NativeSetClassTypeToNullOnSchedule] + DisposeSentinel m_DisposeSentinel; +#endif - public nint RawValue => (nint)ptr; + public bool IsCreated => m_Ptr != null; + public nint RawValue => (nint)m_Ptr; public NativeHandle(T* ptr) { - #if !JOLT_DISABLE_SAFETY_CHECKS - safety = NativeSafetyHandle.Create((nint)ptr); - #endif - - this.ptr = ptr; + m_Ptr = ptr; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + // m_Safety = AtomicSafetyHandle.Create(); + DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, 1, Allocator.None); + CollectionHelper.SetStaticSafetyId>(ref m_Safety, ref s_SafetyId.Data); +#endif } /// @@ -30,8 +42,9 @@ public NativeHandle(T* ptr) /// public NativeHandle CreateOwnedHandle(U* ptr) where U : unmanaged { - #if !JOLT_DISABLE_SAFETY_CHECKS - return new NativeHandle { ptr = ptr, safety = safety }; + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckExistsAndThrow(m_Safety); + return new NativeHandle { m_Ptr = ptr, m_Safety = m_Safety }; #else return new NativeHandle { ptr = ptr }; #endif @@ -40,8 +53,9 @@ public NativeHandle CreateOwnedHandle(U* ptr) where U : unmanaged [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly NativeHandle Reinterpret() where U : unmanaged { - #if !JOLT_DISABLE_SAFETY_CHECKS - return new NativeHandle { ptr = (U*) ptr, safety = safety }; + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckExistsAndThrow(m_Safety); + return new NativeHandle { m_Ptr = (U*) m_Ptr, m_Safety = m_Safety }; #else return new NativeHandle { ptr = (U*) ptr }; #endif @@ -50,11 +64,11 @@ public readonly NativeHandle Reinterpret() where U : unmanaged [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly T* IntoPointer() { - #if !JOLT_DISABLE_SAFETY_CHECKS - NativeSafetyHandle.Assert(safety); + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckExistsAndThrow(in m_Safety); #endif - return ptr; + return m_Ptr; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -67,11 +81,15 @@ public readonly NativeHandle Reinterpret() where U : unmanaged public void Dispose() { - #if !JOLT_DISABLE_SAFETY_CHECKS - NativeSafetyHandle.Release(safety); - #endif - - ptr = null; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (!AtomicSafetyHandle.IsDefaultValue(m_Safety)) + { + AtomicSafetyHandle.CheckExistsAndThrow(m_Safety); + } + DisposeSentinel.Dispose(ref m_Safety, ref m_DisposeSentinel); +#endif + + m_Ptr = null; } #endregion @@ -80,11 +98,7 @@ public void Dispose() public bool Equals(NativeHandle other) { - #if !JOLT_DISABLE_SAFETY_CHECKS - return ptr == other.ptr && safety == other.safety; - #else - return ptr == other.ptr; - #endif + return m_Ptr == other.m_Ptr; } public override bool Equals(object obj) @@ -94,11 +108,7 @@ public override bool Equals(object obj) public override int GetHashCode() { - #if !JOLT_DISABLE_SAFETY_CHECKS - return HashCode.Combine((nint)ptr, safety); - #else - return ((nint)ptr).GetHashCode(); - #endif + return ((nint)m_Ptr).GetHashCode(); } public static bool operator ==(NativeHandle lhs, NativeHandle rhs) diff --git a/Jolt/Native/NativeSafetyHandle.cs b/Jolt/Native/NativeSafetyHandle.cs index 0a3de9e..04a4090 100644 --- a/Jolt/Native/NativeSafetyHandle.cs +++ b/Jolt/Native/NativeSafetyHandle.cs @@ -13,144 +13,132 @@ namespace Jolt /// /// A safety handle for detecting use-after-free access of native objects. /// - public struct NativeSafetyHandle : IEquatable - { - private static NativeHashMap indexes; - - private static NativeList versions; - - private static readonly object @lock = new(); - - private static bool initialized; - - private int index; - private int version; - - internal static void Initialize() - { - if (initialized) - { - return; - } - - lock (@lock) - { - indexes = new(1024, Allocator.Persistent); - versions = new(1024, Allocator.Persistent); - initialized = true; - } - } - - internal static void Dispose() - { - lock (@lock) - { - indexes.Dispose(); - versions.Dispose(); - initialized = false; - } - } - - /// - /// Create (or reuse) a safety handle for a . - /// - public static NativeSafetyHandle Create(nint ptr) - { - Initialize(); - - lock (@lock) - { - if (indexes.TryGetValue(ptr, out var index)) - { - // Pointer is already registered. This pattern happens a lot; Body.GetMaterial is a good example. - // The material is a single ref counted resource in Jolt, but the binding code can create a lot - // of distinct handles to it from different bodies. They should all share the same safety - // handle so that destroying the material invalidates all of the handles. - return new NativeSafetyHandle { index = index, version = versions[index] }; - } - - index = versions.Length; - - indexes.Add(ptr, index); - versions.Add(1); - - return new NativeSafetyHandle { index = index, version = 1 }; - } - } - - /// - /// Release a safety handle. A future attempt to assert the handle will throw an exception. - /// - public static void Release(in NativeSafetyHandle handle) - { - Initialize(); - - lock (@lock) - { - if (versions.Length < handle.index) - { - Debug.LogWarning("A NativeSafetyHandle is being released for a handle index that is out of range."); - return; - } - - if (versions[handle.index] != handle.version) - { - Debug.LogWarning("A NativeSafetyHandle is being released for a handle index that was already released."); - return; - } - - versions[handle.index] += 1; - } - } - - public static void Assert(in NativeSafetyHandle handle) - { - Initialize(); - - lock (@lock) - { - if (versions.Length < handle.index) - { - // very unexpected situation, this would be a safety handle that survived a domain reload - throw new ObjectDisposedException("The native resource has been disposed."); - } - - if (versions[handle.index] != handle.version) - { - throw new ObjectDisposedException("The native resource has been disposed."); - } - } - } - - #region IEquatable - - public bool Equals(NativeSafetyHandle other) - { - return index == other.index && version == other.version; - } - - public override bool Equals(object obj) - { - return obj is NativeSafetyHandle other && Equals(other); - } - - public override int GetHashCode() - { - return HashCode.Combine(index, version); - } - - public static bool operator ==(NativeSafetyHandle left, NativeSafetyHandle right) - { - return left.Equals(right); - } - - public static bool operator !=(NativeSafetyHandle left, NativeSafetyHandle right) - { - return !left.Equals(right); - } - - #endregion - } + // public struct NativeSafetyHandle : IEquatable + // { + // private static NativeHashMap indexes; + // + // private static NativeList versions; + // + // private static bool initialized; + // + // private int index; + // private int version; + // + // internal static void Initialize() + // { + // if (initialized) + // { + // return; + // } + // + // indexes = new(1024, Allocator.Persistent); + // versions = new(1024, Allocator.Persistent); + // initialized = true; + // } + // + // internal static void Dispose() + // { + // initialized = false; + // indexes.Dispose(); + // versions.Dispose(); + // } + // + // /// + // /// Create (or reuse) a safety handle for a . + // /// + // public static NativeSafetyHandle Create(nint ptr) + // { + // lock (@lock) + // { + // if (indexes.TryGetValue(ptr, out var index)) + // { + // // Pointer is already registered. This pattern happens a lot; Body.GetMaterial is a good example. + // // The material is a single ref counted resource in Jolt, but the binding code can create a lot + // // of distinct handles to it from different bodies. They should all share the same safety + // // handle so that destroying the material invalidates all of the handles. + // return new NativeSafetyHandle { index = index, version = versions[index] }; + // } + // + // index = versions.Length; + // + // indexes.Add(ptr, index); + // versions.Add(1); + // + // return new NativeSafetyHandle { index = index, version = 1 }; + // } + // } + // + // /// + // /// Release a safety handle. A future attempt to assert the handle will throw an exception. + // /// + // public static void Release(in NativeSafetyHandle handle) + // { + // lock (@lock) + // { + // if (versions.Length < handle.index) + // { + // Debug.LogWarning("A NativeSafetyHandle is being released for a handle index that is out of range."); + // return; + // } + // + // if (versions[handle.index] != handle.version) + // { + // Debug.LogWarning("A NativeSafetyHandle is being released for a handle index that was already released."); + // return; + // } + // + // versions[handle.index] += 1; + // } + // } + // + // public static void Assert(in NativeSafetyHandle handle) + // { + // Initialize(); + // + // lock (@lock) + // { + // if (versions.Length < handle.index) + // { + // // very unexpected situation, this would be a safety handle that survived a domain reload + // throw new ObjectDisposedException("The native resource has been disposed."); + // } + // + // if (versions[handle.index] != handle.version) + // { + // throw new ObjectDisposedException("The native resource has been disposed."); + // } + // } + // } + // + // #region IEquatable + // + // public bool Equals(NativeSafetyHandle other) + // { + // return index == other.index && version == other.version; + // } + // + // public override bool Equals(object obj) + // { + // return obj is NativeSafetyHandle other && Equals(other); + // } + // + // public override int GetHashCode() + // { + // return HashCode.Combine(index, version); + // } + // + // public static bool operator ==(NativeSafetyHandle left, NativeSafetyHandle right) + // { + // return left.Equals(right); + // } + // + // public static bool operator !=(NativeSafetyHandle left, NativeSafetyHandle right) + // { + // return !left.Equals(right); + // } + // + // #endregion + // } } #endif diff --git a/Jolt/Types/BodyInterface.cs b/Jolt/Types/BodyInterface.cs index f513f5c..9af3c15 100644 --- a/Jolt/Types/BodyInterface.cs +++ b/Jolt/Types/BodyInterface.cs @@ -1,8 +1,20 @@ -namespace Jolt +using System; +using Unity.Mathematics; + +namespace Jolt { [GenerateBindings("JPH_BodyInterface")] public partial struct BodyInterface { internal NativeHandle Handle; + + public IntPtr GetUnsafePtr() => Handle.RawValue; + + public static unsafe float4x4 UnsafeGetWorldTransform(IntPtr ptr, BodyID body) + { + rmatrix4x4 m; + UnsafeBindings.JPH_BodyInterface_GetWorldTransform((JPH_BodyInterface*)ptr, body, &m); + return m; + } } } From 2e3b62eaab362fee382fdc1f986476e1cba7b019 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Thu, 21 Aug 2025 22:30:45 +0800 Subject: [PATCH 02/18] temp --- Jolt.Internal.meta | 3 +++ Jolt.Internal/AssemblyInfo.cs | 3 +++ Jolt.Internal/AssemblyInfo.cs.meta | 3 +++ Jolt.Internal/JoltNativeInternalUtility.cs | 19 +++++++++++++++++++ .../JoltNativeInternalUtility.cs.meta | 3 +++ .../Unity.InternalAPIEngineBridge.013.asmdef | 3 +++ ...ty.InternalAPIEngineBridge.013.asmdef.meta | 3 +++ Jolt/Bindings/Bindings_JPH_BodyInterface.cs | 3 ++- Jolt/Generated/PhysicsSystem.g.cs | 4 ++-- Jolt/Jolt.asmdef | 3 ++- Jolt/Native/NativeHandle.cs | 11 +++++------ 11 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 Jolt.Internal.meta create mode 100644 Jolt.Internal/AssemblyInfo.cs create mode 100644 Jolt.Internal/AssemblyInfo.cs.meta create mode 100644 Jolt.Internal/JoltNativeInternalUtility.cs create mode 100644 Jolt.Internal/JoltNativeInternalUtility.cs.meta create mode 100644 Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef create mode 100644 Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef.meta diff --git a/Jolt.Internal.meta b/Jolt.Internal.meta new file mode 100644 index 0000000..a3ea3a4 --- /dev/null +++ b/Jolt.Internal.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 03cb2a546d55412fbf6675bac2ae1be4 +timeCreated: 1755771434 \ No newline at end of file diff --git a/Jolt.Internal/AssemblyInfo.cs b/Jolt.Internal/AssemblyInfo.cs new file mode 100644 index 0000000..cec4fea --- /dev/null +++ b/Jolt.Internal/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly:InternalsVisibleTo("Jolt")] diff --git a/Jolt.Internal/AssemblyInfo.cs.meta b/Jolt.Internal/AssemblyInfo.cs.meta new file mode 100644 index 0000000..cbbf417 --- /dev/null +++ b/Jolt.Internal/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e640bf356d842ee9385fa2da55960ec +timeCreated: 1755771647 \ No newline at end of file diff --git a/Jolt.Internal/JoltNativeInternalUtility.cs b/Jolt.Internal/JoltNativeInternalUtility.cs new file mode 100644 index 0000000..b7091db --- /dev/null +++ b/Jolt.Internal/JoltNativeInternalUtility.cs @@ -0,0 +1,19 @@ +using System; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; + +namespace Jolt.Internal +{ + internal static class JoltNativeInternalUtility + { + public static void LeakRecord(IntPtr handle, int callstacksToSkip) + { + UnsafeUtility.LeakRecord(handle, LeakCategory.Persistent, callstacksToSkip); + } + + public static void LeakErase(IntPtr handle) + { + UnsafeUtility.LeakErase(handle, LeakCategory.Persistent); + } + } +} diff --git a/Jolt.Internal/JoltNativeInternalUtility.cs.meta b/Jolt.Internal/JoltNativeInternalUtility.cs.meta new file mode 100644 index 0000000..777d846 --- /dev/null +++ b/Jolt.Internal/JoltNativeInternalUtility.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a07d654f3d4f45ae918ca2070bd56f3b +timeCreated: 1755771447 \ No newline at end of file diff --git a/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef new file mode 100644 index 0000000..b21fb59 --- /dev/null +++ b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef @@ -0,0 +1,3 @@ +{ + "name": "Unity.InternalAPIEngineBridge.013" +} \ No newline at end of file diff --git a/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef.meta b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef.meta new file mode 100644 index 0000000..daee52c --- /dev/null +++ b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aaad8d8e3f2841b3b3230cf4e63699fe +timeCreated: 1755771584 \ No newline at end of file diff --git a/Jolt/Bindings/Bindings_JPH_BodyInterface.cs b/Jolt/Bindings/Bindings_JPH_BodyInterface.cs index 20a5e46..321a62c 100644 --- a/Jolt/Bindings/Bindings_JPH_BodyInterface.cs +++ b/Jolt/Bindings/Bindings_JPH_BodyInterface.cs @@ -10,7 +10,8 @@ public static void JPH_BodyInterface_DestroyBody(NativeHandle AssertInitialized(); UnsafeBindings.JPH_BodyInterface_DestroyBody(@interface, bodyID); - + + @interface.Dispose(); // TODO mark any active body handles for this bodyID as disposed } diff --git a/Jolt/Generated/PhysicsSystem.g.cs b/Jolt/Generated/PhysicsSystem.g.cs index 0ce0591..78238e3 100644 --- a/Jolt/Generated/PhysicsSystem.g.cs +++ b/Jolt/Generated/PhysicsSystem.g.cs @@ -23,7 +23,7 @@ public partial struct PhysicsSystem : IEquatable #region JPH_PhysicsSystem - public void Destroy() => Bindings.JPH_PhysicsSystem_Destroy(Handle); + public readonly void Destroy() => Bindings.JPH_PhysicsSystem_Destroy(Handle); public void SetPhysicsSettings(ref PhysicsSettings settings) => Bindings.JPH_PhysicsSystem_SetPhysicsSettings(Handle, ref settings); @@ -31,7 +31,7 @@ public partial struct PhysicsSystem : IEquatable public void OptimizeBroadPhase() => Bindings.JPH_PhysicsSystem_OptimizeBroadPhase(Handle); - public BodyInterface GetBodyInterface() => new BodyInterface { Handle = Bindings.JPH_PhysicsSystem_GetBodyInterface(Handle) }; + public readonly BodyInterface GetBodyInterface() => new BodyInterface { Handle = Bindings.JPH_PhysicsSystem_GetBodyInterface(Handle) }; public BodyInterface GetBodyInterfaceNoLock() => new BodyInterface { Handle = Bindings.JPH_PhysicsSystem_GetBodyInterfaceNoLock(Handle) }; diff --git a/Jolt/Jolt.asmdef b/Jolt/Jolt.asmdef index c77cb5c..c083b4b 100644 --- a/Jolt/Jolt.asmdef +++ b/Jolt/Jolt.asmdef @@ -5,7 +5,8 @@ "GUID:11387d2655e74408a69cb1837fae80c7", "GUID:2665a8d13d1b3f18800f46e256720795", "GUID:e0cd26848372d4e5c891c569017e11f1", - "GUID:d8b63aba1907145bea998dd612889d6b" + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:aaad8d8e3f2841b3b3230cf4e63699fe" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Jolt/Native/NativeHandle.cs b/Jolt/Native/NativeHandle.cs index ec13b2f..35019cc 100644 --- a/Jolt/Native/NativeHandle.cs +++ b/Jolt/Native/NativeHandle.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.CompilerServices; +using Jolt.Internal; using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; @@ -17,11 +18,7 @@ internal unsafe struct NativeHandle : IDisposable, IEquatable #if ENABLE_UNITY_COLLECTIONS_CHECKS internal AtomicSafetyHandle m_Safety; - static readonly SharedStatic s_SafetyId = SharedStatic.GetOrCreate>(); - - [NativeSetClassTypeToNullOnSchedule] - DisposeSentinel m_DisposeSentinel; #endif public bool IsCreated => m_Ptr != null; @@ -32,8 +29,9 @@ public NativeHandle(T* ptr) m_Ptr = ptr; #if ENABLE_UNITY_COLLECTIONS_CHECKS // m_Safety = AtomicSafetyHandle.Create(); - DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, 1, Allocator.None); + m_Safety = AtomicSafetyHandle.Create(); CollectionHelper.SetStaticSafetyId>(ref m_Safety, ref s_SafetyId.Data); + JoltNativeInternalUtility.LeakRecord(new IntPtr(ptr), 1); #endif } @@ -86,7 +84,8 @@ public void Dispose() { AtomicSafetyHandle.CheckExistsAndThrow(m_Safety); } - DisposeSentinel.Dispose(ref m_Safety, ref m_DisposeSentinel); + AtomicSafetyHandle.Release(m_Safety); + JoltNativeInternalUtility.LeakErase(new IntPtr(m_Ptr)); #endif m_Ptr = null; From 7401986207ca3baf606da2268389cd9edbeeeaab Mon Sep 17 00:00:00 2001 From: mooooooi Date: Mon, 1 Sep 2025 02:27:24 +0800 Subject: [PATCH 03/18] temp --- .DS_Store | Bin 0 -> 6148 bytes Jolt.SourceGenerator~/Folder.DotSettings.user | 2 + .../Jolt.SourceGenerator.csproj | 37 +- Jolt.SourceGenerator~/JoltGenerator.cs | 141 + Jolt.SourceGenerator~/JoltSourceGenerator.cs | 394 -- .../JoltSourceGeneratorLog.cs | 35 - Jolt.SourceGenerator~/JoltSyntaxReceiver.cs | 69 - Jolt.SourceGenerator~/SourceCodeHelper.cs | 85 + Jolt.Tests.meta | 3 - Jolt.Tests/ExpectedCoverage.cs | 45 - Jolt.Tests/ExpectedCoverage.cs.meta | 3 - Jolt.Tests/ExpectedStructSizeTests.cs | 63 - Jolt.Tests/ExpectedStructSizeTests.cs.meta | 3 - Jolt.Tests/Jolt.Tests.asmdef | 15 - Jolt.Unity.meta | 3 - {Jolt.Unity => Jolt.Unity~}/Jolt.Unity.asmdef | 0 .../Jolt.Unity.asmdef.meta | 0 .../JoltEditorInitialization.cs | 0 .../JoltEditorInitialization.cs.meta | 0 .../JoltRuntimeInitialization.cs | 0 .../JoltRuntimeInitialization.cs.meta | 0 Jolt/.DS_Store | Bin 0 -> 6148 bytes Jolt/Bindings.meta | 9 +- Jolt/Bindings/JPH_AllowedDOFs.cs | 7 + Jolt/Bindings/JPH_AllowedDOFs.cs.meta | 2 + Jolt/Bindings/JPH_SixDOFConstraintAxis.cs | 7 + .../Bindings/JPH_SixDOFConstraintAxis.cs.meta | 2 + Jolt/Bindings/NativeTypeNameAttribute.cs | 14 + Jolt/Bindings/NativeTypeNameAttribute.cs.meta | 2 + ...{UnsafeBindings.g.cs => UnsafeBindings.cs} | 4480 +++++++++----- Jolt/Bindings/UnsafeBindings.cs.meta | 2 + Jolt/Jolt.SourceGenerator.dll | Bin 0 -> 13824 bytes Jolt/Jolt.SourceGenerator.dll.meta | 60 + Jolt/Jolt.SourceGenerator.pdb | Bin 0 -> 11368 bytes Jolt/Jolt.SourceGenerator.pdb.meta | 7 + Jolt/Jolt.asmdef | 6 +- Jolt/Jolt.asmdef.meta | 2 +- Jolt/Mathematics.meta | 2 +- Jolt/Types/JobSystemThreadPoolConfig.cs | 14 - Jolt/Types/JobSystemThreadPoolConfig.cs.meta | 3 - Jolt~/.DS_Store | Bin 0 -> 6148 bytes {Jolt => Jolt~}/Attributes.meta | 0 .../Attributes/ExpectedStructSizeAttribute.cs | 0 .../ExpectedStructSizeAttribute.cs.meta | 0 .../Attributes/GenerateBindingsAttribute.cs | 0 .../GenerateBindingsAttribute.cs.meta | 0 Jolt~/Bindings.meta | 3 + {Jolt => Jolt~}/Bindings/Bindings.cs | 0 {Jolt => Jolt~}/Bindings/Bindings.cs.meta | 0 {Jolt => Jolt~}/Bindings/Bindings_Handles.cs | 0 .../Bindings/Bindings_Handles.cs.meta | 0 {Jolt => Jolt~}/Bindings/Bindings_JPH.cs | 0 {Jolt => Jolt~}/Bindings/Bindings_JPH.cs.meta | 0 {Jolt => Jolt~}/Bindings/Bindings_JPH_Body.cs | 0 .../Bindings/Bindings_JPH_Body.cs.meta | 0 .../Bindings_JPH_BodyActivationListener.cs | 0 ...indings_JPH_BodyActivationListener.cs.meta | 0 .../Bindings_JPH_BodyCreationSettings.cs | 0 .../Bindings_JPH_BodyCreationSettings.cs.meta | 0 .../Bindings/Bindings_JPH_BodyFilter.cs | 0 .../Bindings/Bindings_JPH_BodyFilter.cs.meta | 0 .../Bindings/Bindings_JPH_BodyInterface.cs | 0 .../Bindings_JPH_BodyInterface.cs.meta | 0 .../Bindings/Bindings_JPH_BoxShape.cs | 0 .../Bindings/Bindings_JPH_BoxShape.cs.meta | 0 .../Bindings/Bindings_JPH_BoxShapeSettings.cs | 0 .../Bindings_JPH_BoxShapeSettings.cs.meta | 0 .../Bindings_JPH_BroadPhaseLayerFilter.cs | 0 ...Bindings_JPH_BroadPhaseLayerFilter.cs.meta | 0 ...ndings_JPH_BroadPhaseLayerInterfaceMask.cs | 0 ...s_JPH_BroadPhaseLayerInterfaceMask.cs.meta | 0 ...dings_JPH_BroadPhaseLayerInterfaceTable.cs | 0 ..._JPH_BroadPhaseLayerInterfaceTable.cs.meta | 0 .../Bindings/Bindings_JPH_BroadPhaseQuery.cs | 0 .../Bindings_JPH_BroadPhaseQuery.cs.meta | 0 .../Bindings/Bindings_JPH_CapsuleShape.cs | 0 .../Bindings_JPH_CapsuleShape.cs.meta | 0 .../Bindings_JPH_CapsuleShapeSettings.cs | 0 .../Bindings_JPH_CapsuleShapeSettings.cs.meta | 0 .../Bindings_JPH_CollideShapeSettings.cs | 0 .../Bindings_JPH_CollideShapeSettings.cs.meta | 0 .../Bindings_JPH_CompoundShapeSettings.cs | 0 ...Bindings_JPH_CompoundShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_ConeConstraint.cs | 0 .../Bindings_JPH_ConeConstraint.cs.meta | 0 .../Bindings_JPH_ConeConstraintSettings.cs | 0 ...indings_JPH_ConeConstraintSettings.cs.meta | 0 .../Bindings/Bindings_JPH_Constraint.cs | 0 .../Bindings/Bindings_JPH_Constraint.cs.meta | 0 .../Bindings/Bindings_JPH_ContactListener.cs | 0 .../Bindings_JPH_ContactListener.cs.meta | 0 .../Bindings/Bindings_JPH_ContactManifold.cs | 0 .../Bindings_JPH_ContactManifold.cs.meta | 0 .../Bindings/Bindings_JPH_ContactSettings.cs | 0 .../Bindings_JPH_ContactSettings.cs.meta | 0 .../Bindings/Bindings_JPH_ConvexHullShape.cs | 0 .../Bindings_JPH_ConvexHullShape.cs.meta | 0 .../Bindings_JPH_ConvexHullShapeSettings.cs | 0 ...ndings_JPH_ConvexHullShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_ConvexShape.cs | 0 .../Bindings/Bindings_JPH_ConvexShape.cs.meta | 0 .../Bindings_JPH_ConvexShapeSettings.cs | 0 .../Bindings_JPH_ConvexShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_CylinderShape.cs | 0 .../Bindings_JPH_CylinderShape.cs.meta | 0 .../Bindings_JPH_CylinderShapeSettings.cs | 0 ...Bindings_JPH_CylinderShapeSettings.cs.meta | 0 .../Bindings_JPH_DistanceConstraint.cs | 0 .../Bindings_JPH_DistanceConstraint.cs.meta | 0 ...Bindings_JPH_DistanceConstraintSettings.cs | 0 ...ngs_JPH_DistanceConstraintSettings.cs.meta | 0 .../Bindings/Bindings_JPH_FixedConstraint.cs | 0 .../Bindings_JPH_FixedConstraint.cs.meta | 0 .../Bindings_JPH_FixedConstraintSettings.cs | 0 ...ndings_JPH_FixedConstraintSettings.cs.meta | 0 .../Bindings_JPH_GearConstraintSettings.cs | 0 ...indings_JPH_GearConstraintSettings.cs.meta | 0 .../Bindings_JPH_HeightFieldShapeSettings.cs | 0 ...dings_JPH_HeightFieldShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_HingeConstraint.cs | 0 .../Bindings_JPH_HingeConstraint.cs.meta | 0 .../Bindings_JPH_HingeConstraintSettings.cs | 0 ...ndings_JPH_HingeConstraintSettings.cs.meta | 0 .../Bindings/Bindings_JPH_JobSystem.cs | 0 .../Bindings/Bindings_JPH_JobSystem.cs.meta | 0 .../Bindings_JPH_JobSystemCallback.cs | 0 .../Bindings_JPH_JobSystemCallback.cs.meta | 0 .../Bindings_JPH_JobSystemThreadPool.cs | 0 .../Bindings_JPH_JobSystemThreadPool.cs.meta | 0 .../Bindings/Bindings_JPH_MassProperties.cs | 0 .../Bindings_JPH_MassProperties.cs.meta | 0 .../Bindings_JPH_MeshShapeSettings.cs | 0 .../Bindings_JPH_MeshShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_MotionProperties.cs | 0 .../Bindings_JPH_MotionProperties.cs.meta | 0 .../Bindings/Bindings_JPH_NarrowPhaseQuery.cs | 0 .../Bindings_JPH_NarrowPhaseQuery.cs.meta | 0 .../Bindings_JPH_ObjectLayerFilter.cs | 0 .../Bindings_JPH_ObjectLayerFilter.cs.meta | 0 .../Bindings_JPH_ObjectLayerPairFilterMask.cs | 0 ...ings_JPH_ObjectLayerPairFilterMask.cs.meta | 0 ...Bindings_JPH_ObjectLayerPairFilterTable.cs | 0 ...ngs_JPH_ObjectLayerPairFilterTable.cs.meta | 0 ...s_JPH_ObjectVsBroadPhaseLayerFilterMask.cs | 0 ..._ObjectVsBroadPhaseLayerFilterMask.cs.meta | 0 ..._JPH_ObjectVsBroadPhaseLayerFilterTable.cs | 0 ...ObjectVsBroadPhaseLayerFilterTable.cs.meta | 0 .../Bindings/Bindings_JPH_PhysicsMaterial.cs | 0 .../Bindings_JPH_PhysicsMaterial.cs.meta | 0 .../Bindings/Bindings_JPH_PhysicsSystem.cs | 0 .../Bindings_JPH_PhysicsSystem.cs.meta | 0 .../Bindings/Bindings_JPH_PlaneShape.cs | 0 .../Bindings/Bindings_JPH_PlaneShape.cs.meta | 0 .../Bindings_JPH_PlaneShapeSettings.cs | 0 .../Bindings_JPH_PlaneShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_PointConstraint.cs | 0 .../Bindings_JPH_PointConstraint.cs.meta | 0 .../Bindings_JPH_PointConstraintSettings.cs | 0 ...ndings_JPH_PointConstraintSettings.cs.meta | 0 .../Bindings_JPH_RotatedTranslatedShape.cs | 0 ...indings_JPH_RotatedTranslatedShape.cs.meta | 0 ...ings_JPH_RotatedTranslatedShapeSettings.cs | 0 ...JPH_RotatedTranslatedShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_Shape.cs | 0 .../Bindings/Bindings_JPH_Shape.cs.meta | 0 .../Bindings_JPH_ShapeCastSettings.cs | 0 .../Bindings_JPH_ShapeCastSettings.cs.meta | 0 .../Bindings/Bindings_JPH_ShapeSettings.cs | 0 .../Bindings_JPH_ShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_SixDOFConstraint.cs | 0 .../Bindings_JPH_SixDOFConstraint.cs.meta | 0 .../Bindings_JPH_SixDOFConstraintSettings.cs | 0 ...dings_JPH_SixDOFConstraintSettings.cs.meta | 0 .../Bindings/Bindings_JPH_SliderConstraint.cs | 0 .../Bindings_JPH_SliderConstraint.cs.meta | 0 .../Bindings_JPH_SliderConstraintSettings.cs | 0 ...dings_JPH_SliderConstraintSettings.cs.meta | 0 .../Bindings_JPH_SoftBodyCreationSettings.cs | 0 ...dings_JPH_SoftBodyCreationSettings.cs.meta | 0 .../Bindings/Bindings_JPH_SphereShape.cs | 0 .../Bindings/Bindings_JPH_SphereShape.cs.meta | 0 .../Bindings_JPH_SphereShapeSettings.cs | 0 .../Bindings_JPH_SphereShapeSettings.cs.meta | 0 .../Bindings_JPH_SwingTwistConstraint.cs | 0 .../Bindings_JPH_SwingTwistConstraint.cs.meta | 0 ...ndings_JPH_SwingTwistConstraintSettings.cs | 0 ...s_JPH_SwingTwistConstraintSettings.cs.meta | 0 .../Bindings_JPH_TaperedCapsuleShape.cs | 0 .../Bindings_JPH_TaperedCapsuleShape.cs.meta | 0 ...indings_JPH_TaperedCapsuleShapeSettings.cs | 0 ...gs_JPH_TaperedCapsuleShapeSettings.cs.meta | 0 .../Bindings_JPH_TaperedCylinderShape.cs | 0 .../Bindings_JPH_TaperedCylinderShape.cs.meta | 0 ...ndings_JPH_TaperedCylinderShapeSettings.cs | 0 ...s_JPH_TaperedCylinderShapeSettings.cs.meta | 0 .../Bindings/Bindings_JPH_TriangleShape.cs | 0 .../Bindings_JPH_TriangleShape.cs.meta | 0 .../Bindings_JPH_TriangleShapeSettings.cs | 0 ...Bindings_JPH_TriangleShapeSettings.cs.meta | 0 .../Bindings_JPH_TwoBodyConstraint.cs | 0 .../Bindings_JPH_TwoBodyConstraint.cs.meta | 0 {Jolt => Jolt~}/Bindings/ManagedReference.cs | 0 .../Bindings/ManagedReference.cs.meta | 0 Jolt~/Bindings/UnsafeBindings.cs | 5475 +++++++++++++++++ Jolt~/Bindings/UnsafeBindings.cs.meta | 2 + {Jolt => Jolt~}/Generated.meta | 0 {Jolt => Jolt~}/Generated/Body.g.cs | 0 {Jolt => Jolt~}/Generated/Body.g.cs.meta | 0 .../Generated/BodyActivationListener.g.cs | 0 .../BodyActivationListener.g.cs.meta | 0 .../Generated/BodyCreationSettings.g.cs | 0 .../Generated/BodyCreationSettings.g.cs.meta | 0 {Jolt => Jolt~}/Generated/BodyFilter.g.cs | 0 .../Generated/BodyFilter.g.cs.meta | 0 {Jolt => Jolt~}/Generated/BodyInterface.g.cs | 0 .../Generated/BodyInterface.g.cs.meta | 0 .../Generated/BodyLockInterface.g.cs | 0 .../Generated/BodyLockInterface.g.cs.meta | 0 {Jolt => Jolt~}/Generated/BoxShape.g.cs | 0 {Jolt => Jolt~}/Generated/BoxShape.g.cs.meta | 0 .../Generated/BoxShapeSettings.g.cs | 0 .../Generated/BoxShapeSettings.g.cs.meta | 0 .../Generated/BroadPhaseLayerFilter.g.cs | 0 .../Generated/BroadPhaseLayerFilter.g.cs.meta | 0 .../BroadPhaseLayerInterfaceMask.g.cs | 0 .../BroadPhaseLayerInterfaceMask.g.cs.meta | 0 .../BroadPhaseLayerInterfaceTable.g.cs | 0 .../BroadPhaseLayerInterfaceTable.g.cs.meta | 0 .../Generated/BroadPhaseQuery.g.cs | 0 .../Generated/BroadPhaseQuery.g.cs.meta | 0 {Jolt => Jolt~}/Generated/CapsuleShape.g.cs | 0 .../Generated/CapsuleShape.g.cs.meta | 0 .../Generated/CapsuleShapeSettings.g.cs | 0 .../Generated/CapsuleShapeSettings.g.cs.meta | 0 .../Generated/CompoundShapeSettings.g.cs | 0 .../Generated/CompoundShapeSettings.g.cs.meta | 0 {Jolt => Jolt~}/Generated/ConeConstraint.g.cs | 0 .../Generated/ConeConstraint.g.cs.meta | 0 {Jolt => Jolt~}/Generated/Constraint.g.cs | 0 .../Generated/Constraint.g.cs.meta | 0 .../Generated/ContactListener.g.cs | 0 .../Generated/ContactListener.g.cs.meta | 0 .../Generated/ConvexHullShape.g.cs | 0 .../Generated/ConvexHullShape.g.cs.meta | 0 .../Generated/ConvexHullShapeSettings.g.cs | 0 .../ConvexHullShapeSettings.g.cs.meta | 0 {Jolt => Jolt~}/Generated/ConvexShape.g.cs | 0 .../Generated/ConvexShape.g.cs.meta | 0 {Jolt => Jolt~}/Generated/CylinderShape.g.cs | 0 .../Generated/CylinderShape.g.cs.meta | 0 .../Generated/CylinderShapeSettings.g.cs | 0 .../Generated/CylinderShapeSettings.g.cs.meta | 0 .../Generated/DistanceConstraint.g.cs | 0 .../Generated/DistanceConstraint.g.cs.meta | 0 .../Generated/FixedConstraint.g.cs | 0 .../Generated/FixedConstraint.g.cs.meta | 0 .../Generated/HingeConstraint.g.cs | 0 .../Generated/HingeConstraint.g.cs.meta | 0 {Jolt => Jolt~}/Generated/JobSystem.g.cs | 0 {Jolt => Jolt~}/Generated/JobSystem.g.cs.meta | 0 {Jolt => Jolt~}/Generated/MeshShape.g.cs | 0 {Jolt => Jolt~}/Generated/MeshShape.g.cs.meta | 0 .../Generated/MeshShapeSettings.g.cs | 0 .../Generated/MeshShapeSettings.g.cs.meta | 0 .../Generated/MotionProperties.g.cs | 0 .../Generated/MotionProperties.g.cs.meta | 0 .../MutableCompoundShapeSettings.g.cs | 0 .../MutableCompoundShapeSettings.g.cs.meta | 0 .../Generated/NarrowPhaseQuery.g.cs | 0 .../Generated/NarrowPhaseQuery.g.cs.meta | 0 .../Generated/ObjectLayerFilter.g.cs | 0 .../Generated/ObjectLayerFilter.g.cs.meta | 0 .../Generated/ObjectLayerPairFilterMask.g.cs | 0 .../ObjectLayerPairFilterMask.g.cs.meta | 0 .../Generated/PhysicsMaterial.g.cs | 0 .../Generated/PhysicsMaterial.g.cs.meta | 0 {Jolt => Jolt~}/Generated/PhysicsSystem.g.cs | 0 .../Generated/PhysicsSystem.g.cs.meta | 0 {Jolt => Jolt~}/Generated/PlaneShape.g.cs | 0 .../Generated/PlaneShape.g.cs.meta | 0 .../Generated/PlaneShapeSettings.g.cs | 0 .../Generated/PlaneShapeSettings.g.cs.meta | 0 .../Generated/PointConstraint.g.cs | 0 .../Generated/PointConstraint.g.cs.meta | 0 {Jolt => Jolt~}/Generated/Shape.g.cs | 0 {Jolt => Jolt~}/Generated/Shape.g.cs.meta | 0 {Jolt => Jolt~}/Generated/ShapeFilter.g.cs | 0 .../Generated/ShapeFilter.g.cs.meta | 0 {Jolt => Jolt~}/Generated/ShapeSettings.g.cs | 0 .../Generated/ShapeSettings.g.cs.meta | 0 .../Generated/SixDOFConstraint.g.cs | 0 .../Generated/SixDOFConstraint.g.cs.meta | 0 .../Generated/SliderConstraint.g.cs | 0 .../Generated/SliderConstraint.g.cs.meta | 0 .../Generated/SoftBodyCreationSettings.g.cs | 0 .../SoftBodyCreationSettings.g.cs.meta | 0 {Jolt => Jolt~}/Generated/SphereShape.g.cs | 0 .../Generated/SphereShape.g.cs.meta | 0 .../Generated/SphereShapeSettings.g.cs | 0 .../Generated/SphereShapeSettings.g.cs.meta | 0 .../StaticCompoundShapeSettings.g.cs | 0 .../StaticCompoundShapeSettings.g.cs.meta | 0 .../Generated/SwingTwistConstraint.g.cs | 0 .../Generated/SwingTwistConstraint.g.cs.meta | 0 .../Generated/TaperedCapsuleShape.g.cs | 0 .../Generated/TaperedCapsuleShape.g.cs.meta | 0 .../TaperedCapsuleShapeSettings.g.cs | 0 .../TaperedCapsuleShapeSettings.g.cs.meta | 0 {Jolt => Jolt~}/Generated/TriangleShape.g.cs | 0 .../Generated/TriangleShape.g.cs.meta | 0 .../Generated/TriangleShapeSettings.g.cs | 0 .../Generated/TriangleShapeSettings.g.cs.meta | 0 Jolt~/Jolt.asmdef | 20 + .../Jolt.asmdef.meta | 2 +- {Jolt => Jolt~}/Jolt.cs | 0 {Jolt => Jolt~}/Jolt.cs.meta | 0 Jolt~/Mathematics.meta | 8 + Jolt~/Mathematics/rmatrix4x4.cs | 47 + Jolt~/Mathematics/rmatrix4x4.cs.meta | 3 + Jolt~/Mathematics/rvec3.cs | 80 + .../Mathematics/rvec3.cs.meta | 2 +- {Jolt => Jolt~}/Native.meta | 0 {Jolt => Jolt~}/Native/NativeBool.cs | 0 {Jolt => Jolt~}/Native/NativeBool.cs.meta | 0 {Jolt => Jolt~}/Native/NativeHandle.cs | 0 {Jolt => Jolt~}/Native/NativeHandle.cs.meta | 0 {Jolt => Jolt~}/Native/NativeSafetyHandle.cs | 0 .../Native/NativeSafetyHandle.cs.meta | 0 .../Native/NativeTypeNameAttribute.cs | 0 .../Native/NativeTypeNameAttribute.cs.meta | 0 {Jolt => Jolt~}/Types.meta | 0 {Jolt => Jolt~}/Types/AABox.cs | 0 {Jolt => Jolt~}/Types/AABox.cs.meta | 0 {Jolt => Jolt~}/Types/Activation.cs | 0 {Jolt => Jolt~}/Types/Activation.cs.meta | 0 {Jolt => Jolt~}/Types/ActiveEdgeMode.cs | 0 {Jolt => Jolt~}/Types/ActiveEdgeMode.cs.meta | 0 {Jolt => Jolt~}/Types/AllowedDOFs.cs | 0 {Jolt => Jolt~}/Types/AllowedDOFs.cs.meta | 0 {Jolt => Jolt~}/Types/BackFaceMode.cs | 0 {Jolt => Jolt~}/Types/BackFaceMode.cs.meta | 0 {Jolt => Jolt~}/Types/Body.cs | 0 {Jolt => Jolt~}/Types/Body.cs.meta | 0 .../Types/BodyActivationListener.cs | 0 .../Types/BodyActivationListener.cs.meta | 0 {Jolt => Jolt~}/Types/BodyCreationSettings.cs | 0 .../Types/BodyCreationSettings.cs.meta | 0 {Jolt => Jolt~}/Types/BodyFilter.cs | 0 {Jolt => Jolt~}/Types/BodyFilter.cs.meta | 0 {Jolt => Jolt~}/Types/BodyID.cs | 0 {Jolt => Jolt~}/Types/BodyID.cs.meta | 0 {Jolt => Jolt~}/Types/BodyInterface.cs | 0 {Jolt => Jolt~}/Types/BodyInterface.cs.meta | 0 {Jolt => Jolt~}/Types/BodyLockInterface.cs | 0 .../Types/BodyLockInterface.cs.meta | 0 {Jolt => Jolt~}/Types/BodyType.cs | 0 {Jolt => Jolt~}/Types/BodyType.cs.meta | 0 {Jolt => Jolt~}/Types/BoxShape.cs | 0 {Jolt => Jolt~}/Types/BoxShape.cs.meta | 0 {Jolt => Jolt~}/Types/BoxShapeSettings.cs | 0 .../Types/BoxShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/BroadPhaseCastResult.cs | 0 .../Types/BroadPhaseCastResult.cs.meta | 0 {Jolt => Jolt~}/Types/BroadPhaseLayer.cs | 0 {Jolt => Jolt~}/Types/BroadPhaseLayer.cs.meta | 0 .../Types/BroadPhaseLayerFilter.cs | 0 .../Types/BroadPhaseLayerFilter.cs.meta | 0 .../Types/BroadPhaseLayerInterface.cs | 0 .../Types/BroadPhaseLayerInterface.cs.meta | 0 .../Types/BroadPhaseLayerInterfaceMask.cs | 0 .../BroadPhaseLayerInterfaceMask.cs.meta | 0 .../Types/BroadPhaseLayerInterfaceTable.cs | 0 .../BroadPhaseLayerInterfaceTable.cs.meta | 0 {Jolt => Jolt~}/Types/BroadPhaseQuery.cs | 0 {Jolt => Jolt~}/Types/BroadPhaseQuery.cs.meta | 0 {Jolt => Jolt~}/Types/CapsuleShape.cs | 0 {Jolt => Jolt~}/Types/CapsuleShape.cs.meta | 0 {Jolt => Jolt~}/Types/CapsuleShapeSettings.cs | 0 .../Types/CapsuleShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/CollectFacesMode.cs | 0 .../Types/CollectFacesMode.cs.meta | 0 {Jolt => Jolt~}/Types/CollidePointResult.cs | 0 .../Types/CollidePointResult.cs.meta | 0 {Jolt => Jolt~}/Types/CollideSettings.cs | 0 {Jolt => Jolt~}/Types/CollideSettings.cs.meta | 0 {Jolt => Jolt~}/Types/CollideShapeResult.cs | 0 .../Types/CollideShapeResult.cs.meta | 0 {Jolt => Jolt~}/Types/CollideShapeSettings.cs | 0 .../Types/CollideShapeSettings.cs.meta | 0 .../Types/CollisionCollectorType.cs | 0 .../Types/CollisionCollectorType.cs.meta | 0 .../Types/CompoundShapeSettings.cs | 0 .../Types/CompoundShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ConeConstraint.cs | 0 {Jolt => Jolt~}/Types/ConeConstraint.cs.meta | 0 .../Types/ConeConstraintSettings.cs | 0 .../Types/ConeConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/Constraint.cs | 0 {Jolt => Jolt~}/Types/Constraint.cs.meta | 0 {Jolt => Jolt~}/Types/ConstraintSettings.cs | 0 .../Types/ConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ConstraintSpace.cs | 0 {Jolt => Jolt~}/Types/ConstraintSpace.cs.meta | 0 {Jolt => Jolt~}/Types/ConstraintSubType.cs | 0 .../Types/ConstraintSubType.cs.meta | 0 {Jolt => Jolt~}/Types/ConstraintType.cs | 0 {Jolt => Jolt~}/Types/ConstraintType.cs.meta | 0 {Jolt => Jolt~}/Types/ContactListener.cs | 0 {Jolt => Jolt~}/Types/ContactListener.cs.meta | 0 {Jolt => Jolt~}/Types/ConvexHullShape.cs | 0 {Jolt => Jolt~}/Types/ConvexHullShape.cs.meta | 0 .../Types/ConvexHullShapeSettings.cs | 0 .../Types/ConvexHullShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ConvexShape.cs | 0 {Jolt => Jolt~}/Types/ConvexShape.cs.meta | 0 {Jolt => Jolt~}/Types/CylinderShape.cs | 0 {Jolt => Jolt~}/Types/CylinderShape.cs.meta | 0 .../Types/CylinderShapeSettings.cs | 0 .../Types/CylinderShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/DistanceConstraint.cs | 0 .../Types/DistanceConstraint.cs.meta | 0 .../Types/DistanceConstraintSettings.cs | 0 .../Types/DistanceConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/FixedConstraint.cs | 0 {Jolt => Jolt~}/Types/FixedConstraint.cs.meta | 0 .../Types/FixedConstraintSettings.cs | 0 .../Types/FixedConstraintSettings.cs.meta | 0 .../Types/GearConstraintSettings.cs | 0 .../Types/GearConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/GroundState.cs | 0 {Jolt => Jolt~}/Types/GroundState.cs.meta | 0 {Jolt => Jolt~}/Types/HingeConstraint.cs | 0 {Jolt => Jolt~}/Types/HingeConstraint.cs.meta | 0 .../Types/HingeConstraintSettings.cs | 0 .../Types/HingeConstraintSettings.cs.meta | 0 .../Types/IBodyActivationListener.cs | 0 .../Types/IBodyActivationListener.cs.meta | 0 {Jolt => Jolt~}/Types/IContactListeners.cs | 0 .../Types/IContactListeners.cs.meta | 0 {Jolt => Jolt~}/Types/IndexedTriangle.cs | 0 {Jolt => Jolt~}/Types/IndexedTriangle.cs.meta | 0 .../Types/IndexedTriangleNoMaterial.cs | 0 .../Types/IndexedTriangleNoMaterial.cs.meta | 0 {Jolt => Jolt~}/Types/JobSystem.cs | 0 {Jolt => Jolt~}/Types/JobSystem.cs.meta | 0 {Jolt => Jolt~}/Types/JobSystemConfig.cs | 0 {Jolt => Jolt~}/Types/JobSystemConfig.cs.meta | 0 {Jolt => Jolt~}/Types/MassProperties.cs | 0 {Jolt => Jolt~}/Types/MassProperties.cs.meta | 0 {Jolt => Jolt~}/Types/MeshShape.cs | 0 {Jolt => Jolt~}/Types/MeshShape.cs.meta | 0 {Jolt => Jolt~}/Types/MeshShapeSettings.cs | 0 .../Types/MeshShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/MotionProperties.cs | 0 .../Types/MotionProperties.cs.meta | 0 {Jolt => Jolt~}/Types/MotionQuality.cs | 0 {Jolt => Jolt~}/Types/MotionQuality.cs.meta | 0 {Jolt => Jolt~}/Types/MotionType.cs | 0 {Jolt => Jolt~}/Types/MotionType.cs.meta | 0 {Jolt => Jolt~}/Types/MotorSettings.cs | 0 {Jolt => Jolt~}/Types/MotorSettings.cs.meta | 0 .../Types/MutableCompoundShapeSettings.cs | 0 .../MutableCompoundShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/NarrowPhaseQuery.cs | 0 .../Types/NarrowPhaseQuery.cs.meta | 0 {Jolt => Jolt~}/Types/ObjectLayer.cs | 0 {Jolt => Jolt~}/Types/ObjectLayer.cs.meta | 0 {Jolt => Jolt~}/Types/ObjectLayerFilter.cs | 0 .../Types/ObjectLayerFilter.cs.meta | 0 .../Types/ObjectLayerPairFilter.cs | 0 .../Types/ObjectLayerPairFilter.cs.meta | 0 .../Types/ObjectLayerPairFilterMask.cs | 0 .../Types/ObjectLayerPairFilterMask.cs.meta | 0 .../Types/ObjectLayerPairFilterTable.cs | 0 .../Types/ObjectLayerPairFilterTable.cs.meta | 0 .../Types/ObjectVsBroadPhaseLayerFilter.cs | 0 .../ObjectVsBroadPhaseLayerFilter.cs.meta | 0 .../ObjectVsBroadPhaseLayerFilterMask.cs | 0 .../ObjectVsBroadPhaseLayerFilterMask.cs.meta | 0 .../ObjectVsBroadPhaseLayerFilterTable.cs | 0 ...ObjectVsBroadPhaseLayerFilterTable.cs.meta | 0 .../Types/OverrideMassProperties.cs | 0 .../Types/OverrideMassProperties.cs.meta | 0 {Jolt => Jolt~}/Types/PhysicsMaterial.cs | 0 {Jolt => Jolt~}/Types/PhysicsMaterial.cs.meta | 0 {Jolt => Jolt~}/Types/PhysicsSettings.cs | 0 {Jolt => Jolt~}/Types/PhysicsSettings.cs.meta | 0 {Jolt => Jolt~}/Types/PhysicsSystem.cs | 0 {Jolt => Jolt~}/Types/PhysicsSystem.cs.meta | 0 .../Types/PhysicsSystemSettings.cs | 0 .../Types/PhysicsSystemSettings.cs.meta | 0 {Jolt => Jolt~}/Types/PhysicsUpdateError.cs | 0 .../Types/PhysicsUpdateError.cs.meta | 0 {Jolt => Jolt~}/Types/Plane.cs | 0 {Jolt => Jolt~}/Types/Plane.cs.meta | 0 {Jolt => Jolt~}/Types/PlaneShape.cs | 0 {Jolt => Jolt~}/Types/PlaneShape.cs.meta | 0 {Jolt => Jolt~}/Types/PlaneShapeSettings.cs | 0 .../Types/PlaneShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/PointConstraint.cs | 0 {Jolt => Jolt~}/Types/PointConstraint.cs.meta | 0 .../Types/PointConstraintSettings.cs | 0 .../Types/PointConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/RayCastResult.cs | 0 {Jolt => Jolt~}/Types/RayCastResult.cs.meta | 0 {Jolt => Jolt~}/Types/RayCastSettings.cs | 0 {Jolt => Jolt~}/Types/RayCastSettings.cs.meta | 0 {Jolt => Jolt~}/Types/Shape.cs | 0 {Jolt => Jolt~}/Types/Shape.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeCastResult.cs | 0 {Jolt => Jolt~}/Types/ShapeCastResult.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeCastSettings.cs | 0 .../Types/ShapeCastSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeColor.cs | 0 {Jolt => Jolt~}/Types/ShapeColor.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeFilter.cs | 0 {Jolt => Jolt~}/Types/ShapeFilter.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeSettings.cs | 0 {Jolt => Jolt~}/Types/ShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeSubType.cs | 0 {Jolt => Jolt~}/Types/ShapeSubType.cs.meta | 0 {Jolt => Jolt~}/Types/ShapeType.cs | 0 {Jolt => Jolt~}/Types/ShapeType.cs.meta | 0 {Jolt => Jolt~}/Types/SixDOFConstraint.cs | 0 .../Types/SixDOFConstraint.cs.meta | 0 {Jolt => Jolt~}/Types/SixDOFConstraintAxis.cs | 0 .../Types/SixDOFConstraintAxis.cs.meta | 0 .../Types/SixDOFConstraintSettings.cs | 0 .../Types/SixDOFConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/SliderConstraint.cs | 0 .../Types/SliderConstraint.cs.meta | 0 .../Types/SliderConstraintSettings.cs | 0 .../Types/SliderConstraintSettings.cs.meta | 0 .../Types/SoftBodyConstraintColor.cs | 0 .../Types/SoftBodyConstraintColor.cs.meta | 0 .../Types/SoftBodyCreationSettings.cs | 0 .../Types/SoftBodyCreationSettings.cs.meta | 0 {Jolt => Jolt~}/Types/SphereShape.cs | 0 {Jolt => Jolt~}/Types/SphereShape.cs.meta | 0 {Jolt => Jolt~}/Types/SphereShapeSettings.cs | 0 .../Types/SphereShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/SpringMode.cs | 0 {Jolt => Jolt~}/Types/SpringMode.cs.meta | 0 {Jolt => Jolt~}/Types/SpringSettings.cs | 0 {Jolt => Jolt~}/Types/SpringSettings.cs.meta | 0 .../Types/StaticCompoundShapeSettings.cs | 0 .../Types/StaticCompoundShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/SubShapeID.cs | 0 {Jolt => Jolt~}/Types/SubShapeID.cs.meta | 0 {Jolt => Jolt~}/Types/SubShapeIDPair.cs | 0 {Jolt => Jolt~}/Types/SubShapeIDPair.cs.meta | 0 {Jolt => Jolt~}/Types/SwingTwistConstraint.cs | 0 .../Types/SwingTwistConstraint.cs.meta | 0 .../Types/SwingTwistConstraintSettings.cs | 0 .../SwingTwistConstraintSettings.cs.meta | 0 {Jolt => Jolt~}/Types/SwingType.cs | 0 {Jolt => Jolt~}/Types/SwingType.cs.meta | 0 {Jolt => Jolt~}/Types/TaperedCapsuleShape.cs | 0 .../Types/TaperedCapsuleShape.cs.meta | 0 .../Types/TaperedCapsuleShapeSettings.cs | 0 .../Types/TaperedCapsuleShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/Triangle.cs | 0 {Jolt => Jolt~}/Types/Triangle.cs.meta | 0 {Jolt => Jolt~}/Types/TriangleShape.cs | 0 {Jolt => Jolt~}/Types/TriangleShape.cs.meta | 0 .../Types/TriangleShapeSettings.cs | 0 .../Types/TriangleShapeSettings.cs.meta | 0 {Jolt => Jolt~}/Types/ValidateResult.cs | 0 {Jolt => Jolt~}/Types/ValidateResult.cs.meta | 0 package.json | 2 +- 570 files changed, 8835 insertions(+), 2326 deletions(-) create mode 100644 .DS_Store create mode 100644 Jolt.SourceGenerator~/Folder.DotSettings.user create mode 100644 Jolt.SourceGenerator~/JoltGenerator.cs delete mode 100644 Jolt.SourceGenerator~/JoltSourceGenerator.cs delete mode 100644 Jolt.SourceGenerator~/JoltSourceGeneratorLog.cs delete mode 100644 Jolt.SourceGenerator~/JoltSyntaxReceiver.cs create mode 100644 Jolt.SourceGenerator~/SourceCodeHelper.cs delete mode 100644 Jolt.Tests.meta delete mode 100644 Jolt.Tests/ExpectedCoverage.cs delete mode 100644 Jolt.Tests/ExpectedCoverage.cs.meta delete mode 100644 Jolt.Tests/ExpectedStructSizeTests.cs delete mode 100644 Jolt.Tests/ExpectedStructSizeTests.cs.meta delete mode 100644 Jolt.Tests/Jolt.Tests.asmdef delete mode 100644 Jolt.Unity.meta rename {Jolt.Unity => Jolt.Unity~}/Jolt.Unity.asmdef (100%) rename {Jolt.Unity => Jolt.Unity~}/Jolt.Unity.asmdef.meta (100%) rename {Jolt.Unity => Jolt.Unity~}/JoltEditorInitialization.cs (100%) rename {Jolt.Unity => Jolt.Unity~}/JoltEditorInitialization.cs.meta (100%) rename {Jolt.Unity => Jolt.Unity~}/JoltRuntimeInitialization.cs (100%) rename {Jolt.Unity => Jolt.Unity~}/JoltRuntimeInitialization.cs.meta (100%) create mode 100644 Jolt/.DS_Store create mode 100644 Jolt/Bindings/JPH_AllowedDOFs.cs create mode 100644 Jolt/Bindings/JPH_AllowedDOFs.cs.meta create mode 100644 Jolt/Bindings/JPH_SixDOFConstraintAxis.cs create mode 100644 Jolt/Bindings/JPH_SixDOFConstraintAxis.cs.meta create mode 100644 Jolt/Bindings/NativeTypeNameAttribute.cs create mode 100644 Jolt/Bindings/NativeTypeNameAttribute.cs.meta rename Jolt/Bindings/{UnsafeBindings.g.cs => UnsafeBindings.cs} (62%) create mode 100644 Jolt/Bindings/UnsafeBindings.cs.meta create mode 100644 Jolt/Jolt.SourceGenerator.dll create mode 100644 Jolt/Jolt.SourceGenerator.dll.meta create mode 100644 Jolt/Jolt.SourceGenerator.pdb create mode 100644 Jolt/Jolt.SourceGenerator.pdb.meta delete mode 100644 Jolt/Types/JobSystemThreadPoolConfig.cs delete mode 100644 Jolt/Types/JobSystemThreadPoolConfig.cs.meta create mode 100644 Jolt~/.DS_Store rename {Jolt => Jolt~}/Attributes.meta (100%) rename {Jolt => Jolt~}/Attributes/ExpectedStructSizeAttribute.cs (100%) rename {Jolt => Jolt~}/Attributes/ExpectedStructSizeAttribute.cs.meta (100%) rename {Jolt => Jolt~}/Attributes/GenerateBindingsAttribute.cs (100%) rename {Jolt => Jolt~}/Attributes/GenerateBindingsAttribute.cs.meta (100%) create mode 100644 Jolt~/Bindings.meta rename {Jolt => Jolt~}/Bindings/Bindings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_Handles.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_Handles.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Body.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Body.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyActivationListener.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyActivationListener.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyCreationSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyCreationSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyFilter.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyFilter.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyInterface.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BodyInterface.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BoxShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BoxShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BoxShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BoxShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseQuery.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_BroadPhaseQuery.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CapsuleShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CapsuleShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CapsuleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CapsuleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CollideShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CollideShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CompoundShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CompoundShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConeConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConeConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConeConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConeConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Constraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Constraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactListener.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactListener.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactManifold.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactManifold.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ContactSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexHullShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexHullShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ConvexShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CylinderShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CylinderShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CylinderShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_CylinderShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_DistanceConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_DistanceConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_DistanceConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_DistanceConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_FixedConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_FixedConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_FixedConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_FixedConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_GearConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_GearConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HingeConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HingeConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HingeConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_HingeConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystem.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystem.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystemCallback.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystemCallback.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystemThreadPool.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_JobSystemThreadPool.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MassProperties.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MassProperties.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MeshShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MeshShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MotionProperties.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_MotionProperties.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_NarrowPhaseQuery.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_NarrowPhaseQuery.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerFilter.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerFilter.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PhysicsMaterial.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PhysicsMaterial.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PhysicsSystem.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PhysicsSystem.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PlaneShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PlaneShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PlaneShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PlaneShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PointConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PointConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PointConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_PointConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_RotatedTranslatedShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_RotatedTranslatedShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Shape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_Shape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ShapeCastSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ShapeCastSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_ShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SixDOFConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SixDOFConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SliderConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SliderConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SliderConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SliderConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SphereShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SphereShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SphereShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SphereShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SwingTwistConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SwingTwistConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCapsuleShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCapsuleShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCylinderShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCylinderShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TriangleShape.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TriangleShape.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TriangleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TriangleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TwoBodyConstraint.cs (100%) rename {Jolt => Jolt~}/Bindings/Bindings_JPH_TwoBodyConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Bindings/ManagedReference.cs (100%) rename {Jolt => Jolt~}/Bindings/ManagedReference.cs.meta (100%) create mode 100644 Jolt~/Bindings/UnsafeBindings.cs create mode 100644 Jolt~/Bindings/UnsafeBindings.cs.meta rename {Jolt => Jolt~}/Generated.meta (100%) rename {Jolt => Jolt~}/Generated/Body.g.cs (100%) rename {Jolt => Jolt~}/Generated/Body.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BodyActivationListener.g.cs (100%) rename {Jolt => Jolt~}/Generated/BodyActivationListener.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BodyCreationSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/BodyCreationSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BodyFilter.g.cs (100%) rename {Jolt => Jolt~}/Generated/BodyFilter.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BodyInterface.g.cs (100%) rename {Jolt => Jolt~}/Generated/BodyInterface.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BodyLockInterface.g.cs (100%) rename {Jolt => Jolt~}/Generated/BodyLockInterface.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BoxShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/BoxShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BoxShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/BoxShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerFilter.g.cs (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerFilter.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerInterfaceMask.g.cs (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerInterfaceMask.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerInterfaceTable.g.cs (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseLayerInterfaceTable.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseQuery.g.cs (100%) rename {Jolt => Jolt~}/Generated/BroadPhaseQuery.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/CapsuleShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/CapsuleShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/CapsuleShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/CapsuleShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/CompoundShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/CompoundShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ConeConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/ConeConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/Constraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/Constraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ContactListener.g.cs (100%) rename {Jolt => Jolt~}/Generated/ContactListener.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ConvexHullShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/ConvexHullShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ConvexHullShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/ConvexHullShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ConvexShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/ConvexShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/CylinderShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/CylinderShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/CylinderShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/CylinderShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/DistanceConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/DistanceConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/FixedConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/FixedConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/HingeConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/HingeConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/JobSystem.g.cs (100%) rename {Jolt => Jolt~}/Generated/JobSystem.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/MeshShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/MeshShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/MeshShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/MeshShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/MotionProperties.g.cs (100%) rename {Jolt => Jolt~}/Generated/MotionProperties.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/MutableCompoundShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/MutableCompoundShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/NarrowPhaseQuery.g.cs (100%) rename {Jolt => Jolt~}/Generated/NarrowPhaseQuery.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ObjectLayerFilter.g.cs (100%) rename {Jolt => Jolt~}/Generated/ObjectLayerFilter.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ObjectLayerPairFilterMask.g.cs (100%) rename {Jolt => Jolt~}/Generated/ObjectLayerPairFilterMask.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/PhysicsMaterial.g.cs (100%) rename {Jolt => Jolt~}/Generated/PhysicsMaterial.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/PhysicsSystem.g.cs (100%) rename {Jolt => Jolt~}/Generated/PhysicsSystem.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/PlaneShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/PlaneShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/PlaneShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/PlaneShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/PointConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/PointConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/Shape.g.cs (100%) rename {Jolt => Jolt~}/Generated/Shape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ShapeFilter.g.cs (100%) rename {Jolt => Jolt~}/Generated/ShapeFilter.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/ShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/ShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SixDOFConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/SixDOFConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SliderConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/SliderConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SoftBodyCreationSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/SoftBodyCreationSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SphereShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/SphereShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SphereShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/SphereShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/StaticCompoundShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/StaticCompoundShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/SwingTwistConstraint.g.cs (100%) rename {Jolt => Jolt~}/Generated/SwingTwistConstraint.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/TaperedCapsuleShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/TaperedCapsuleShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/TaperedCapsuleShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/TaperedCapsuleShapeSettings.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/TriangleShape.g.cs (100%) rename {Jolt => Jolt~}/Generated/TriangleShape.g.cs.meta (100%) rename {Jolt => Jolt~}/Generated/TriangleShapeSettings.g.cs (100%) rename {Jolt => Jolt~}/Generated/TriangleShapeSettings.g.cs.meta (100%) create mode 100644 Jolt~/Jolt.asmdef rename Jolt.Tests/Jolt.Tests.asmdef.meta => Jolt~/Jolt.asmdef.meta (76%) rename {Jolt => Jolt~}/Jolt.cs (100%) rename {Jolt => Jolt~}/Jolt.cs.meta (100%) create mode 100644 Jolt~/Mathematics.meta create mode 100644 Jolt~/Mathematics/rmatrix4x4.cs create mode 100644 Jolt~/Mathematics/rmatrix4x4.cs.meta create mode 100644 Jolt~/Mathematics/rvec3.cs rename Jolt/Bindings/UnsafeBindings.g.cs.meta => Jolt~/Mathematics/rvec3.cs.meta (83%) rename {Jolt => Jolt~}/Native.meta (100%) rename {Jolt => Jolt~}/Native/NativeBool.cs (100%) rename {Jolt => Jolt~}/Native/NativeBool.cs.meta (100%) rename {Jolt => Jolt~}/Native/NativeHandle.cs (100%) rename {Jolt => Jolt~}/Native/NativeHandle.cs.meta (100%) rename {Jolt => Jolt~}/Native/NativeSafetyHandle.cs (100%) rename {Jolt => Jolt~}/Native/NativeSafetyHandle.cs.meta (100%) rename {Jolt => Jolt~}/Native/NativeTypeNameAttribute.cs (100%) rename {Jolt => Jolt~}/Native/NativeTypeNameAttribute.cs.meta (100%) rename {Jolt => Jolt~}/Types.meta (100%) rename {Jolt => Jolt~}/Types/AABox.cs (100%) rename {Jolt => Jolt~}/Types/AABox.cs.meta (100%) rename {Jolt => Jolt~}/Types/Activation.cs (100%) rename {Jolt => Jolt~}/Types/Activation.cs.meta (100%) rename {Jolt => Jolt~}/Types/ActiveEdgeMode.cs (100%) rename {Jolt => Jolt~}/Types/ActiveEdgeMode.cs.meta (100%) rename {Jolt => Jolt~}/Types/AllowedDOFs.cs (100%) rename {Jolt => Jolt~}/Types/AllowedDOFs.cs.meta (100%) rename {Jolt => Jolt~}/Types/BackFaceMode.cs (100%) rename {Jolt => Jolt~}/Types/BackFaceMode.cs.meta (100%) rename {Jolt => Jolt~}/Types/Body.cs (100%) rename {Jolt => Jolt~}/Types/Body.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyActivationListener.cs (100%) rename {Jolt => Jolt~}/Types/BodyActivationListener.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyCreationSettings.cs (100%) rename {Jolt => Jolt~}/Types/BodyCreationSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyFilter.cs (100%) rename {Jolt => Jolt~}/Types/BodyFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyID.cs (100%) rename {Jolt => Jolt~}/Types/BodyID.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyInterface.cs (100%) rename {Jolt => Jolt~}/Types/BodyInterface.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyLockInterface.cs (100%) rename {Jolt => Jolt~}/Types/BodyLockInterface.cs.meta (100%) rename {Jolt => Jolt~}/Types/BodyType.cs (100%) rename {Jolt => Jolt~}/Types/BodyType.cs.meta (100%) rename {Jolt => Jolt~}/Types/BoxShape.cs (100%) rename {Jolt => Jolt~}/Types/BoxShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/BoxShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/BoxShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseCastResult.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseCastResult.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayer.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayer.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerFilter.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterface.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterface.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterfaceMask.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterfaceMask.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterfaceTable.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseLayerInterfaceTable.cs.meta (100%) rename {Jolt => Jolt~}/Types/BroadPhaseQuery.cs (100%) rename {Jolt => Jolt~}/Types/BroadPhaseQuery.cs.meta (100%) rename {Jolt => Jolt~}/Types/CapsuleShape.cs (100%) rename {Jolt => Jolt~}/Types/CapsuleShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/CapsuleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/CapsuleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollectFacesMode.cs (100%) rename {Jolt => Jolt~}/Types/CollectFacesMode.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollidePointResult.cs (100%) rename {Jolt => Jolt~}/Types/CollidePointResult.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollideSettings.cs (100%) rename {Jolt => Jolt~}/Types/CollideSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollideShapeResult.cs (100%) rename {Jolt => Jolt~}/Types/CollideShapeResult.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollideShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/CollideShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/CollisionCollectorType.cs (100%) rename {Jolt => Jolt~}/Types/CollisionCollectorType.cs.meta (100%) rename {Jolt => Jolt~}/Types/CompoundShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/CompoundShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConeConstraint.cs (100%) rename {Jolt => Jolt~}/Types/ConeConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConeConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/ConeConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/Constraint.cs (100%) rename {Jolt => Jolt~}/Types/Constraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/ConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConstraintSpace.cs (100%) rename {Jolt => Jolt~}/Types/ConstraintSpace.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConstraintSubType.cs (100%) rename {Jolt => Jolt~}/Types/ConstraintSubType.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConstraintType.cs (100%) rename {Jolt => Jolt~}/Types/ConstraintType.cs.meta (100%) rename {Jolt => Jolt~}/Types/ContactListener.cs (100%) rename {Jolt => Jolt~}/Types/ContactListener.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConvexHullShape.cs (100%) rename {Jolt => Jolt~}/Types/ConvexHullShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConvexHullShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/ConvexHullShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ConvexShape.cs (100%) rename {Jolt => Jolt~}/Types/ConvexShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/CylinderShape.cs (100%) rename {Jolt => Jolt~}/Types/CylinderShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/CylinderShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/CylinderShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/DistanceConstraint.cs (100%) rename {Jolt => Jolt~}/Types/DistanceConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/DistanceConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/DistanceConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/FixedConstraint.cs (100%) rename {Jolt => Jolt~}/Types/FixedConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/FixedConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/FixedConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/GearConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/GearConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/GroundState.cs (100%) rename {Jolt => Jolt~}/Types/GroundState.cs.meta (100%) rename {Jolt => Jolt~}/Types/HingeConstraint.cs (100%) rename {Jolt => Jolt~}/Types/HingeConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/HingeConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/HingeConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/IBodyActivationListener.cs (100%) rename {Jolt => Jolt~}/Types/IBodyActivationListener.cs.meta (100%) rename {Jolt => Jolt~}/Types/IContactListeners.cs (100%) rename {Jolt => Jolt~}/Types/IContactListeners.cs.meta (100%) rename {Jolt => Jolt~}/Types/IndexedTriangle.cs (100%) rename {Jolt => Jolt~}/Types/IndexedTriangle.cs.meta (100%) rename {Jolt => Jolt~}/Types/IndexedTriangleNoMaterial.cs (100%) rename {Jolt => Jolt~}/Types/IndexedTriangleNoMaterial.cs.meta (100%) rename {Jolt => Jolt~}/Types/JobSystem.cs (100%) rename {Jolt => Jolt~}/Types/JobSystem.cs.meta (100%) rename {Jolt => Jolt~}/Types/JobSystemConfig.cs (100%) rename {Jolt => Jolt~}/Types/JobSystemConfig.cs.meta (100%) rename {Jolt => Jolt~}/Types/MassProperties.cs (100%) rename {Jolt => Jolt~}/Types/MassProperties.cs.meta (100%) rename {Jolt => Jolt~}/Types/MeshShape.cs (100%) rename {Jolt => Jolt~}/Types/MeshShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/MeshShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/MeshShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/MotionProperties.cs (100%) rename {Jolt => Jolt~}/Types/MotionProperties.cs.meta (100%) rename {Jolt => Jolt~}/Types/MotionQuality.cs (100%) rename {Jolt => Jolt~}/Types/MotionQuality.cs.meta (100%) rename {Jolt => Jolt~}/Types/MotionType.cs (100%) rename {Jolt => Jolt~}/Types/MotionType.cs.meta (100%) rename {Jolt => Jolt~}/Types/MotorSettings.cs (100%) rename {Jolt => Jolt~}/Types/MotorSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/MutableCompoundShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/MutableCompoundShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/NarrowPhaseQuery.cs (100%) rename {Jolt => Jolt~}/Types/NarrowPhaseQuery.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectLayer.cs (100%) rename {Jolt => Jolt~}/Types/ObjectLayer.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectLayerFilter.cs (100%) rename {Jolt => Jolt~}/Types/ObjectLayerFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilter.cs (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilterMask.cs (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilterMask.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilterTable.cs (100%) rename {Jolt => Jolt~}/Types/ObjectLayerPairFilterTable.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilter.cs (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilterMask.cs (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilterMask.cs.meta (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilterTable.cs (100%) rename {Jolt => Jolt~}/Types/ObjectVsBroadPhaseLayerFilterTable.cs.meta (100%) rename {Jolt => Jolt~}/Types/OverrideMassProperties.cs (100%) rename {Jolt => Jolt~}/Types/OverrideMassProperties.cs.meta (100%) rename {Jolt => Jolt~}/Types/PhysicsMaterial.cs (100%) rename {Jolt => Jolt~}/Types/PhysicsMaterial.cs.meta (100%) rename {Jolt => Jolt~}/Types/PhysicsSettings.cs (100%) rename {Jolt => Jolt~}/Types/PhysicsSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/PhysicsSystem.cs (100%) rename {Jolt => Jolt~}/Types/PhysicsSystem.cs.meta (100%) rename {Jolt => Jolt~}/Types/PhysicsSystemSettings.cs (100%) rename {Jolt => Jolt~}/Types/PhysicsSystemSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/PhysicsUpdateError.cs (100%) rename {Jolt => Jolt~}/Types/PhysicsUpdateError.cs.meta (100%) rename {Jolt => Jolt~}/Types/Plane.cs (100%) rename {Jolt => Jolt~}/Types/Plane.cs.meta (100%) rename {Jolt => Jolt~}/Types/PlaneShape.cs (100%) rename {Jolt => Jolt~}/Types/PlaneShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/PlaneShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/PlaneShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/PointConstraint.cs (100%) rename {Jolt => Jolt~}/Types/PointConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/PointConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/PointConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/RayCastResult.cs (100%) rename {Jolt => Jolt~}/Types/RayCastResult.cs.meta (100%) rename {Jolt => Jolt~}/Types/RayCastSettings.cs (100%) rename {Jolt => Jolt~}/Types/RayCastSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/Shape.cs (100%) rename {Jolt => Jolt~}/Types/Shape.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeCastResult.cs (100%) rename {Jolt => Jolt~}/Types/ShapeCastResult.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeCastSettings.cs (100%) rename {Jolt => Jolt~}/Types/ShapeCastSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeColor.cs (100%) rename {Jolt => Jolt~}/Types/ShapeColor.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeFilter.cs (100%) rename {Jolt => Jolt~}/Types/ShapeFilter.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/ShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeSubType.cs (100%) rename {Jolt => Jolt~}/Types/ShapeSubType.cs.meta (100%) rename {Jolt => Jolt~}/Types/ShapeType.cs (100%) rename {Jolt => Jolt~}/Types/ShapeType.cs.meta (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraint.cs (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraintAxis.cs (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraintAxis.cs.meta (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/SixDOFConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SliderConstraint.cs (100%) rename {Jolt => Jolt~}/Types/SliderConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/SliderConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/SliderConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SoftBodyConstraintColor.cs (100%) rename {Jolt => Jolt~}/Types/SoftBodyConstraintColor.cs.meta (100%) rename {Jolt => Jolt~}/Types/SoftBodyCreationSettings.cs (100%) rename {Jolt => Jolt~}/Types/SoftBodyCreationSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SphereShape.cs (100%) rename {Jolt => Jolt~}/Types/SphereShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/SphereShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/SphereShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SpringMode.cs (100%) rename {Jolt => Jolt~}/Types/SpringMode.cs.meta (100%) rename {Jolt => Jolt~}/Types/SpringSettings.cs (100%) rename {Jolt => Jolt~}/Types/SpringSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/StaticCompoundShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/StaticCompoundShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SubShapeID.cs (100%) rename {Jolt => Jolt~}/Types/SubShapeID.cs.meta (100%) rename {Jolt => Jolt~}/Types/SubShapeIDPair.cs (100%) rename {Jolt => Jolt~}/Types/SubShapeIDPair.cs.meta (100%) rename {Jolt => Jolt~}/Types/SwingTwistConstraint.cs (100%) rename {Jolt => Jolt~}/Types/SwingTwistConstraint.cs.meta (100%) rename {Jolt => Jolt~}/Types/SwingTwistConstraintSettings.cs (100%) rename {Jolt => Jolt~}/Types/SwingTwistConstraintSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/SwingType.cs (100%) rename {Jolt => Jolt~}/Types/SwingType.cs.meta (100%) rename {Jolt => Jolt~}/Types/TaperedCapsuleShape.cs (100%) rename {Jolt => Jolt~}/Types/TaperedCapsuleShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/TaperedCapsuleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/TaperedCapsuleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/Triangle.cs (100%) rename {Jolt => Jolt~}/Types/Triangle.cs.meta (100%) rename {Jolt => Jolt~}/Types/TriangleShape.cs (100%) rename {Jolt => Jolt~}/Types/TriangleShape.cs.meta (100%) rename {Jolt => Jolt~}/Types/TriangleShapeSettings.cs (100%) rename {Jolt => Jolt~}/Types/TriangleShapeSettings.cs.meta (100%) rename {Jolt => Jolt~}/Types/ValidateResult.cs (100%) rename {Jolt => Jolt~}/Types/ValidateResult.cs.meta (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1db48c71042faf09e23796cca7c0119161b53777 GIT binary patch literal 6148 zcmeHK!D`z;5S_J^L{2F9kU)DA^cou3B@H1L;iLp|j7oB7i!0Tp6;-uHlH-GM(LMR0 z{z$(kZ+6!viCai$i9@{uvu}5HMq(b?9SsqQ&al@aY7&tPWpvgt{6=`6bxvx=vI-RZ zjCfQG;#9_1|D5x-2FrkD;HfddXV;+)NO7a%B+l%te>lZq}PYbhw~)s$x%lRvtFTML%rcP z+(x(gVm#h&?QVPR*8XJM8@GHPi{00IlS#wfdbx9O+WnS(&*Y_MP~gH*^332At}vM; zbP?uRDzh)JvH#XIQF=uoQXW!HpQ%sB&=?KeKCX#0Ol#RF2lL)OZS ztc8>DufB^LDcwnS`t>Xonj_?HELGMvS<8TB;64oS{op|v1A~=Db#-7+EdbDgSqbLc zOK^;5FfdqY#12I0P@oPKro|9C9Cpw61qLgPI-G=QK7@I*Fdd3eZ^!dJDO3?=Z literal 0 HcmV?d00001 diff --git a/Jolt.SourceGenerator~/Folder.DotSettings.user b/Jolt.SourceGenerator~/Folder.DotSettings.user new file mode 100644 index 0000000..45b21d8 --- /dev/null +++ b/Jolt.SourceGenerator~/Folder.DotSettings.user @@ -0,0 +1,2 @@ + + ForceIncluded \ No newline at end of file diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj b/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj index d3ad1d4..279c372 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj @@ -1,15 +1,30 @@  - - netstandard2.1 - AnyCPU - latest - true - true - - - - - + + netstandard2.0 + AnyCPU + latest + true + true + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + diff --git a/Jolt.SourceGenerator~/JoltGenerator.cs b/Jolt.SourceGenerator~/JoltGenerator.cs new file mode 100644 index 0000000..e804723 --- /dev/null +++ b/Jolt.SourceGenerator~/JoltGenerator.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Text; +using System.Threading; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Jolt.SourceGenerator; + +public struct Parameter +{ + public readonly string type; + public readonly string name; + + public Parameter(IParameterSymbol symbol) + { + // throw new NotImplementedException(); + } +} + +public struct Method +{ + public readonly string Name; + public readonly string Call; + public readonly string ReturnType; + public readonly ImmutableArray Parameters; + + public Method(string name, IMethodSymbol symbol) + { + Name = name; + Call = $"{symbol.ContainingType.ToDisplayString()}.{symbol.Name}"; + ReturnType = $"{symbol.ReturnType.ToDisplayString()}"; + Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); + } +} + +public struct Struct(string typeName, ImmutableArray methods) +{ + public readonly string TypeName = typeName; + public readonly ImmutableArray Methods = methods; + + public void Generate(SourceCodeScopeHelper helper) + { + foreach (var method in Methods) + { + helper.AppendLine($"//{method.Name} -> {method.Call}"); + } + } +} + +[Generator] +public class JoltGenerator : IIncrementalGenerator +{ + [ThreadStatic] + public static StringBuilder m_StringBuilder; + + public void Initialize(IncrementalGeneratorInitializationContext context) + { + var structs = context.SyntaxProvider.CreateSyntaxProvider + ( + static (x, token) => x is ClassDeclarationSyntax { Identifier.ValueText: "UnsafeBindings" }, + static (x, token) => parse(x, token) + ) + .SelectMany((x, token) => x); + + context.RegisterSourceOutput(structs, (gctx, source) => + { + var helper = new SourceCodeHelper(m_StringBuilder ??= new()); + try + { + using (var @namespace = helper.Scope("namespace Jolt")) + { + source.Generate(@namespace); + } + + gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); + } + catch (Exception e) + { + gctx.AddSource($"{source.TypeName}.g.cs", $"/* {e}*/"); + } + finally + { + m_StringBuilder.Clear(); + } + }); + } + + private static IEnumerable parse(GeneratorSyntaxContext ctx, CancellationToken token) + { + var symbol = ctx.SemanticModel.GetDeclaredSymbol(ctx.Node, token) as INamedTypeSymbol; + if (symbol is null) yield break; + + List> methodDefines = new(); + Dictionary type2Index = new(); + + var methodSymbols = symbol.GetMembers().OfType(); + foreach (var method in methodSymbols) + { + var splits = method.Name.Split('_'); + + // throw new Exception(string.Join("--", splits)); + string typeName; + string methodName; + + if (splits.Length == 3) + { + typeName = splits[1]; + methodName = splits[2]; + } + else if (splits.Length == 2) + { + typeName = "JotCore"; + methodName = splits[1]; + } + else + { + throw new Exception("Unknown type"); + } + + if (!type2Index.TryGetValue(typeName, out var index)) + { + index = methodDefines.Count; + type2Index[typeName] = index; + methodDefines.Add(new List()); + } + + var methods = methodDefines[index]; + methods.Add(new Method(methodName, method)); + } + + foreach (var kv in type2Index) + { + var methods = methodDefines[kv.Value]; + + yield return new Struct(kv.Key, methods.ToImmutableArray()); + } + } +} diff --git a/Jolt.SourceGenerator~/JoltSourceGenerator.cs b/Jolt.SourceGenerator~/JoltSourceGenerator.cs deleted file mode 100644 index 2bd4995..0000000 --- a/Jolt.SourceGenerator~/JoltSourceGenerator.cs +++ /dev/null @@ -1,394 +0,0 @@ -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.CSharp.Syntax; - -namespace Jolt.SourceGenerators; - -[Generator] -internal class JoltSourceGenerator : ISourceGenerator -{ - private static readonly JoltSourceGeneratorLog Log = new (); - - public void Initialize(GeneratorInitializationContext ctx) - { - ctx.RegisterForSyntaxNotifications(() => new JoltSyntaxReceiver()); - } - - public void Execute(GeneratorExecutionContext ctx) - { - if (ctx.SyntaxReceiver is not JoltSyntaxReceiver recv) return; - - var bindings = IngestNativeBindings(recv); - var wrappers = CreateNativeTypeWrapperList(recv, ctx); - - foreach (var binding in bindings.BindingsByNativeType) - { - Log.Debug($"Found bindings for {binding.Key}"); - } - - foreach (var wrapper in wrappers) - { - try - { - Log.Debug($"Generating {wrapper.TypeName}"); - - var filename = $"{wrapper.TypeName}.g.cs"; - var filetext = GenerateNativeTypeWrapper(wrapper, bindings); - - ctx.AddSource(filename, filetext); - } - catch (Exception ex) - { - Log.Error($"Exception while generating {wrapper.TypeName}:"); - Log.Error($"{ex}"); - } - } - - Log.Flush(); - } - - /// - /// Construct an optimized map of native extern functions from the syntax receiver pass. - /// - private static JoltNativeBindings IngestNativeBindings(JoltSyntaxReceiver recv) - { - var bindings = new JoltNativeBindings(); - - foreach (var decl in recv.Bindings) - { - var parts = decl.Identifier.ValueText.Split('_'); - - if (parts.Length < 3) - { - continue; // we are only interested in JPH_SomeType_Method bindings - } - - var details = new JoltNativeBindingDetails($"{parts[0]}_{parts[1]}", decl); - - if (bindings.BindingsByNativeType.TryGetValue(details.NativeTypeName, out var value)) - { - value.Add(details); - } - else - { - bindings.BindingsByNativeType.Add(details.NativeTypeName, [details]); - } - } - - return bindings; - } - - /// - /// Construct a list of native type wrapper metadata from the syntax receiver pass. - /// - private static List CreateNativeTypeWrapperList(JoltSyntaxReceiver recv, GeneratorExecutionContext ctx) - { - var result = new List(); - - foreach (var decl in recv.Wrappers) - { - result.Add(CreateNativeTypeWrapper(ctx, decl)); - } - - return result; - } - - private static JoltNativeTypeWrapper CreateNativeTypeWrapper(GeneratorExecutionContext ctx, StructDeclarationSyntax decl) - { - var symbol = ctx.Compilation.GetSemanticModel(decl.SyntaxTree).GetDeclaredSymbol(decl); - var result = new JoltNativeTypeWrapper(decl.Identifier.ValueText); - - Debug.Assert(symbol != null); - - foreach (var attr in symbol.GetAttributes()) - { - if (IsAttributeType(ctx, attr, "Jolt.GenerateBindingsAttribute")) - { - foreach (var type in attr.ConstructorArguments[0].Values) - { - if (type.Value != null) result.NativeTypePrefixes.Add(type.Value.ToString()); - } - } - } - - foreach (var member in symbol.GetMembers()) - { - if (member is IMethodSymbol { DeclaredAccessibility: Accessibility.Public } method) - { - // elide generated bindings that would share a name with a declared member - result.ExcludedBindings.Add($"{result.NativeTypeName}_{method.Name}"); - } - } - - return result; - } - - private static bool IsAttributeType(GeneratorExecutionContext ctx, AttributeData attr, string type) - { - return ctx.Compilation.GetTypeByMetadataName(type)?.Equals(attr.AttributeClass, SymbolEqualityComparer.Default) ?? false; - } - - private static string GenerateNativeTypeWrapper(JoltNativeTypeWrapper target, JoltNativeBindings bindings) - { - var writer = new IndentedTextWriter(new StringWriter()); - - writer.WriteLine("using System;"); - writer.WriteLine("using Jolt;"); - writer.WriteLine("using Unity.Collections;"); - writer.WriteLine("using Unity.Mathematics;"); - writer.WriteLine(); - - StartBlock(writer, "namespace Jolt"); - StartBlock(writer, $"public partial struct {target.TypeName} : IEquatable<{target.TypeName}>"); - - GenerateEquatableInterface(writer, target); - - foreach (var prefix in target.NativeTypePrefixes) - { - GenerateBindingsWithPrefix(writer, target, bindings, prefix); - } - - CloseBlock(writer); - CloseBlock(writer); - - Debug.Assert(writer.Indent == 0); - - return writer.InnerWriter.ToString(); - } - - private static void GenerateEquatableInterface(IndentedTextWriter writer, JoltNativeTypeWrapper target) - { - WritePaddedLine(writer, "#region IEquatable"); - - WritePaddedLine(writer, $"public bool Equals({target.TypeName} other) => Handle.Equals(other.Handle);"); - - WritePaddedLine(writer, $"public override bool Equals(object obj) => obj is {target.TypeName} other && Equals(other);"); - - WritePaddedLine(writer, $"public override int GetHashCode() => Handle.GetHashCode();"); - - WritePaddedLine(writer, $"public static bool operator ==({target.TypeName} lhs, {target.TypeName} rhs) => lhs.Equals(rhs);"); - - WritePaddedLine(writer, $"public static bool operator !=({target.TypeName} lhs, {target.TypeName} rhs) => !lhs.Equals(rhs);"); - - WritePaddedLine(writer, "#endregion"); - } - - private static void GenerateBindingsWithPrefix(IndentedTextWriter writer, JoltNativeTypeWrapper target, JoltNativeBindings bindings, string prefix) - { - if (bindings.BindingsByNativeType.TryGetValue(prefix, out var bindingsWithPrefix)) - { - WritePaddedLine(writer, $"#region {prefix}"); - - foreach (var binding in bindingsWithPrefix) - { - GenerateBindings(writer, target, binding); - } - - WritePaddedLine(writer, "#endregion"); - } - } - - private static void GenerateBindings(IndentedTextWriter writer, JoltNativeTypeWrapper target, JoltNativeBindingDetails b) - { - var bindingName = b.BindingDeclaration.Identifier.ValueText; - var wrapperName = bindingName.Substring(b.NativeTypeName.Length + 1); // JPH_SomeType_SomeMethodName -> SomeMethodName - - if (target.ExcludedBindings.Contains(bindingName)) - { - return; // target has explicitly excluded this binding - } - - if (b.BindingDeclaration.ParameterList.Parameters.Count == 0) - { - return; // TODO handle generating Create methods - } - - // The wrapper struct methods generally fall into the same format: - // - // public void SetFriction ( float friction ) => Bindings.JPH_Body_GetFriction ( Handle, friction ); - // ^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ - // wrapperName wrapperParams bindingName bindingParams - // - // The following code generates the wrapper params and binding params simultaneously because they are - // fairly interconnected. - - var bindingParams = new List(); - var wrapperParams = new List(); - - // Add the handle parameter to the binding param list only. - - { - - var firstParamDecl = b.BindingDeclaration.ParameterList.Parameters[0]; - var firstParamType = firstParamDecl.Type!.ToString(); - - if (firstParamType.StartsWith("NativeHandle") == false) - { - return; // TODO this is the Create category, or generally anything that is not a method binding - } - - string handleParam; - - var handleParamNativeTypeName = ExtractGenericTypeParameter(firstParamType); - - // Reinterpret the handle if the native type name is different. For example, the SphereShape wrapper - // generates bindings for JPH_Shape, JPH_ConvexShape, and JPH_SphereShape because the native class - // is a subclass of those two classes. Because the wrapper types are structs, API inheritance is - // not an option. Instead we generate methods for the whole class hierarchy directly on the SphereShape - // wrapper and internally reinterpret the handle into the native base class types. - - if (handleParamNativeTypeName != target.NativeTypeName) - { - handleParam = $"Handle.Reinterpret<{handleParamNativeTypeName}>()"; - } - else - { - handleParam = "Handle"; - } - - if (firstParamDecl.Modifiers.Any(SyntaxKind.RefKeyword)) - { - handleParam = $"ref {handleParam}"; // destroy bindings take handle by ref - } - - bindingParams.Add(handleParam); - } - - // Add the other parameters to both the binding and wrapper param list. - - foreach (var p in b.BindingDeclaration.ParameterList.Parameters.RemoveAt(0)) - { - var bindingParamType = p.Type!.ToString(); - var bindingParamName = p.Identifier.ValueText; - - string bindingParam; - string wrapperParam; - - if (bindingParamType.StartsWith("NativeHandle")) - { - // When the param is a NativeHandle, extract the generic type parameter and convert that into a wrapper - // type name. For example, when the binding takes a NativeHandle param the wrapper - // method takes a SphereShape param and internally passes along its handle. - - var wrapperParamType = ExtractGenericTypeParameter(bindingParamType).Substring("JPH_".Length); - var wrapperParamName = bindingParamName; - - bindingParam = $"{bindingParamName}.Handle"; - wrapperParam = $"{wrapperParamType} {wrapperParamName}"; - } - else - { - // When the param is any other type, just reuse the binding param type and name with any modifiers. - - bindingParam = bindingParamName; - wrapperParam = $"{bindingParamType} {bindingParamName}"; - - if (p.Modifiers.Any(SyntaxKind.OutKeyword)) - { - bindingParam = $"out {bindingParam}"; - wrapperParam = $"out {wrapperParam}"; - } - - if (p.Modifiers.Any(SyntaxKind.RefKeyword)) - { - bindingParam = $"ref {bindingParam}"; - wrapperParam = $"ref {wrapperParam}"; - } - } - - bindingParams.Add(bindingParam); - wrapperParams.Add(wrapperParam); - } - - var bindingParamsString = string.Join(", ", bindingParams); - var wrapperParamsString = string.Join(", ", wrapperParams); - - var wrapperBody = $"Bindings.{bindingName}({bindingParamsString})"; - - var bindingReturn = b.BindingDeclaration.ReturnType.ToString(); - var wrapperReturn = bindingReturn; - - if (wrapperName == "GetType") - { - wrapperName = "GetShapeType"; // JPH_Shape_GetType hides native GetType method - } - - if (bindingReturn.StartsWith("NativeHandle")) - { - // If the binding returns a NativeHandle, instead construct and return the corresponding wrapper type. - - wrapperReturn = ExtractGenericTypeParameter(bindingReturn).Substring("JPH_".Length); - wrapperBody = $"new {wrapperReturn} {{ Handle = {wrapperBody} }}"; - } - - WritePaddedLine(writer, $"public {wrapperReturn} {wrapperName}({wrapperParamsString}) => {wrapperBody};"); - } - - /// - /// Returns the type parameter of a generic type. - /// - private static string ExtractGenericTypeParameter(string type) - { - var lbracket = type.IndexOf('<'); - var rbracket = type.IndexOf('>'); - return type.Substring(lbracket + 1, rbracket - lbracket - 1); - } - - private static void StartBlock(IndentedTextWriter writer, string line) - { - writer.WriteLine(line); - writer.WriteLine("{"); - - writer.Indent++; - } - - private static void CloseBlock(IndentedTextWriter writer) - { - writer.Indent--; - - writer.WriteLine("}"); - } - - private static void WritePaddedLine(IndentedTextWriter writer, string line) - { - writer.WriteLine(line); - writer.WriteLine(); - } -} - -/// -/// An optimized lookup of native extern functions. -/// -internal class JoltNativeBindings -{ - public readonly Dictionary> BindingsByNativeType = new (); -} - -/// -/// Metadata about an individual native extern function we will proxy. -/// -internal class JoltNativeBindingDetails(string type, MethodDeclarationSyntax decl) -{ - public readonly string NativeTypeName = type; - - public readonly MethodDeclarationSyntax BindingDeclaration = decl; -} - -/// -/// Metadata about a native type wrapper we will generate. -/// -internal class JoltNativeTypeWrapper(string type) -{ - public readonly string TypeName = type; - - public string NativeTypeName => $"JPH_{TypeName}"; - - public readonly HashSet NativeTypePrefixes = []; - - public readonly HashSet ExcludedBindings = []; -} diff --git a/Jolt.SourceGenerator~/JoltSourceGeneratorLog.cs b/Jolt.SourceGenerator~/JoltSourceGeneratorLog.cs deleted file mode 100644 index 7c1d0ff..0000000 --- a/Jolt.SourceGenerator~/JoltSourceGeneratorLog.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.IO; -using System.Text; - -namespace Jolt.SourceGenerators; - -/// -/// Simple log stream that writes to a temp file if possible. -/// -internal class JoltSourceGeneratorLog -{ - private StringBuilder logs = new StringBuilder(); - - public void Debug(string message) - { - logs.AppendLine($"[DEBUG {DateTime.Now}] {message}"); - } - - public void Error(string message) - { - logs.AppendLine($"[ERROR {DateTime.Now}] {message}"); - } - - public void Flush() - { - try - { - File.WriteAllText(Path.Combine(Path.GetTempPath(), "JoltPhysicsUnitySourceGenerator.log"), logs.ToString()); - } - catch - { - // skip logs - } - } -} \ No newline at end of file diff --git a/Jolt.SourceGenerator~/JoltSyntaxReceiver.cs b/Jolt.SourceGenerator~/JoltSyntaxReceiver.cs deleted file mode 100644 index f925fbf..0000000 --- a/Jolt.SourceGenerator~/JoltSyntaxReceiver.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.CSharp.Syntax; - -namespace Jolt.SourceGenerators; - -internal class JoltSyntaxReceiver : ISyntaxReceiver -{ - /// - /// The list of struct declarations that wrap native types. - /// - public readonly List Wrappers = new (); - - /// - /// The list of method declarations that proxy extern methods. - /// - public readonly List Bindings = new (); - - public void OnVisitSyntaxNode(SyntaxNode node) - { - switch (node) - { - case MethodDeclarationSyntax mds: - OnVisitMethodDeclaration(mds); - break; - case StructDeclarationSyntax sds: - OnVisitStructDeclaration(sds); - break; - } - } - - private void OnVisitMethodDeclaration(MethodDeclarationSyntax mds) - { - if (mds is { Parent: ClassDeclarationSyntax { Identifier.ValueText: "Bindings" } }) - { - Bindings.Add(mds); - } - } - - private void OnVisitStructDeclaration(StructDeclarationSyntax sds) - { - if (sds.Modifiers.Any(SyntaxKind.PartialKeyword) == false) - { - return; // skip non-partial - } - - if (IncludesAttributeNamed(sds.AttributeLists, "GenerateBindings")) - { - Wrappers.Add(sds); - } - } - - /// - /// Returns true if the nested list of attributes contains any attribute with the provided name. - /// - private static bool IncludesAttributeNamed(SyntaxList list, string name) - { - foreach (var l in list) - { - foreach (var a in l.Attributes) - { - if (a.Name.ToString() == name) return true; - } - } - - return false; - } -} diff --git a/Jolt.SourceGenerator~/SourceCodeHelper.cs b/Jolt.SourceGenerator~/SourceCodeHelper.cs new file mode 100644 index 0000000..8ebb295 --- /dev/null +++ b/Jolt.SourceGenerator~/SourceCodeHelper.cs @@ -0,0 +1,85 @@ +using System.Text; + +namespace Jolt.SourceGenerator; + +public ref struct SourceCodeHelper +{ + private StringBuilder m_StringBuilder; + + public SourceCodeHelper(StringBuilder sb) + { + m_StringBuilder = sb; + } + + public void Comments(string chars) => m_StringBuilder.Append("//").Append(chars).AppendLine(); + + public void Using(string @namespace) => m_StringBuilder.AppendFormat("using {0};", @namespace).AppendLine(); + + public SourceCodeScopeHelper Scope(string header, string tail = null) => new(m_StringBuilder, header, tail, 0); +} + +public ref struct SourceCodeLineHelper +{ + private StringBuilder m_StringBuilder; + private int m_Depth; + + public SourceCodeLineHelper(StringBuilder sb, int depth) + { + m_StringBuilder = sb; + m_Depth = depth; + } + + public void AppendLine() => AppendLine(string.Empty); + + public void AppendLine(string x) + { + m_StringBuilder.AppendFormat("{0}{1}", m_Depth > 0 ? new string('\t', m_Depth) : string.Empty, x).AppendLine(); + } + + public void Append(string x) + { + if (m_StringBuilder.Length == 0 || m_StringBuilder[m_StringBuilder.Length - 1] is '\r' or '\n') + { + m_StringBuilder.Append(m_Depth > 0 ? new string('\t', m_Depth) : string.Empty); + } + + m_StringBuilder.Append(x); + } +} + +public ref struct SourceCodeScopeHelper +{ + private StringBuilder m_StringBuilder; + private int m_Depth; + private string m_Tail; + + public bool IsValid => m_StringBuilder is not null; + + public SourceCodeScopeHelper(StringBuilder sb, string header, string tail, int depth) + { + m_StringBuilder = sb; + m_Depth = depth; + m_Tail = tail; + + if (header != null) + Line().AppendLine(header); + Line().AppendLine("{"); + m_Depth++; + } + + public SourceCodeLineHelper Line() => new(m_StringBuilder, m_Depth); + public void AppendLine(string x) => Line().AppendLine(x); + public void AppendLine() => Line().AppendLine(string.Empty); + public void Append(string x) => Line().Append(x); + + public SourceCodeScopeHelper Scope(string header = null, string tail = null) => + new(m_StringBuilder, header, tail, m_Depth); + + public void Dispose() + { + if (m_StringBuilder == null) return; + m_Depth--; + Line().AppendLine($"}}{m_Tail}"); + m_StringBuilder = null; + } +} diff --git a/Jolt.Tests.meta b/Jolt.Tests.meta deleted file mode 100644 index ed6ac82..0000000 --- a/Jolt.Tests.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d80118a596c24bf182f1686f00bdea19 -timeCreated: 1740961099 \ No newline at end of file diff --git a/Jolt.Tests/ExpectedCoverage.cs b/Jolt.Tests/ExpectedCoverage.cs deleted file mode 100644 index e55c27d..0000000 --- a/Jolt.Tests/ExpectedCoverage.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using NUnit.Framework; - -namespace Jolt.Tests -{ - public class ExpectedCoverageTests - { - /// - /// Method name prefixes to ignore in the coverage test for whatever reason. Ideally these wouldn't be - /// generated at all but clangsharppinvokegenerator doesn't support excluding methods by name. - /// - private static HashSet ignoreMethodNamePrefix = new() - { - "JPH_Matrix4x4", - "JPH_RMatrix4x4", - "JPH_Quat", - "JPH_Vec3", - }; - - [Test] - public void TestCoverage() - { - var methods = new HashSet(); - - foreach (var method in typeof(UnsafeBindings).GetMethods()) - { - if (ignoreMethodNamePrefix.Any(s => method.Name.StartsWith(s))) - { - continue; - } - - methods.Add(Regex.Replace(method.Name, "[0-9]", "")); // combine numbered variants like Create, Create2, Create3 - } - - foreach (var method in typeof(Bindings).GetMethods()) - { - methods.Remove(method.Name); - } - - Assert.IsEmpty(string.Join("\n", methods)); - } - } -} diff --git a/Jolt.Tests/ExpectedCoverage.cs.meta b/Jolt.Tests/ExpectedCoverage.cs.meta deleted file mode 100644 index 802bc69..0000000 --- a/Jolt.Tests/ExpectedCoverage.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 573cb574ce064ea3960c52f374cebb1e -timeCreated: 1742441202 \ No newline at end of file diff --git a/Jolt.Tests/ExpectedStructSizeTests.cs b/Jolt.Tests/ExpectedStructSizeTests.cs deleted file mode 100644 index c8ac603..0000000 --- a/Jolt.Tests/ExpectedStructSizeTests.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Linq; -using System.Reflection; -using NUnit.Framework; -using Unity.Collections.LowLevel.Unsafe; - -namespace Jolt.Tests -{ - public class ExpectedStructSizeTests - { - [Test] - public void TestStructLayout() - { - var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetName().Name == "Jolt"); - - Assert.IsNotNull(assembly, "Unable to find Jolt assembly"); - - foreach (var type in assembly.GetTypes()) - { - foreach (var attr in GetCustomAttributes(type)) - { - TestStructLayout(type, attr.Type); - } - } - } - - private static void TestStructLayout(Type actualType, Type expectType) - { - Assert.IsTrue(actualType.IsValueType, $"Expected {actualType} to be a value type"); - Assert.IsTrue(expectType.IsValueType, $"Expected {expectType} to be a value type"); - - // TODO generate JPH types with explicit layout - var isNotAutoLayout = actualType.IsLayoutSequential || actualType.IsExplicitLayout; - Assert.IsTrue(isNotAutoLayout, $"Expected {actualType} to have sequential or explicit layout"); - - var actualTypeSize = UnsafeUtility.SizeOf(actualType); - var expectTypeSize = UnsafeUtility.SizeOf(expectType); - - Assert.AreEqual(expectTypeSize, actualTypeSize, $"Expected {actualType} to be {expectTypeSize} bytes, actually {actualTypeSize} bytes"); - - var actualFields = actualType.GetFields(BindingFlags.Public | BindingFlags.NonPublic); - var expectFields = expectType.GetFields(BindingFlags.Public | BindingFlags.NonPublic); - - Assert.AreEqual(expectFields.Length, actualFields.Length, $"Expected {actualType} to have {expectFields.Length} fields, actually {actualFields.Length} fields"); - - for (var i = 0; i < actualFields.Length; i++) - { - var actualField = actualFields[i]; - var expectField = expectFields[i]; - - var actualFieldSize = UnsafeUtility.SizeOf(actualField.FieldType); - var expectFieldSize = UnsafeUtility.SizeOf(expectField.FieldType); - - Assert.AreEqual(actualFieldSize, expectFieldSize, $"Expected {actualType}.{actualField.Name} to be {expectFieldSize} bytes, actually {actualFieldSize} bytes"); - } - } - - private static T[] GetCustomAttributes(Type type) where T : Attribute - { - return type.GetCustomAttributes(typeof(ExpectedStructSizeAttribute), inherit: false) as T[]; - } - } -} diff --git a/Jolt.Tests/ExpectedStructSizeTests.cs.meta b/Jolt.Tests/ExpectedStructSizeTests.cs.meta deleted file mode 100644 index b34514f..0000000 --- a/Jolt.Tests/ExpectedStructSizeTests.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bf22cfb5fef84fe28defc42980684675 -timeCreated: 1740961196 \ No newline at end of file diff --git a/Jolt.Tests/Jolt.Tests.asmdef b/Jolt.Tests/Jolt.Tests.asmdef deleted file mode 100644 index d2324a2..0000000 --- a/Jolt.Tests/Jolt.Tests.asmdef +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Jolt.Tests", - "references": [ - "Jolt", - "Unity.Collections", - "Unity.Mathematics" - ], - "optionalUnityReferences": [ - "TestAssemblies" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [] -} \ No newline at end of file diff --git a/Jolt.Unity.meta b/Jolt.Unity.meta deleted file mode 100644 index 3f066ed..0000000 --- a/Jolt.Unity.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2809a8150fef46a18614390df7d2dee5 -timeCreated: 1717425461 \ No newline at end of file diff --git a/Jolt.Unity/Jolt.Unity.asmdef b/Jolt.Unity~/Jolt.Unity.asmdef similarity index 100% rename from Jolt.Unity/Jolt.Unity.asmdef rename to Jolt.Unity~/Jolt.Unity.asmdef diff --git a/Jolt.Unity/Jolt.Unity.asmdef.meta b/Jolt.Unity~/Jolt.Unity.asmdef.meta similarity index 100% rename from Jolt.Unity/Jolt.Unity.asmdef.meta rename to Jolt.Unity~/Jolt.Unity.asmdef.meta diff --git a/Jolt.Unity/JoltEditorInitialization.cs b/Jolt.Unity~/JoltEditorInitialization.cs similarity index 100% rename from Jolt.Unity/JoltEditorInitialization.cs rename to Jolt.Unity~/JoltEditorInitialization.cs diff --git a/Jolt.Unity/JoltEditorInitialization.cs.meta b/Jolt.Unity~/JoltEditorInitialization.cs.meta similarity index 100% rename from Jolt.Unity/JoltEditorInitialization.cs.meta rename to Jolt.Unity~/JoltEditorInitialization.cs.meta diff --git a/Jolt.Unity/JoltRuntimeInitialization.cs b/Jolt.Unity~/JoltRuntimeInitialization.cs similarity index 100% rename from Jolt.Unity/JoltRuntimeInitialization.cs rename to Jolt.Unity~/JoltRuntimeInitialization.cs diff --git a/Jolt.Unity/JoltRuntimeInitialization.cs.meta b/Jolt.Unity~/JoltRuntimeInitialization.cs.meta similarity index 100% rename from Jolt.Unity/JoltRuntimeInitialization.cs.meta rename to Jolt.Unity~/JoltRuntimeInitialization.cs.meta diff --git a/Jolt/.DS_Store b/Jolt/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ce28cb95e823e49f43f011ba5ab9f290e0fdd951 GIT binary patch literal 6148 zcmeHK%}T>S5T0$T-CBem6!aGGTCi1$6fYsxqZcE3P^pP2Z7|K2CN+mr$X#E^7x8(V z+1(y$E#5@h9hmuMcXkrygZ&u*V9q3H0@MJ2qY{>O(EK12CtZ?)o+%+R`Hc`_=tJUX z$!KY{nJ^3(2L2lZw0Ai;Ksz^(R_|Xw5?OENLHX98bv`)`vvkKooIzGSdzC^=VyeTFb9z0TZHO}E3ou$HF-Eka= zxQ{W)tHKp{kir0ZFqB>h&+7PEhw@jH_l<-(VFovi0ljs2b<+wr^%@2Y1HUpr=Yxex zXlu+B%A*5~YylAI86gFI>Ln=0(r9bU6=DR1sZ>Oj%5;mtR65REdY!E?SE$l~>E?s! zKQrB-F!^`|d1(CF(}I&>8upi04*MGm5^F;|E)DCQv`X)wkx@TUxX0kEx(v;Y7A literal 0 HcmV?d00001 diff --git a/Jolt/Bindings.meta b/Jolt/Bindings.meta index 6c69647..a46e6d0 100644 --- a/Jolt/Bindings.meta +++ b/Jolt/Bindings.meta @@ -1,3 +1,8 @@ -fileFormatVersion: 2 +fileFormatVersion: 2 guid: 876712de4e0546ad98291e03035fe4b6 -timeCreated: 1704838615 \ No newline at end of file +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Jolt/Bindings/JPH_AllowedDOFs.cs b/Jolt/Bindings/JPH_AllowedDOFs.cs new file mode 100644 index 0000000..595ac4f --- /dev/null +++ b/Jolt/Bindings/JPH_AllowedDOFs.cs @@ -0,0 +1,7 @@ +namespace Jolt +{ + public struct JPH_AllowedDOFs + { + + } +} diff --git a/Jolt/Bindings/JPH_AllowedDOFs.cs.meta b/Jolt/Bindings/JPH_AllowedDOFs.cs.meta new file mode 100644 index 0000000..15d4d5b --- /dev/null +++ b/Jolt/Bindings/JPH_AllowedDOFs.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 930443e209aa4b73b43d0bcfe03168af \ No newline at end of file diff --git a/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs b/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs new file mode 100644 index 0000000..f6df40d --- /dev/null +++ b/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs @@ -0,0 +1,7 @@ +namespace Jolt +{ + public struct JPH_SixDOFConstraintAxis + { + + } +} diff --git a/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs.meta b/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs.meta new file mode 100644 index 0000000..971f2c1 --- /dev/null +++ b/Jolt/Bindings/JPH_SixDOFConstraintAxis.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b6718d49518a49b89e50c95fbbb5bff1 \ No newline at end of file diff --git a/Jolt/Bindings/NativeTypeNameAttribute.cs b/Jolt/Bindings/NativeTypeNameAttribute.cs new file mode 100644 index 0000000..a7432a2 --- /dev/null +++ b/Jolt/Bindings/NativeTypeNameAttribute.cs @@ -0,0 +1,14 @@ +using System; + +namespace Jolt +{ + public class NativeTypeNameAttribute : Attribute + { + public readonly string Value; + + public NativeTypeNameAttribute(string value) + { + Value = value; + } + } +} diff --git a/Jolt/Bindings/NativeTypeNameAttribute.cs.meta b/Jolt/Bindings/NativeTypeNameAttribute.cs.meta new file mode 100644 index 0000000..c8458e6 --- /dev/null +++ b/Jolt/Bindings/NativeTypeNameAttribute.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c785b14f67f414fdaa50d89bb265e638 \ No newline at end of file diff --git a/Jolt/Bindings/UnsafeBindings.g.cs b/Jolt/Bindings/UnsafeBindings.cs similarity index 62% rename from Jolt/Bindings/UnsafeBindings.g.cs rename to Jolt/Bindings/UnsafeBindings.cs index 0011782..032454e 100644 --- a/Jolt/Bindings/UnsafeBindings.g.cs +++ b/Jolt/Bindings/UnsafeBindings.cs @@ -1,692 +1,970 @@ +using System; using System.Runtime.InteropServices; using Unity.Mathematics; namespace Jolt { - internal enum JPH_BodyManager_ShapeColor - { - JPH_BodyManager_ShapeColor_InstanceColor, - JPH_BodyManager_ShapeColor_ShapeTypeColor, - JPH_BodyManager_ShapeColor_MotionTypeColor, - JPH_BodyManager_ShapeColor_SleepColor, - JPH_BodyManager_ShapeColor_IslandColor, - JPH_BodyManager_ShapeColor_MaterialColor, - _JPH_BodyManager_ShapeColor_Count, - _JPH_BodyManager_ShapeColor_Force32 = 0x7FFFFFFF, + public partial struct JPH_BroadPhaseLayerInterface + { } - internal enum JPH_DebugRenderer_CastShadow + public partial struct JPH_ObjectVsBroadPhaseLayerFilter { - JPH_DebugRenderer_CastShadow_On = 0, - JPH_DebugRenderer_CastShadow_Off = 1, - _JPH_DebugRenderer_CastShadow_Count, - _JPH_DebugRenderer_CastShadow_Force32 = 0x7FFFFFFF, } - internal enum JPH_DebugRenderer_DrawMode + public partial struct JPH_ObjectLayerPairFilter { - JPH_DebugRenderer_DrawMode_Solid = 0, - JPH_DebugRenderer_DrawMode_Wireframe = 1, - _JPH_DebugRenderer_DrawMode_Count, - _JPH_DebugRenderer_DrawMode_Force32 = 0x7FFFFFFF, } - internal enum JPH_Mesh_Shape_BuildQuality + public partial struct JPH_BroadPhaseLayerFilter { - JPH_Mesh_Shape_BuildQuality_FavorRuntimePerformance = 0, - JPH_Mesh_Shape_BuildQuality_FavorBuildSpeed = 1, - _JPH_Mesh_Shape_BuildQuality_Count, - _JPH_Mesh_Shape_BuildQuality_Force32 = 0x7FFFFFFF, } - internal partial struct JPH_Plane + public partial struct JPH_ObjectLayerFilter { - [NativeTypeName("JPH_Vec3")] - public float3 normal; - - public float distance; } - internal partial struct JPH_AABox + public partial struct JPH_BodyFilter { - [NativeTypeName("JPH_Vec3")] - public float3 min; + } - [NativeTypeName("JPH_Vec3")] - public float3 max; + public partial struct JPH_ShapeFilter + { } - internal partial struct JPH_Triangle + public partial struct JPH_SimShapeFilter { - [NativeTypeName("JPH_Vec3")] - public float3 v1; + } - [NativeTypeName("JPH_Vec3")] - public float3 v2; + public partial struct JPH_PhysicsStepListener + { + } - [NativeTypeName("JPH_Vec3")] - public float3 v3; + public partial struct JPH_PhysicsSystem + { + } - public uint materialIndex; + public partial struct JPH_PhysicsMaterial + { } - internal partial struct JPH_IndexedTriangleNoMaterial + public partial struct JPH_ShapeSettings { - public uint i1; + } - public uint i2; + public partial struct JPH_ConvexShapeSettings + { + } - public uint i3; + public partial struct JPH_SphereShapeSettings + { } - internal partial struct JPH_IndexedTriangle + public partial struct JPH_BoxShapeSettings { - public uint i1; + } - public uint i2; + public partial struct JPH_PlaneShapeSettings + { + } - public uint i3; + public partial struct JPH_TriangleShapeSettings + { + } - public uint materialIndex; + public partial struct JPH_CapsuleShapeSettings + { + } - public uint userData; + public partial struct JPH_TaperedCapsuleShapeSettings + { } - internal partial struct JPH_MassProperties + public partial struct JPH_CylinderShapeSettings { - public float mass; + } - [NativeTypeName("JPH_Matrix4x4")] - public float4x4 inertia; + public partial struct JPH_TaperedCylinderShapeSettings + { } - internal partial struct JPH_CollideSettingsBase + public partial struct JPH_ConvexHullShapeSettings { - [NativeTypeName("JPH_ActiveEdgeMode")] - public ActiveEdgeMode activeEdgeMode; + } - [NativeTypeName("JPH_CollectFacesMode")] - public CollectFacesMode collectFacesMode; + public partial struct JPH_CompoundShapeSettings + { + } - public float collisionTolerance; + public partial struct JPH_StaticCompoundShapeSettings + { + } - public float penetrationTolerance; + public partial struct JPH_MutableCompoundShapeSettings + { + } - [NativeTypeName("JPH_Vec3")] - public float3 activeEdgeMovementDirection; + public partial struct JPH_MeshShapeSettings + { } - internal partial struct JPH_CollideShapeSettings + public partial struct JPH_HeightFieldShapeSettings { - public JPH_CollideSettingsBase @base; + } - public float maxSeparationDistance; + public partial struct JPH_RotatedTranslatedShapeSettings + { + } - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceMode; + public partial struct JPH_ScaledShapeSettings + { } - internal partial struct JPH_ShapeCastSettings + public partial struct JPH_OffsetCenterOfMassShapeSettings { - public JPH_CollideSettingsBase @base; + } - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceModeTriangles; + public partial struct JPH_EmptyShapeSettings + { + } - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceModeConvex; + public partial struct JPH_Shape + { + } - [NativeTypeName("bool")] - public NativeBool useShrunkenShapeAndConvexRadius; + public partial struct JPH_ConvexShape + { + } - [NativeTypeName("bool")] - public NativeBool returnDeepestPoint; + public partial struct JPH_SphereShape + { } - internal partial struct JPH_RayCastSettings + public partial struct JPH_BoxShape { - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceModeTriangles; + } - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceModeConvex; + public partial struct JPH_PlaneShape + { + } - [NativeTypeName("bool")] - public NativeBool treatConvexAsSolid; + public partial struct JPH_CapsuleShape + { } - internal partial struct JPH_SpringSettings + public partial struct JPH_CylinderShape { - [NativeTypeName("JPH_SpringMode")] - public SpringMode mode; + } - public float frequencyOrStiffness; + public partial struct JPH_TaperedCylinderShape + { + } - public float damping; + public partial struct JPH_TriangleShape + { } - internal partial struct JPH_MotorSettings + public partial struct JPH_TaperedCapsuleShape { - public JPH_SpringSettings springSettings; + } - public float minForceLimit; + public partial struct JPH_ConvexHullShape + { + } - public float maxForceLimit; + public partial struct JPH_CompoundShape + { + } - public float minTorqueLimit; + public partial struct JPH_StaticCompoundShape + { + } - public float maxTorqueLimit; + public partial struct JPH_MutableCompoundShape + { } - internal partial struct JPH_SubShapeIDPair + public partial struct JPH_MeshShape { - [NativeTypeName("JPH_BodyID")] - public BodyID Body1ID; + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID1; + public partial struct JPH_HeightFieldShape + { + } - [NativeTypeName("JPH_BodyID")] - public BodyID Body2ID; + public partial struct JPH_DecoratedShape + { + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID2; + public partial struct JPH_RotatedTranslatedShape + { } - internal partial struct JPH_BroadPhaseCastResult + public partial struct JPH_ScaledShape { - [NativeTypeName("JPH_BodyID")] - public BodyID bodyID; + } - public float fraction; + public partial struct JPH_OffsetCenterOfMassShape + { } - internal partial struct JPH_RayCastResult + public partial struct JPH_EmptyShape { - [NativeTypeName("JPH_BodyID")] - public BodyID bodyID; + } - public float fraction; + public partial struct JPH_BodyCreationSettings + { + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID2; + public partial struct JPH_SoftBodyCreationSettings + { } - internal partial struct JPH_CollidePointResult + public partial struct JPH_BodyInterface { - [NativeTypeName("JPH_BodyID")] - public BodyID bodyID; + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID2; + public partial struct JPH_BodyLockInterface + { } - internal unsafe partial struct JPH_CollideShapeResult + public partial struct JPH_BroadPhaseQuery { - [NativeTypeName("JPH_Vec3")] - public float3 contactPointOn1; + } - [NativeTypeName("JPH_Vec3")] - public float3 contactPointOn2; + public partial struct JPH_NarrowPhaseQuery + { + } - [NativeTypeName("JPH_Vec3")] - public float3 penetrationAxis; + public partial struct JPH_MotionProperties + { + } - public float penetrationDepth; + public partial struct JPH_Body + { + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID1; + public partial struct JPH_ContactListener + { + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID2; + public partial struct JPH_ContactManifold + { + } - [NativeTypeName("JPH_BodyID")] - public BodyID bodyID2; + public partial struct JPH_ContactSettings + { + } - public uint shape1FaceCount; + public partial struct JPH_GroupFilter + { + } - [NativeTypeName("JPH_Vec3 *")] - public float3* shape1Faces; + public partial struct JPH_GroupFilterTable + { + } - public uint shape2FaceCount; + [NativeTypeName("unsigned int")] + public enum JPH_PhysicsUpdateError : uint + { + None = 0, + ManifoldCacheFull = 1 << 0, + BodyPairCacheFull = 1 << 1, + ContactConstraintsFull = 1 << 2, + _JPH_PhysicsUpdateError_Count, + _JPH_PhysicsUpdateError_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_Vec3 *")] - public float3* shape2Faces; + [NativeTypeName("unsigned int")] + public enum JPH_BodyType : uint + { + Rigid = 0, + Soft = 1, + _JPH_BodyType_Count, + _JPH_BodyType_Force32 = 0x7fffffff, } - internal partial struct JPH_ShapeCastResult + [NativeTypeName("unsigned int")] + public enum JPH_MotionType : uint { - [NativeTypeName("JPH_Vec3")] - public float3 contactPointOn1; + Static = 0, + Kinematic = 1, + Dynamic = 2, + _JPH_MotionType_Count, + _JPH_MotionType_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_Vec3")] - public float3 contactPointOn2; + [NativeTypeName("unsigned int")] + public enum JPH_Activation : uint + { + Activate = 0, + DontActivate = 1, + _JPH_Activation_Count, + _JPH_Activation_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_Vec3")] - public float3 penetrationAxis; + [NativeTypeName("unsigned int")] + public enum JPH_ValidateResult : uint + { + AcceptAllContactsForThisBodyPair = 0, + AcceptContact = 1, + RejectContact = 2, + RejectAllContactsForThisBodyPair = 3, + _JPH_ValidateResult_Count, + _JPH_ValidateResult_Force32 = 0x7fffffff, + } - public float penetrationDepth; + [NativeTypeName("unsigned int")] + public enum JPH_ShapeType : uint + { + Convex = 0, + Compound = 1, + Decorated = 2, + Mesh = 3, + HeightField = 4, + SoftBody = 5, + User1 = 6, + User2 = 7, + User3 = 8, + User4 = 9, + _JPH_ShapeType_Count, + _JPH_ShapeType_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID1; + [NativeTypeName("unsigned int")] + public enum JPH_ShapeSubType : uint + { + Sphere = 0, + Box = 1, + Triangle = 2, + Capsule = 3, + TaperedCapsule = 4, + Cylinder = 5, + ConvexHull = 6, + StaticCompound = 7, + MutableCompound = 8, + RotatedTranslated = 9, + Scaled = 10, + OffsetCenterOfMass = 11, + Mesh = 12, + HeightField = 13, + SoftBody = 14, + _JPH_ShapeSubType_Count, + _JPH_ShapeSubType_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_SubShapeID")] - public uint subShapeID2; + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintType : uint + { + Constraint = 0, + TwoBodyConstraint = 1, + _JPH_ConstraintType_Count, + _JPH_ConstraintType_Force32 = 0x7fffffff, + } - [NativeTypeName("JPH_BodyID")] - public BodyID bodyID2; + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSubType : uint + { + Fixed = 0, + Point = 1, + Hinge = 2, + Slider = 3, + Distance = 4, + Cone = 5, + SwingTwist = 6, + SixDOF = 7, + Path = 8, + Vehicle = 9, + RackAndPinion = 10, + Gear = 11, + Pulley = 12, + User1 = 13, + User2 = 14, + User3 = 15, + User4 = 16, + _JPH_ConstraintSubType_Count, + _JPH_ConstraintSubType_Force32 = 0x7fffffff, + } - public float fraction; + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSpace : uint + { + LocalToBodyCOM = 0, + WorldSpace = 1, + _JPH_ConstraintSpace_Count, + _JPH_ConstraintSpace_Force32 = 0x7fffffff, + } - [NativeTypeName("bool")] - public NativeBool isBackFaceHit; + [NativeTypeName("unsigned int")] + public enum JPH_MotionQuality : uint + { + Discrete = 0, + LinearCast = 1, + _JPH_MotionQuality_Count, + _JPH_MotionQuality_Force32 = 0x7fffffff, } - internal partial struct JPH_DrawSettings + [NativeTypeName("unsigned int")] + public enum JPH_OverrideMassProperties : uint { - [NativeTypeName("bool")] - public NativeBool drawGetSupportFunction; + CalculateMassAndInertia, + CalculateInertia, + MassAndInertiaProvided, + _JPH_JPH_OverrideMassProperties_Count, + _JPH_JPH_OverrideMassProperties_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawSupportDirection; + [NativeTypeName("unsigned int")] + public enum JPH_GroundState : uint + { + OnGround = 0, + OnSteepGround = 1, + NotSupported = 2, + InAir = 3, + _JPH_GroundState_Count, + _JPH_GroundState_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawGetSupportingFace; + [NativeTypeName("unsigned int")] + public enum JPH_BackFaceMode : uint + { + IgnoreBackFaces, + CollideWithBackFaces, + _JPH_BackFaceMode_Count, + _JPH_BackFaceMode_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawShape; + [NativeTypeName("unsigned int")] + public enum JPH_ActiveEdgeMode : uint + { + CollideOnlyWithActive, + CollideWithAll, + _JPH_ActiveEdgeMode_Count, + _JPH_ActiveEdgeMode_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawShapeWireframe; + [NativeTypeName("unsigned int")] + public enum JPH_CollectFacesMode : uint + { + CollectFaces, + NoFaces, + _JPH_CollectFacesMode_Count, + _JPH_CollectFacesMode_Force32 = 0x7FFFFFFF, + } - public JPH_BodyManager_ShapeColor drawShapeColor; + [NativeTypeName("unsigned int")] + public enum JPH_MotorState : uint + { + Off = 0, + Velocity = 1, + Position = 2, + _JPH_MotorState_Count, + _JPH_MotorState_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawBoundingBox; + [NativeTypeName("unsigned int")] + public enum JPH_CollisionCollectorType : uint + { + AllHit = 0, + AllHitSorted = 1, + ClosestHit = 2, + AnyHit = 3, + _JPH_CollisionCollectorType_Count, + _JPH_CollisionCollectorType_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawCenterOfMassTransform; + [NativeTypeName("unsigned int")] + public enum JPH_SwingType : uint + { + Cone, + Pyramid, + _JPH_SwingType_Count, + _JPH_SwingType_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawWorldTransform; + [NativeTypeName("unsigned int")] + public enum JPH_SpringMode : uint + { + FrequencyAndDamping = 0, + StiffnessAndDamping = 1, + _JPH_SpringMode_Count, + _JPH_SpringMode_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawVelocity; + [NativeTypeName("unsigned int")] + public enum JPH_SoftBodyConstraintColor : uint + { + ConstraintType, + ConstraintGroup, + ConstraintOrder, + _JPH_SoftBodyConstraintColor_Count, + _JPH_SoftBodyConstraintColor_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawMassAndInertia; + [NativeTypeName("unsigned int")] + public enum JPH_BodyManager_ShapeColor : uint + { + InstanceColor, + ShapeTypeColor, + MotionTypeColor, + SleepColor, + IslandColor, + MaterialColor, + _JPH_BodyManager_ShapeColor_Count, + _JPH_BodyManager_ShapeColor_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawSleepStats; + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_CastShadow : uint + { + On = 0, + Off = 1, + _JPH_DebugRenderer_CastShadow_Count, + _JPH_DebugRenderer_CastShadow_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawSoftBodyVertices; + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_DrawMode : uint + { + Solid = 0, + Wireframe = 1, + _JPH_DebugRenderer_DrawMode_Count, + _JPH_DebugRenderer_DrawMode_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawSoftBodyVertexVelocities; + [NativeTypeName("unsigned int")] + public enum JPH_Mesh_Shape_BuildQuality : uint + { + FavorRuntimePerformance = 0, + FavorBuildSpeed = 1, + _JPH_Mesh_Shape_BuildQuality_Count, + _JPH_Mesh_Shape_BuildQuality_Force32 = 0x7FFFFFFF, + } - [NativeTypeName("bool")] - public NativeBool drawSoftBodyEdgeConstraints; - - [NativeTypeName("bool")] - public NativeBool drawSoftBodyBendConstraints; - - [NativeTypeName("bool")] - public NativeBool drawSoftBodyVolumeConstraints; - - [NativeTypeName("bool")] - public NativeBool drawSoftBodySkinConstraints; - - [NativeTypeName("bool")] - public NativeBool drawSoftBodyLRAConstraints; - - [NativeTypeName("bool")] - public NativeBool drawSoftBodyPredictedBounds; - - [NativeTypeName("JPH_SoftBodyConstraintColor")] - public SoftBodyConstraintColor drawSoftBodyConstraintColor; + [NativeTypeName("unsigned int")] + public enum JPH_TransmissionMode : uint + { + Auto = 0, + Manual = 1, + _JPH_TransmissionMode_Count, + _JPH_TransmissionMode_Force32 = 0x7FFFFFFF, } - internal partial struct JPH_SupportingFace + public partial struct JPH_Plane { - public uint count; + [NativeTypeName("JPH_Vec3")] + public float3 normal; - [NativeTypeName("JPH_Vec3[32]")] - public _vertices_e__FixedBuffer vertices; + public float distance; + } - public partial struct _vertices_e__FixedBuffer - { - public float3 e0; - public float3 e1; - public float3 e2; - public float3 e3; - public float3 e4; - public float3 e5; - public float3 e6; - public float3 e7; - public float3 e8; - public float3 e9; - public float3 e10; - public float3 e11; - public float3 e12; - public float3 e13; - public float3 e14; - public float3 e15; - public float3 e16; - public float3 e17; - public float3 e18; - public float3 e19; - public float3 e20; - public float3 e21; - public float3 e22; - public float3 e23; - public float3 e24; - public float3 e25; - public float3 e26; - public float3 e27; - public float3 e28; - public float3 e29; - public float3 e30; - public float3 e31; + public partial struct JPH_AABox + { + [NativeTypeName("JPH_Vec3")] + public float3 min; - public unsafe ref float3 this[int index] - { - get - { - fixed (float3* pThis = &e0) - { - return ref pThis[index]; - } - } - } - } + [NativeTypeName("JPH_Vec3")] + public float3 max; } - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_CastRayResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_RayCastBodyResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + public partial struct JPH_Triangle + { + [NativeTypeName("JPH_Vec3")] + public float3 v1; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal delegate void JPH_CollideShapeBodyResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_BodyID")] BodyID result); + [NativeTypeName("JPH_Vec3")] + public float3 v2; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_CollidePointResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + [NativeTypeName("JPH_Vec3")] + public float3 v3; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_CollideShapeResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + [NativeTypeName("uint32_t")] + public uint materialIndex; + } - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_CastShapeResultCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + public partial struct JPH_IndexedTriangleNoMaterial + { + [NativeTypeName("uint32_t")] + public uint i1; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate float JPH_CastRayCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + [NativeTypeName("uint32_t")] + public uint i2; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate float JPH_RayCastBodyCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + [NativeTypeName("uint32_t")] + public uint i3; + } - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal delegate float JPH_CollideShapeBodyCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_BodyID")] BodyID result); + public partial struct JPH_IndexedTriangle + { + [NativeTypeName("uint32_t")] + public uint i1; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate float JPH_CollidePointCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + [NativeTypeName("uint32_t")] + public uint i2; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate float JPH_CollideShapeCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + [NativeTypeName("uint32_t")] + public uint i3; - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate float JPH_CastShapeCollectorCallback([NativeTypeName("void*")] nint context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + [NativeTypeName("uint32_t")] + public uint materialIndex; - internal partial struct JPH_BroadPhaseLayerInterface - { + [NativeTypeName("uint32_t")] + public uint userData; } - internal partial struct JPH_ObjectVsBroadPhaseLayerFilter + public partial struct JPH_MassProperties { - } + public float mass; - internal partial struct JPH_ObjectLayerPairFilter - { + [NativeTypeName("JPH_Matrix4x4")] + public float4x4 inertia; } - internal partial struct JPH_BroadPhaseLayerFilter + public partial struct JPH_CollideSettingsBase { - } + public JPH_ActiveEdgeMode activeEdgeMode; - internal partial struct JPH_ObjectLayerFilter - { - } + public JPH_CollectFacesMode collectFacesMode; - internal partial struct JPH_BodyFilter - { - } + public float collisionTolerance; - internal partial struct JPH_ShapeFilter - { - } + public float penetrationTolerance; - internal partial struct JPH_SimShapeFilter - { + [NativeTypeName("JPH_Vec3")] + public float3 activeEdgeMovementDirection; } - internal partial struct JPH_PhysicsSystem + public partial struct JPH_CollideShapeSettings { - } + public JPH_CollideSettingsBase @base; - internal partial struct JPH_PhysicsMaterial - { - } + public float maxSeparationDistance; - internal partial struct JPH_ShapeSettings - { + public JPH_BackFaceMode backFaceMode; } - internal partial struct JPH_ConvexShapeSettings + public partial struct JPH_ShapeCastSettings { - } + public JPH_CollideSettingsBase @base; - internal partial struct JPH_SphereShapeSettings - { - } + public JPH_BackFaceMode backFaceModeTriangles; - internal partial struct JPH_BoxShapeSettings - { - } + public JPH_BackFaceMode backFaceModeConvex; - internal partial struct JPH_PlaneShapeSettings - { - } + [NativeTypeName("bool")] + public byte useShrunkenShapeAndConvexRadius; - internal partial struct JPH_TriangleShapeSettings - { + [NativeTypeName("bool")] + public byte returnDeepestPoint; } - internal partial struct JPH_CapsuleShapeSettings + public partial struct JPH_RayCastSettings { - } + public JPH_BackFaceMode backFaceModeTriangles; - internal partial struct JPH_TaperedCapsuleShapeSettings - { - } + public JPH_BackFaceMode backFaceModeConvex; - internal partial struct JPH_CylinderShapeSettings - { + [NativeTypeName("bool")] + public byte treatConvexAsSolid; } - internal partial struct JPH_TaperedCylinderShapeSettings + public partial struct JPH_SpringSettings { - } + public JPH_SpringMode mode; - internal partial struct JPH_ConvexHullShapeSettings - { - } + public float frequencyOrStiffness; - internal partial struct JPH_CompoundShapeSettings - { + public float damping; } - internal partial struct JPH_StaticCompoundShapeSettings + public partial struct JPH_MotorSettings { - } + public JPH_SpringSettings springSettings; - internal partial struct JPH_MutableCompoundShapeSettings - { - } + public float minForceLimit; - internal partial struct JPH_MeshShapeSettings - { - } + public float maxForceLimit; - internal partial struct JPH_HeightFieldShapeSettings - { - } + public float minTorqueLimit; - internal partial struct JPH_RotatedTranslatedShapeSettings - { + public float maxTorqueLimit; } - internal partial struct JPH_ScaledShapeSettings + public partial struct JPH_SubShapeIDPair { - } + [NativeTypeName("JPH_BodyID")] + public uint Body1ID; - internal partial struct JPH_OffsetCenterOfMassShapeSettings - { - } + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; - internal partial struct JPH_EmptyShapeSettings - { - } + [NativeTypeName("JPH_BodyID")] + public uint Body2ID; - internal partial struct JPH_Shape - { + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; } - internal partial struct JPH_ConvexShape + public partial struct JPH_BroadPhaseCastResult { - } + [NativeTypeName("JPH_BodyID")] + public uint bodyID; - internal partial struct JPH_SphereShape - { + public float fraction; } - internal partial struct JPH_BoxShape + public partial struct JPH_RayCastResult { - } + [NativeTypeName("JPH_BodyID")] + public uint bodyID; - internal partial struct JPH_PlaneShape - { - } + public float fraction; - internal partial struct JPH_CapsuleShape - { + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; } - internal partial struct JPH_CylinderShape + public partial struct JPH_CollidePointResult { - } + [NativeTypeName("JPH_BodyID")] + public uint bodyID; - internal partial struct JPH_TaperedCylinderShape - { + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; } - internal partial struct JPH_TriangleShape + public unsafe partial struct JPH_CollideShapeResult { - } + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; - internal partial struct JPH_TaperedCapsuleShape - { - } + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; - internal partial struct JPH_ConvexHullShape - { - } + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; - internal partial struct JPH_CompoundShape - { - } + public float penetrationDepth; - internal partial struct JPH_StaticCompoundShape - { - } + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; - internal partial struct JPH_MutableCompoundShape - { - } + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; - internal partial struct JPH_MeshShape - { - } + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; - internal partial struct JPH_HeightFieldShape - { - } + [NativeTypeName("uint32_t")] + public uint shape1FaceCount; - internal partial struct JPH_DecoratedShape - { - } + [NativeTypeName("JPH_Vec3 *")] + public float3* shape1Faces; - internal partial struct JPH_RotatedTranslatedShape - { - } + [NativeTypeName("uint32_t")] + public uint shape2FaceCount; - internal partial struct JPH_ScaledShape - { + [NativeTypeName("JPH_Vec3 *")] + public float3* shape2Faces; } - internal partial struct JPH_OffsetCenterOfMassShape + public partial struct JPH_ShapeCastResult { - } + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; - internal partial struct JPH_EmptyShape - { - } + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; - internal partial struct JPH_BodyCreationSettings - { - } + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; - internal partial struct JPH_SoftBodyCreationSettings - { - } + public float penetrationDepth; - internal partial struct JPH_BodyInterface - { - } + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; - internal partial struct JPH_BodyLockInterface - { + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; + + public float fraction; + + [NativeTypeName("bool")] + public byte isBackFaceHit; } - internal partial struct JPH_BroadPhaseQuery + public partial struct JPH_DrawSettings { - } + [NativeTypeName("bool")] + public byte drawGetSupportFunction; - internal partial struct JPH_NarrowPhaseQuery - { - } + [NativeTypeName("bool")] + public byte drawSupportDirection; - internal partial struct JPH_MotionProperties - { - } + [NativeTypeName("bool")] + public byte drawGetSupportingFace; - internal partial struct JPH_Body - { - } + [NativeTypeName("bool")] + public byte drawShape; - internal partial struct JPH_ContactListener - { + [NativeTypeName("bool")] + public byte drawShapeWireframe; + + public JPH_BodyManager_ShapeColor drawShapeColor; + + [NativeTypeName("bool")] + public byte drawBoundingBox; + + [NativeTypeName("bool")] + public byte drawCenterOfMassTransform; + + [NativeTypeName("bool")] + public byte drawWorldTransform; + + [NativeTypeName("bool")] + public byte drawVelocity; + + [NativeTypeName("bool")] + public byte drawMassAndInertia; + + [NativeTypeName("bool")] + public byte drawSleepStats; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertices; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertexVelocities; + + [NativeTypeName("bool")] + public byte drawSoftBodyEdgeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyBendConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyVolumeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodySkinConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyLRAConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyPredictedBounds; + + public JPH_SoftBodyConstraintColor drawSoftBodyConstraintColor; } - internal partial struct JPH_ContactManifold + public partial struct JPH_SupportingFace { + [NativeTypeName("uint32_t")] + public uint count; + + [NativeTypeName("JPH_Vec3[32]")] + public _vertices_e__FixedBuffer vertices; + + public partial struct _vertices_e__FixedBuffer + { + public float3 e0; + public float3 e1; + public float3 e2; + public float3 e3; + public float3 e4; + public float3 e5; + public float3 e6; + public float3 e7; + public float3 e8; + public float3 e9; + public float3 e10; + public float3 e11; + public float3 e12; + public float3 e13; + public float3 e14; + public float3 e15; + public float3 e16; + public float3 e17; + public float3 e18; + public float3 e19; + public float3 e20; + public float3 e21; + public float3 e22; + public float3 e23; + public float3 e24; + public float3 e25; + public float3 e26; + public float3 e27; + public float3 e28; + public float3 e29; + public float3 e30; + public float3 e31; + + public unsafe ref float3 this[int index] + { + get + { + fixed (float3* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } } - internal partial struct JPH_ContactSettings + public unsafe partial struct JPH_CollisionGroup { + [NativeTypeName("const JPH_GroupFilter *")] + public JPH_GroupFilter* groupFilter; + + [NativeTypeName("JPH_CollisionGroupID")] + public uint groupID; + + [NativeTypeName("JPH_CollisionSubGroupID")] + public uint subGroupID; } - internal partial struct JPH_CollisionEstimationResultImpulse + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastRayResultCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_RayCastBodyResultCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeBodyResultCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollidePointResultCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeResultCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastShapeResultCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastRayCollectorCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_RayCastBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollidePointCollectorCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeCollectorCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastShapeCollectorCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + public partial struct JPH_CollisionEstimationResultImpulse { public float contactImpulse; @@ -695,7 +973,7 @@ internal partial struct JPH_CollisionEstimationResultImpulse public float frictionImpulse2; } - internal unsafe partial struct JPH_CollisionEstimationResult + public unsafe partial struct JPH_CollisionEstimationResult { [NativeTypeName("JPH_Vec3")] public float3 linearVelocity1; @@ -715,112 +993,116 @@ internal unsafe partial struct JPH_CollisionEstimationResult [NativeTypeName("JPH_Vec3")] public float3 tangent2; + [NativeTypeName("uint32_t")] public uint impulseCount; public JPH_CollisionEstimationResultImpulse* impulses; } - internal partial struct JPH_BodyActivationListener + public partial struct JPH_BodyActivationListener { } - internal partial struct JPH_BodyDrawFilter + public partial struct JPH_BodyDrawFilter { } - internal partial struct JPH_SharedMutex + public partial struct JPH_SharedMutex { } - internal partial struct JPH_DebugRenderer + public partial struct JPH_DebugRenderer { } - internal partial struct JPH_Constraint + public partial struct JPH_Constraint { } - internal partial struct JPH_TwoBodyConstraint + public partial struct JPH_TwoBodyConstraint { } - internal partial struct JPH_FixedConstraint + public partial struct JPH_FixedConstraint { } - internal partial struct JPH_DistanceConstraint + public partial struct JPH_DistanceConstraint { } - internal partial struct JPH_PointConstraint + public partial struct JPH_PointConstraint { } - internal partial struct JPH_HingeConstraint + public partial struct JPH_HingeConstraint { } - internal partial struct JPH_SliderConstraint + public partial struct JPH_SliderConstraint { } - internal partial struct JPH_ConeConstraint + public partial struct JPH_ConeConstraint { } - internal partial struct JPH_SwingTwistConstraint + public partial struct JPH_SwingTwistConstraint { } - internal partial struct JPH_SixDOFConstraint + public partial struct JPH_SixDOFConstraint { } - internal partial struct JPH_GearConstraint + public partial struct JPH_GearConstraint { } - internal partial struct JPH_CharacterBase + public partial struct JPH_CharacterBase { } - internal partial struct JPH_Character + public partial struct JPH_Character { } - internal partial struct JPH_CharacterVirtual + public partial struct JPH_CharacterVirtual { } - internal partial struct JPH_CharacterContactListener + public partial struct JPH_CharacterContactListener { } - internal partial struct JPH_CharacterVsCharacterCollision + public partial struct JPH_CharacterVsCharacterCollision { } - internal partial struct JPH_Skeleton + public partial struct JPH_Skeleton { } - internal partial struct JPH_RagdollSettings + public partial struct JPH_RagdollSettings { } - internal partial struct JPH_Ragdoll + public partial struct JPH_Ragdoll { } - internal partial struct JPH_ConstraintSettings + public partial struct JPH_ConstraintSettings { [NativeTypeName("bool")] - public NativeBool enabled; + public byte enabled; + [NativeTypeName("uint32_t")] public uint constraintPriority; + [NativeTypeName("uint32_t")] public uint numVelocityStepsOverride; + [NativeTypeName("uint32_t")] public uint numPositionStepsOverride; public float drawConstraintSize; @@ -829,15 +1111,14 @@ internal partial struct JPH_ConstraintSettings public ulong userData; } - internal partial struct JPH_FixedConstraintSettings + public partial struct JPH_FixedConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("bool")] - public NativeBool autoDetectPoint; + public byte autoDetectPoint; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -858,12 +1139,11 @@ internal partial struct JPH_FixedConstraintSettings public float3 axisY2; } - internal partial struct JPH_DistanceConstraintSettings + public partial struct JPH_DistanceConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -878,12 +1158,11 @@ internal partial struct JPH_DistanceConstraintSettings public JPH_SpringSettings limitsSpringSettings; } - internal partial struct JPH_PointConstraintSettings + public partial struct JPH_PointConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -892,12 +1171,11 @@ internal partial struct JPH_PointConstraintSettings public rvec3 point2; } - internal partial struct JPH_HingeConstraintSettings + public partial struct JPH_HingeConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -928,15 +1206,14 @@ internal partial struct JPH_HingeConstraintSettings public JPH_MotorSettings motorSettings; } - internal partial struct JPH_SliderConstraintSettings + public partial struct JPH_SliderConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("bool")] - public NativeBool autoDetectPoint; + public byte autoDetectPoint; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -967,12 +1244,11 @@ internal partial struct JPH_SliderConstraintSettings public JPH_MotorSettings motorSettings; } - internal partial struct JPH_ConeConstraintSettings + public partial struct JPH_ConeConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 point1; @@ -989,12 +1265,11 @@ internal partial struct JPH_ConeConstraintSettings public float halfConeAngle; } - internal partial struct JPH_SwingTwistConstraintSettings + public partial struct JPH_SwingTwistConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 position1; @@ -1014,8 +1289,7 @@ internal partial struct JPH_SwingTwistConstraintSettings [NativeTypeName("JPH_Vec3")] public float3 planeAxis2; - [NativeTypeName("JPH_SwingType")] - public SwingType swingType; + public JPH_SwingType swingType; public float normalHalfConeAngle; @@ -1032,12 +1306,11 @@ internal partial struct JPH_SwingTwistConstraintSettings public JPH_MotorSettings twistMotorSettings; } - internal unsafe partial struct JPH_SixDOFConstraintSettings + public unsafe partial struct JPH_SixDOFConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_RVec3")] public rvec3 position1; @@ -1060,8 +1333,7 @@ internal unsafe partial struct JPH_SixDOFConstraintSettings [NativeTypeName("float[6]")] public fixed float maxFriction[6]; - [NativeTypeName("JPH_SwingType")] - public SwingType swingType; + public JPH_SwingType swingType; [NativeTypeName("float[6]")] public fixed float limitMin[6]; @@ -1115,12 +1387,11 @@ public unsafe ref JPH_MotorSettings this[int index] } } - internal partial struct JPH_GearConstraintSettings + public partial struct JPH_GearConstraintSettings { public JPH_ConstraintSettings @base; - [NativeTypeName("JPH_ConstraintSpace")] - public ConstraintSpace space; + public JPH_ConstraintSpace space; [NativeTypeName("JPH_Vec3")] public float3 hingeAxis1; @@ -1131,7 +1402,7 @@ internal partial struct JPH_GearConstraintSettings public float ratio; } - internal unsafe partial struct JPH_BodyLockRead + public unsafe partial struct JPH_BodyLockRead { [NativeTypeName("const JPH_BodyLockInterface *")] public JPH_BodyLockInterface* lockInterface; @@ -1142,7 +1413,7 @@ internal unsafe partial struct JPH_BodyLockRead public JPH_Body* body; } - internal unsafe partial struct JPH_BodyLockWrite + public unsafe partial struct JPH_BodyLockWrite { [NativeTypeName("const JPH_BodyLockInterface *")] public JPH_BodyLockInterface* lockInterface; @@ -1152,15 +1423,15 @@ internal unsafe partial struct JPH_BodyLockWrite public JPH_Body* body; } - internal partial struct JPH_BodyLockMultiRead + public partial struct JPH_BodyLockMultiRead { } - internal partial struct JPH_BodyLockMultiWrite + public partial struct JPH_BodyLockMultiWrite { } - internal partial struct JPH_ExtendedUpdateSettings + public partial struct JPH_ExtendedUpdateSettings { [NativeTypeName("JPH_Vec3")] public float3 stickToFloorStepDown; @@ -1178,7 +1449,7 @@ internal partial struct JPH_ExtendedUpdateSettings public float3 walkStairsStepDownExtra; } - internal unsafe partial struct JPH_CharacterBaseSettings + public unsafe partial struct JPH_CharacterBaseSettings { [NativeTypeName("JPH_Vec3")] public float3 up; @@ -1188,18 +1459,18 @@ internal unsafe partial struct JPH_CharacterBaseSettings public float maxSlopeAngle; [NativeTypeName("bool")] - public NativeBool enhancedInternalEdgeRemoval; + public byte enhancedInternalEdgeRemoval; [NativeTypeName("const JPH_Shape *")] public JPH_Shape* shape; } - internal partial struct JPH_CharacterSettings + public partial struct JPH_CharacterSettings { public JPH_CharacterBaseSettings @base; [NativeTypeName("JPH_ObjectLayer")] - public ObjectLayer layer; + public uint layer; public float mass; @@ -1207,11 +1478,10 @@ internal partial struct JPH_CharacterSettings public float gravityFactor; - [NativeTypeName("JPH_AllowedDOFs")] - public AllowedDOFs allowedDOFs; + public JPH_AllowedDOFs allowedDOFs; } - internal unsafe partial struct JPH_CharacterVirtualSettings + public unsafe partial struct JPH_CharacterVirtualSettings { public JPH_CharacterBaseSettings @base; @@ -1225,13 +1495,14 @@ internal unsafe partial struct JPH_CharacterVirtualSettings [NativeTypeName("JPH_Vec3")] public float3 shapeOffset; - [NativeTypeName("JPH_BackFaceMode")] - public BackFaceMode backFaceMode; + public JPH_BackFaceMode backFaceMode; public float predictiveContactDistance; + [NativeTypeName("uint32_t")] public uint maxCollisionIterations; + [NativeTypeName("uint32_t")] public uint maxConstraintIterations; public float minTimeRemaining; @@ -1240,6 +1511,7 @@ internal unsafe partial struct JPH_CharacterVirtualSettings public float characterPadding; + [NativeTypeName("uint32_t")] public uint maxNumHits; public float hitReductionCosMaxAngle; @@ -1250,28 +1522,28 @@ internal unsafe partial struct JPH_CharacterVirtualSettings public JPH_Shape* innerBodyShape; [NativeTypeName("JPH_BodyID")] - public BodyID innerBodyIDOverride; + public uint innerBodyIDOverride; [NativeTypeName("JPH_ObjectLayer")] - public ObjectLayer innerBodyLayer; + public uint innerBodyLayer; } - internal partial struct JPH_CharacterContactSettings + public partial struct JPH_CharacterContactSettings { [NativeTypeName("bool")] - public NativeBool canPushCharacter; + public byte canPushCharacter; [NativeTypeName("bool")] - public NativeBool canReceiveImpulses; + public byte canReceiveImpulses; } - internal unsafe partial struct JPH_CharacterVirtualContact + public unsafe partial struct JPH_CharacterVirtualContact { [NativeTypeName("uint64_t")] public ulong hash; [NativeTypeName("JPH_BodyID")] - public BodyID bodyB; + public uint bodyB; [NativeTypeName("JPH_CharacterID")] public uint characterIDB; @@ -1295,11 +1567,10 @@ internal unsafe partial struct JPH_CharacterVirtualContact public float fraction; - [NativeTypeName("JPH_MotionType")] - public MotionType motionTypeB; + public JPH_MotionType motionTypeB; [NativeTypeName("bool")] - public NativeBool isSensorB; + public byte isSensorB; [NativeTypeName("const JPH_CharacterVirtual *")] public JPH_CharacterVirtual* characterB; @@ -1311,71 +1582,78 @@ internal unsafe partial struct JPH_CharacterVirtualContact public JPH_PhysicsMaterial* material; [NativeTypeName("bool")] - public NativeBool hadCollision; + public byte hadCollision; [NativeTypeName("bool")] - public NativeBool wasDiscarded; + public byte wasDiscarded; [NativeTypeName("bool")] - public NativeBool canPushCharacter; + public byte canPushCharacter; } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_TraceFunc([NativeTypeName("const char *")] sbyte* mssage); + public unsafe delegate void JPH_TraceFunc([NativeTypeName("const char *")] sbyte* message); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - [return: NativeTypeName("bool")] - internal unsafe delegate NativeBool JPH_AssertFailureFunc([NativeTypeName("const char *")] sbyte* expression, [NativeTypeName("const char *")] sbyte* mssage, [NativeTypeName("const char *")] sbyte* file, uint line); + public unsafe delegate bool JPH_AssertFailureFunc([NativeTypeName("const char *")] sbyte* expression, [NativeTypeName("const char *")] sbyte* message, [NativeTypeName("const char *")] sbyte* file, [NativeTypeName("uint32_t")] uint line); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal delegate void JPH_JobFunction([NativeTypeName("void*")] nint arg); + public unsafe delegate void JPH_JobFunction(void* arg); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal delegate void JPH_QueueJobCallback([NativeTypeName("void*")] nint context, [NativeTypeName("JPH_JobFunction *")] nint job, [NativeTypeName("void*")] nint arg); + public unsafe delegate void JPH_QueueJobCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void* arg); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - internal unsafe delegate void JPH_QueueJobsCallback([NativeTypeName("void*")] nint context, [NativeTypeName("JPH_JobFunction *")] nint job, [NativeTypeName("void **")] nint* args, uint count); + public unsafe delegate void JPH_QueueJobsCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void** args, [NativeTypeName("uint32_t")] uint count); - internal partial struct JPH_JobSystemThreadPoolConfig + public partial struct JobSystemThreadPoolConfig { + [NativeTypeName("uint32_t")] public uint maxJobs; + [NativeTypeName("uint32_t")] public uint maxBarriers; [NativeTypeName("int32_t")] public int numThreads; } - internal partial struct JPH_JobSystemConfig + public unsafe partial struct JPH_JobSystemConfig { - [NativeTypeName("void*")] - public nint context; + public void* context; [NativeTypeName("JPH_QueueJobCallback *")] - public nint queueJob; + public IntPtr queueJob; [NativeTypeName("JPH_QueueJobsCallback *")] - public nint queueJobs; + public IntPtr queueJobs; + [NativeTypeName("uint32_t")] public uint maxConcurrency; + [NativeTypeName("uint32_t")] public uint maxBarriers; } - internal partial struct JPH_JobSystem + public partial struct JPH_JobSystem { } - internal unsafe partial struct JPH_PhysicsSystemSettings + public unsafe partial struct JPH_PhysicsSystemSettings { + [NativeTypeName("uint32_t")] public uint maxBodies; + [NativeTypeName("uint32_t")] public uint numBodyMutexes; + [NativeTypeName("uint32_t")] public uint maxBodyPairs; + [NativeTypeName("uint32_t")] public uint maxContactConstraints; + [NativeTypeName("uint32_t")] public uint _padding; public JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface; @@ -1385,7 +1663,7 @@ internal unsafe partial struct JPH_PhysicsSystemSettings public JPH_ObjectVsBroadPhaseLayerFilter* objectVsBroadPhaseLayerFilter; } - internal partial struct JPH_PhysicsSettings + public partial struct JPH_PhysicsSettings { public int maxInFlightBodyPairs; @@ -1409,2893 +1687,3789 @@ internal partial struct JPH_PhysicsSettings public float bodyPairCacheMaxDeltaPositionSq; - public float bodyPairCacheCosMaxDeltaRotationDiv2; + public float bodyPairCacheCosMaxDeltaRotationDiv2; + + public float contactNormalCosMaxDeltaRotation; + + public float contactPointPreserveLambdaMaxDistSq; + + [NativeTypeName("uint32_t")] + public uint numVelocitySteps; + + [NativeTypeName("uint32_t")] + public uint numPositionSteps; + + public float minVelocityForRestitution; + + public float timeBeforeSleep; + + public float pointVelocitySleepThreshold; + + [NativeTypeName("bool")] + public byte deterministicSimulation; + + [NativeTypeName("bool")] + public byte constraintWarmStart; + + [NativeTypeName("bool")] + public byte useBodyPairContactCache; + + [NativeTypeName("bool")] + public byte useManifoldReduction; + + [NativeTypeName("bool")] + public byte useLargeIslandSplitter; + + [NativeTypeName("bool")] + public byte allowSleeping; + + [NativeTypeName("bool")] + public byte checkActiveEdges; + } + + public unsafe partial struct JPH_PhysicsStepListenerContext + { + public float deltaTime; + + [NativeTypeName("JPH_Bool")] + public uint isFirstStep; + + [NativeTypeName("JPH_Bool")] + public uint isLastStep; + + public JPH_PhysicsSystem* physicsSystem; + } + + public partial struct JPH_PhysicsStepListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_PhysicsStepListenerContext *)")] + public IntPtr OnStep; + } + + public partial struct JPH_BroadPhaseLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BroadPhaseLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ObjectLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_ObjectLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_BodyFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BodyID)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldCollideLocked; + } + + public partial struct JPH_ShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide2; + } + + public partial struct JPH_SimShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ContactListener_Procs + { + [NativeTypeName("JPH_ValidateResult (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_RVec3 *, const JPH_CollideShapeResult *)")] + public IntPtr OnContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_SubShapeIDPair *)")] + public IntPtr OnContactRemoved; + } + + public partial struct JPH_BodyActivationListener_Procs + { + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyActivated; + + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyDeactivated; + } + + public partial struct JPH_BodyDrawFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldDraw; + } + + public partial struct JPH_CharacterContactListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_Body *, JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnAdjustBodyVelocity; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactValidate; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterID, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnContactSolve; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnCharacterContactSolve; + } + + public partial struct JPH_CharacterVsCharacterCollision_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_CollideShapeSettings *, const JPH_RVec3 *)")] + public IntPtr CollideCharacter; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_Vec3 *, const JPH_ShapeCastSettings *, const JPH_RVec3 *)")] + public IntPtr CastCharacter; + } + + public partial struct JPH_DebugRenderer_Procs + { + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color)")] + public IntPtr DrawLine; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color, JPH_DebugRenderer_CastShadow)")] + public IntPtr DrawTriangle; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const char *, JPH_Color, float)")] + public IntPtr DrawText3D; + } + + public unsafe partial struct JPH_SkeletonJoint + { + [NativeTypeName("const char *")] + public sbyte* name; + + [NativeTypeName("const char *")] + public sbyte* parentName; + + public int parentJointIndex; + } + + public partial struct JPH_WheelSettings + { + } + + public partial struct JPH_WheelSettingsWV + { + } + + public partial struct JPH_WheelSettingsTV + { + } + + public partial struct JPH_Wheel + { + } + + public partial struct JPH_WheelWV + { + } + + public partial struct JPH_WheelTV + { + } + + public partial struct JPH_VehicleTransmissionSettings + { + } + + public partial struct JPH_VehicleCollisionTester + { + } + + public partial struct JPH_VehicleCollisionTesterRay + { + } + + public partial struct JPH_VehicleCollisionTesterCastSphere + { + } + + public partial struct JPH_VehicleCollisionTesterCastCylinder + { + } + + public partial struct JPH_VehicleConstraint + { + } + + public partial struct JPH_VehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleControllerSettings + { + } + + public partial struct JPH_MotorcycleControllerSettings + { + } + + public partial struct JPH_TrackedVehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleController + { + } + + public partial struct JPH_MotorcycleController + { + } + + public partial struct JPH_TrackedVehicleController + { + } + + public partial struct JPH_VehicleController + { + } + + public partial struct JPH_VehicleAntiRollBar + { + public int leftWheel; + + public int rightWheel; + + public float stiffness; + } + + public unsafe partial struct JPH_VehicleConstraintSettings + { + public JPH_ConstraintSettings @base; + + [NativeTypeName("JPH_Vec3")] + public float3 up; + + [NativeTypeName("JPH_Vec3")] + public float3 forward; + + public float maxPitchRollAngle; + + [NativeTypeName("uint32_t")] + public uint wheelsCount; + + public JPH_WheelSettings** wheels; + + [NativeTypeName("uint32_t")] + public uint antiRollBarsCount; + + [NativeTypeName("const JPH_VehicleAntiRollBar *")] + public JPH_VehicleAntiRollBar* antiRollBars; + + public JPH_VehicleControllerSettings* controller; + } + + public partial struct JPH_VehicleEngineSettings + { + public float maxTorque; + + public float minRPM; + + public float maxRPM; + + public float inertia; + + public float angularDamping; + } + + public partial struct JPH_VehicleDifferentialSettings + { + public int leftWheel; + + public int rightWheel; + + public float differentialRatio; + + public float leftRightSplit; + + public float limitedSlipRatio; + + public float engineTorqueRatio; + } + + public static unsafe partial class UnsafeBindings + { + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemThreadPool_Create([NativeTypeName("const JobSystemThreadPoolConfig *")] JobSystemThreadPoolConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemCallback_Create([NativeTypeName("const JPH_JobSystemConfig *")] JPH_JobSystemConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_JobSystem_Destroy(JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Init(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shutdown(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetTraceHandler([NativeTypeName("JPH_TraceFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetAssertFailureHandler([NativeTypeName("JPH_AssertFailureFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollideShapeResult_FreeMembers(JPH_CollideShapeResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollisionEstimationResult_FreeMembers(JPH_CollisionEstimationResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceMask_Create([NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceMask_ConfigureLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer, [NativeTypeName("uint32_t")] uint groupsToInclude, [NativeTypeName("uint32_t")] uint groupsToExclude); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceTable_MapObjectToBroadPhaseLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterMask_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetObjectLayer([NativeTypeName("uint32_t")] uint group, [NativeTypeName("uint32_t")] uint mask); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetGroup([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetMask([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_DisableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_EnableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_ObjectLayerPairFilterTable_ShouldCollide(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterMask_Create([NativeTypeName("const JPH_BroadPhaseLayerInterface *")] JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterTable_Create(JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers, JPH_ObjectLayerPairFilter* objectLayerPairFilter, [NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DrawSettings_InitDefault(JPH_DrawSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsSystem* JPH_PhysicsSystem_Create([NativeTypeName("const JPH_PhysicsSystemSettings *")] JPH_PhysicsSystemSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsUpdateError JPH_PhysicsSystem_Update(JPH_PhysicsSystem* system, float deltaTime, int collisionSteps, JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterface(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterfaceNoLock(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterface([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterfaceNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BroadPhaseQuery *")] + public static extern JPH_BroadPhaseQuery* JPH_PhysicsSystem_GetBroadPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQueryNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetContactListener(JPH_PhysicsSystem* system, JPH_ContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetBodyActivationListener(JPH_PhysicsSystem* system, JPH_BodyActivationListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetSimShapeFilter(JPH_PhysicsSystem* system, JPH_SimShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_PhysicsSystem_WereBodiesInContact([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID")] uint body1, [NativeTypeName("JPH_BodyID")] uint body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumActiveBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, JPH_BodyType type); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetMaxBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetGravity(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetGravity(JPH_PhysicsSystem* system, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID *")] uint* ids, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Constraint **")] JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawBodies(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_DrawSettings *")] JPH_DrawSettings* settings, JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_BodyDrawFilter *")] JPH_BodyDrawFilter* bodyFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraints(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintLimits(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintReferenceFrame(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_SetProcs([NativeTypeName("const JPH_PhysicsStepListener_Procs *")] JPH_PhysicsStepListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsStepListener* JPH_PhysicsStepListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_Destroy(JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quaternion_FromTo([NativeTypeName("const JPH_Vec3 *")] float3* from, [NativeTypeName("const JPH_Vec3 *")] float3* to, [NativeTypeName("JPH_Quat *")] quaternion* quat); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetAxisAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* outAxis, float* outAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetEulerAngles([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisX([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisY([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisZ([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Inversed([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetPerpendicular([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Quat_GetRotationAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_FromEulerAngles([NativeTypeName("const JPH_Vec3 *")] float3* angles, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Add([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Subtract([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Multiply([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_MultiplyScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_DivideScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Dot([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Conjugated([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetSwingTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* outSwing, [NativeTypeName("JPH_Quat *")] quaternion* outTwist); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Lerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Slerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Rotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_InverseRotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsClose([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNearZero([NativeTypeName("const JPH_Vec3 *")] float3* v, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNormalized([NativeTypeName("const JPH_Vec3 *")] float3* v, float tolerance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNaN([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Negate([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalized([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Cross([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Abs([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_Length([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_LengthSquared([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DotProduct([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalize([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Add([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Subtract([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Multiply([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_MultiplyScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Divide([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DivideScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Add([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Subtract([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Multiply([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_MultiplyScalar([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, float scalar, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Zero([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Identity([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Rotation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Translation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_RotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_InverseRotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Scale([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Inversed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Transposed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Zero([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Identity([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Rotation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Translation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_RotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_InverseRotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Scale([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Inversed([NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* m, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisX([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisY([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisZ([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetTranslation([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetQuaternion([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsMaterial* JPH_PhysicsMaterial_Create([NativeTypeName("const char *")] sbyte* name, [NativeTypeName("uint32_t")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsMaterial_Destroy(JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const char *")] + public static extern sbyte* JPH_PhysicsMaterial_GetDebugName([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsMaterial_GetDebugColor([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilter_Destroy(JPH_GroupFilter* groupFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilter_CanCollide(JPH_GroupFilter* groupFilter, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group1, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GroupFilterTable* JPH_GroupFilterTable_Create([NativeTypeName("uint32_t")] uint numSubGroups); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_DisableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_EnableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilterTable_IsCollisionEnabled(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_Destroy(JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_ShapeSettings_GetUserData([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_SetUserData(JPH_ShapeSettings* settings, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_Destroy(JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeType JPH_Shape_GetType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeSubType JPH_Shape_GetSubType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Shape_GetUserData([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_SetUserData(JPH_Shape* shape, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_MustBeStatic([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetCenterOfMass([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetLocalBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Shape_GetSubShapeIDBitsRecursive([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetWorldSpaceBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("JPH_Vec3 *")] float3* scale, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetInnerRadius([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetMassProperties([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_MassProperties* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Shape_GetLeafShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_Shape_GetMaterial([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSurfaceNormal([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSupportingFace([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform, JPH_SupportingFace* outVertices); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetVolume([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_IsValidScale([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_MakeScaleValid([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Shape* JPH_Shape_ScaleShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShapeSettings_GetDensity([NativeTypeName("const JPH_ConvexShapeSettings *")] JPH_ConvexShapeSettings* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShapeSettings_SetDensity(JPH_ConvexShapeSettings* shape, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShape_GetDensity([NativeTypeName("const JPH_ConvexShape *")] JPH_ConvexShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShape_SetDensity(JPH_ConvexShape* shape, float inDensity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShapeSettings* JPH_BoxShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShapeSettings_CreateShape([NativeTypeName("const JPH_BoxShapeSettings *")] JPH_BoxShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BoxShape_GetHalfExtent([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BoxShape_GetConvexRadius([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShapeSettings* JPH_SphereShapeSettings_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShapeSettings_CreateShape([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShapeSettings_GetRadius([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SphereShapeSettings_SetRadius(JPH_SphereShapeSettings* settings, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShape_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShape_GetRadius([NativeTypeName("const JPH_SphereShape *")] JPH_SphereShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShapeSettings* JPH_PlaneShapeSettings_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShapeSettings_CreateShape([NativeTypeName("const JPH_PlaneShapeSettings *")] JPH_PlaneShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShape_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); - public float contactNormalCosMaxDeltaRotation; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PlaneShape_GetPlane([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape, JPH_Plane* result); - public float contactPointPreserveLambdaMaxDistSq; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_PlaneShape_GetHalfExtent([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape); - public uint numVelocitySteps; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShapeSettings* JPH_TriangleShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); - public uint numPositionSteps; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShapeSettings_CreateShape([NativeTypeName("const JPH_TriangleShapeSettings *")] JPH_TriangleShapeSettings* settings); - public float minVelocityForRestitution; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); - public float timeBeforeSleep; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TriangleShape_GetConvexRadius([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape); - public float pointVelocitySleepThreshold; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex1([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); - [NativeTypeName("bool")] - public NativeBool deterministicSimulation; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex2([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); - [NativeTypeName("bool")] - public NativeBool constraintWarmStart; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex3([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); - [NativeTypeName("bool")] - public NativeBool useBodyPairContactCache; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShapeSettings* JPH_CapsuleShapeSettings_Create(float halfHeightOfCylinder, float radius); - [NativeTypeName("bool")] - public NativeBool useManifoldReduction; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShapeSettings_CreateShape([NativeTypeName("const JPH_CapsuleShapeSettings *")] JPH_CapsuleShapeSettings* settings); - [NativeTypeName("bool")] - public NativeBool useLargeIslandSplitter; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShape_Create(float halfHeightOfCylinder, float radius); - [NativeTypeName("bool")] - public NativeBool allowSleeping; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetRadius([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); - [NativeTypeName("bool")] - public NativeBool checkActiveEdges; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetHalfHeightOfCylinder([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); - internal partial struct JPH_BroadPhaseLayerFilter_Procs - { - [NativeTypeName("bool (*)(void *, JPH_BroadPhaseLayer) __attribute__((cdecl))")] - public nint ShouldCollide; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShapeSettings* JPH_CylinderShapeSettings_Create(float halfHeight, float radius, float convexRadius); - internal partial struct JPH_ObjectLayerFilter_Procs - { - [NativeTypeName("bool (*)(void *, JPH_ObjectLayer) __attribute__((cdecl))")] - public nint ShouldCollide; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShapeSettings_CreateShape([NativeTypeName("const JPH_CylinderShapeSettings *")] JPH_CylinderShapeSettings* settings); - internal partial struct JPH_BodyFilter_Procs - { - [NativeTypeName("bool (*)(void *, JPH_BodyID) __attribute__((cdecl))")] - public nint ShouldCollide; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShape_Create(float halfHeight, float radius); - [NativeTypeName("bool (*)(void *, const JPH_Body *) __attribute__((cdecl))")] - public nint ShouldCollideLocked; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetRadius([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); - internal partial struct JPH_ShapeFilter_Procs - { - [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *) __attribute__((cdecl))")] - public nint ShouldCollide; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetHalfHeight([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); - [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Shape *, const JPH_SubShapeID *) __attribute__((cdecl))")] - public nint ShouldCollide2; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShapeSettings* JPH_TaperedCylinderShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius, float convexRadius, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); - internal partial struct JPH_SimShapeFilter_Procs - { - [NativeTypeName("bool (*)(void *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *) __attribute__((cdecl))")] - public nint ShouldCollide; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShape* JPH_TaperedCylinderShapeSettings_CreateShape([NativeTypeName("const JPH_TaperedCylinderShapeSettings *")] JPH_TaperedCylinderShapeSettings* settings); - internal partial struct JPH_ContactListener_Procs - { - [NativeTypeName("JPH_ValidateResult (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_RVec3 *, const JPH_CollideShapeResult *) __attribute__((cdecl))")] - public nint OnContactValidate; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetTopRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); - [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *) __attribute__((cdecl))")] - public nint OnContactAdded; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); - [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *) __attribute__((cdecl))")] - public nint OnContactPersisted; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetConvexRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); - [NativeTypeName("void (*)(void *, const JPH_SubShapeIDPair *) __attribute__((cdecl))")] - public nint OnContactRemoved; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); - internal partial struct JPH_BodyActivationListener_Procs - { - [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t) __attribute__((cdecl))")] - public nint OnBodyActivated; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShapeSettings* JPH_ConvexHullShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* points, [NativeTypeName("uint32_t")] uint pointsCount, float maxConvexRadius); - [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t) __attribute__((cdecl))")] - public nint OnBodyDeactivated; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShape* JPH_ConvexHullShapeSettings_CreateShape([NativeTypeName("const JPH_ConvexHullShapeSettings *")] JPH_ConvexHullShapeSettings* settings); - internal partial struct JPH_BodyDrawFilter_Procs - { - [NativeTypeName("bool (*)(void *, const JPH_Body *) __attribute__((cdecl))")] - public nint ShouldDraw; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumPoints([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); - internal partial struct JPH_CharacterContactListener_Procs - { - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_Body *, JPH_Vec3 *, JPH_Vec3 *) __attribute__((cdecl))")] - public nint OnAdjustBodyVelocity; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexHullShape_GetPoint([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_Vec3 *")] float3* result); - [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID) __attribute__((cdecl))")] - public nint OnContactValidate; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumFaces([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); - [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID) __attribute__((cdecl))")] - public nint OnCharacterContactValidate; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumVerticesInFace([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *) __attribute__((cdecl))")] - public nint OnContactAdded; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetFaceVertices([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex, [NativeTypeName("uint32_t")] uint maxVertices, [NativeTypeName("uint32_t *")] uint* vertices); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *) __attribute__((cdecl))")] - public nint OnContactPersisted; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create([NativeTypeName("const JPH_Triangle *")] JPH_Triangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID) __attribute__((cdecl))")] - public nint OnContactRemoved; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* vertices, [NativeTypeName("uint32_t")] uint verticesCount, [NativeTypeName("const JPH_IndexedTriangle *")] JPH_IndexedTriangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *) __attribute__((cdecl))")] - public nint OnCharacterContactAdded; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShapeSettings_GetMaxTrianglesPerLeaf([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *) __attribute__((cdecl))")] - public nint OnCharacterContactPersisted; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetMaxTrianglesPerLeaf(JPH_MeshShapeSettings* settings, [NativeTypeName("uint32_t")] uint value); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterID, const JPH_SubShapeID) __attribute__((cdecl))")] - public nint OnCharacterContactRemoved; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MeshShapeSettings_GetActiveEdgeCosThresholdAngle([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *) __attribute__((cdecl))")] - public nint OnContactSolve; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetActiveEdgeCosThresholdAngle(JPH_MeshShapeSettings* settings, float value); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *) __attribute__((cdecl))")] - public nint OnCharacterContactSolve; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MeshShapeSettings_GetPerTriangleUserData([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); - internal partial struct JPH_CharacterVsCharacterCollision_Procs - { - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_CollideShapeSettings *, const JPH_RVec3 *) __attribute__((cdecl))")] - public nint CollideCharacter; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetPerTriangleUserData(JPH_MeshShapeSettings* settings, [NativeTypeName("bool")] byte value); - [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_Vec3 *, const JPH_ShapeCastSettings *, const JPH_RVec3 *) __attribute__((cdecl))")] - public nint CastCharacter; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Mesh_Shape_BuildQuality JPH_MeshShapeSettings_GetBuildQuality([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); - internal partial struct JPH_DebugRenderer_Procs - { - [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color) __attribute__((cdecl))")] - public nint DrawLine; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetBuildQuality(JPH_MeshShapeSettings* settings, JPH_Mesh_Shape_BuildQuality value); - [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color, JPH_DebugRenderer_CastShadow) __attribute__((cdecl))")] - public nint DrawTriangle; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_Sanitize(JPH_MeshShapeSettings* settings); - [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const char *, JPH_Color, float) __attribute__((cdecl))")] - public nint DrawText3D; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShape* JPH_MeshShapeSettings_CreateShape([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); - internal unsafe partial struct JPH_SkeletonJoint - { - [NativeTypeName("const char *")] - public sbyte* name; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShape_GetTriangleUserData([NativeTypeName("const JPH_MeshShape *")] JPH_MeshShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id); - [NativeTypeName("const char *")] - public sbyte* parentName; + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShapeSettings* JPH_HeightFieldShapeSettings_Create([NativeTypeName("const float *")] float* samples, [NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("uint32_t")] uint sampleCount); - public int parentJointIndex; - } + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShape* JPH_HeightFieldShapeSettings_CreateShape(JPH_HeightFieldShapeSettings* settings); - internal static unsafe partial class UnsafeBindings - { [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_JobSystem* JPH_JobSystemThreadPool_Create([NativeTypeName("const JobSystemThreadPoolConfig *")] JPH_JobSystemThreadPoolConfig* config); + public static extern void JPH_HeightFieldShapeSettings_DetermineMinAndMaxSample([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float* pOutMinValue, float* pOutMaxValue, float* pOutQuantizationScale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_JobSystem* JPH_JobSystemCallback_Create([NativeTypeName("const JPH_JobSystemConfig *")] JPH_JobSystemConfig* config); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShapeSettings_CalculateBitsPerSampleForError([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float maxError); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_JobSystem_Destroy(JPH_JobSystem* jobSystem); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetSampleCount([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Init(); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetBlockSize([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shutdown(); + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_HeightFieldShape_GetMaterial([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SetTraceHandler([NativeTypeName("JPH_TraceFunc")] nint handler); + public static extern void JPH_HeightFieldShape_GetPosition([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SetAssertFailureHandler([NativeTypeName("JPH_AssertFailureFunc")] nint handler); + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_IsNoCollision([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CollideShapeResult_FreeMembers(JPH_CollideShapeResult* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_ProjectOntoSurface([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* outSurfacePosition, [NativeTypeName("JPH_SubShapeID *")] uint* outSubShapeID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CollisionEstimationResult_FreeMembers(JPH_CollisionEstimationResult* result); + public static extern float JPH_HeightFieldShape_GetMinHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceMask_Create(uint numBroadPhaseLayers); + public static extern float JPH_HeightFieldShape_GetMaxHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BroadPhaseLayerInterfaceMask_ConfigureLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_BroadPhaseLayer")] BroadPhaseLayer broadPhaseLayer, uint groupsToInclude, uint groupsToExclude); + public static extern JPH_TaperedCapsuleShapeSettings* JPH_TaperedCapsuleShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceTable_Create(uint numObjectLayers, uint numBroadPhaseLayers); + public static extern JPH_TaperedCapsuleShape* JPH_TaperedCapsuleShapeSettings_CreateShape(JPH_TaperedCapsuleShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BroadPhaseLayerInterfaceTable_MapObjectToBroadPhaseLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer objectLayer, [NativeTypeName("JPH_BroadPhaseLayer")] BroadPhaseLayer broadPhaseLayer); + public static extern float JPH_TaperedCapsuleShape_GetTopRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterMask_Create(); + public static extern float JPH_TaperedCapsuleShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ObjectLayer")] - public static extern ObjectLayer JPH_ObjectLayerPairFilterMask_GetObjectLayer(uint group, uint mask); + public static extern float JPH_TaperedCapsuleShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ObjectLayerPairFilterMask_GetGroup([NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer); + public static extern void JPH_CompoundShapeSettings_AddShape(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("uint32_t")] uint userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ObjectLayerPairFilterMask_GetMask([NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer); + public static extern void JPH_CompoundShapeSettings_AddShape2(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("uint32_t")] uint userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterTable_Create(uint numObjectLayers); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetNumSubShapes([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ObjectLayerPairFilterTable_DisableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer1, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer2); + public static extern void JPH_CompoundShape_GetSubShape([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Shape **")] JPH_Shape** subShape, [NativeTypeName("JPH_Vec3 *")] float3* positionCOM, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint32_t *")] uint* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ObjectLayerPairFilterTable_EnableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer1, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer2); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetSubShapeIndexFromID([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_ObjectLayerPairFilterTable_ShouldCollide(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer1, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer2); + public static extern JPH_StaticCompoundShapeSettings* JPH_StaticCompoundShapeSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterMask_Create([NativeTypeName("const JPH_BroadPhaseLayerInterface *")] JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface); + public static extern JPH_StaticCompoundShape* JPH_StaticCompoundShape_Create([NativeTypeName("const JPH_StaticCompoundShapeSettings *")] JPH_StaticCompoundShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterTable_Create(JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface, uint numBroadPhaseLayers, JPH_ObjectLayerPairFilter* objectLayerPairFilter, uint numObjectLayers); + public static extern JPH_MutableCompoundShapeSettings* JPH_MutableCompoundShapeSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DrawSettings_InitDefault(JPH_DrawSettings* settings); + public static extern JPH_MutableCompoundShape* JPH_MutableCompoundShape_Create([NativeTypeName("const JPH_MutableCompoundShapeSettings *")] JPH_MutableCompoundShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PhysicsSystem* JPH_PhysicsSystem_Create([NativeTypeName("const JPH_PhysicsSystemSettings *")] JPH_PhysicsSystemSettings* settings); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MutableCompoundShape_AddShape(JPH_MutableCompoundShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* child, [NativeTypeName("uint32_t")] uint userData, [NativeTypeName("uint32_t")] uint index); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system); + public static extern void JPH_MutableCompoundShape_RemoveShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings); + public static extern void JPH_MutableCompoundShape_ModifyShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result); + public static extern void JPH_MutableCompoundShape_ModifyShape2(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* newShape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system); + public static extern void JPH_MutableCompoundShape_AdjustCenterOfMass(JPH_MutableCompoundShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_PhysicsUpdateError")] - public static extern PhysicsUpdateError JPH_PhysicsSystem_Update(JPH_PhysicsSystem* system, float deltaTime, int collisionSteps, JPH_JobSystem* jobSystem); + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_DecoratedShape_GetInnerShape([NativeTypeName("const JPH_DecoratedShape *")] JPH_DecoratedShape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterface(JPH_PhysicsSystem* system); + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterfaceNoLock(JPH_PhysicsSystem* system); + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_BodyLockInterface *")] - public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterface([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShapeSettings_CreateShape([NativeTypeName("const JPH_RotatedTranslatedShapeSettings *")] JPH_RotatedTranslatedShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_BodyLockInterface *")] - public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterfaceNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_BroadPhaseQuery *")] - public static extern JPH_BroadPhaseQuery* JPH_PhysicsSystem_GetBroadPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern void JPH_RotatedTranslatedShape_GetPosition([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] - public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern void JPH_RotatedTranslatedShape_GetRotation([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Quat *")] quaternion* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] - public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQueryNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("const JPH_Vec3 *")] float3* scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_SetContactListener(JPH_PhysicsSystem* system, JPH_ContactListener* listener); + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_SetBodyActivationListener(JPH_PhysicsSystem* system, JPH_BodyActivationListener* listener); + public static extern JPH_ScaledShape* JPH_ScaledShapeSettings_CreateShape([NativeTypeName("const JPH_ScaledShapeSettings *")] JPH_ScaledShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_SetSimShapeFilter(JPH_PhysicsSystem* system, JPH_SimShapeFilter* filter); + public static extern JPH_ScaledShape* JPH_ScaledShape_Create([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_PhysicsSystem_WereBodiesInContact([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID")] BodyID body1, [NativeTypeName("JPH_BodyID")] BodyID body2); + public static extern void JPH_ScaledShape_GetScale([NativeTypeName("const JPH_ScaledShape *")] JPH_ScaledShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_PhysicsSystem_GetNumBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_PhysicsSystem_GetNumActiveBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyType")] BodyType type); + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_PhysicsSystem_GetMaxBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShapeSettings_CreateShape([NativeTypeName("const JPH_OffsetCenterOfMassShapeSettings *")] JPH_OffsetCenterOfMassShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_PhysicsSystem_GetNumConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_SetGravity(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Vec3 *")] float3* value); + public static extern void JPH_OffsetCenterOfMassShape_GetOffset([NativeTypeName("const JPH_OffsetCenterOfMassShape *")] JPH_OffsetCenterOfMassShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_GetGravity(JPH_PhysicsSystem* system, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern JPH_EmptyShapeSettings* JPH_EmptyShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* centerOfMass); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_AddConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + public static extern JPH_EmptyShape* JPH_EmptyShapeSettings_CreateShape([NativeTypeName("const JPH_EmptyShapeSettings *")] JPH_EmptyShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_RemoveConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_AddConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, uint count); + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create2([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_RemoveConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, uint count); + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create3([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_GetBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID *")] BodyID* ids, uint count); + public static extern void JPH_BodyCreationSettings_Destroy(JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_GetConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Constraint **")] JPH_Constraint** constraints, uint count); + public static extern void JPH_BodyCreationSettings_GetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_DrawBodies(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_DrawSettings *")] JPH_DrawSettings* settings, JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_BodyDrawFilter *")] JPH_BodyDrawFilter* bodyFilter); + public static extern void JPH_BodyCreationSettings_SetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_DrawConstraints(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + public static extern void JPH_BodyCreationSettings_GetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_DrawConstraintLimits(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + public static extern void JPH_BodyCreationSettings_SetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Quat *")] quaternion* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsSystem_DrawConstraintReferenceFrame(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + public static extern void JPH_BodyCreationSettings_GetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quaternion_FromTo([NativeTypeName("const JPH_Vec3 *")] float3* from, [NativeTypeName("const JPH_Vec3 *")] float3* to, [NativeTypeName("JPH_Quat *")] quaternion* quat); + public static extern void JPH_BodyCreationSettings_SetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_GetAxisAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* outAxis, float* outAngle); + public static extern void JPH_BodyCreationSettings_GetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_GetEulerAngles([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_RotateAxisX([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_BodyCreationSettings_GetUserData([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_RotateAxisY([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetUserData(JPH_BodyCreationSettings* settings, [NativeTypeName("uint64_t")] ulong value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_RotateAxisZ([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyCreationSettings_GetObjectLayer([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Inversed([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetObjectLayer(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_GetPerpendicular([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_GetCollisionGroup([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_CollisionGroup* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Quat_GetRotationAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + public static extern void JPH_BodyCreationSettings_SetCollisionGroup(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_FromEulerAngles([NativeTypeName("const JPH_Vec3 *")] float3* angles, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern JPH_MotionType JPH_BodyCreationSettings_GetMotionType([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Add([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetMotionType(JPH_BodyCreationSettings* settings, JPH_MotionType value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Subtract([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern JPH_AllowedDOFs JPH_BodyCreationSettings_GetAllowedDOFs([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Multiply([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetAllowedDOFs(JPH_BodyCreationSettings* settings, JPH_AllowedDOFs value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_MultiplyScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowDynamicOrKinematic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Divide([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetAllowDynamicOrKinematic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Dot([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, float* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetIsSensor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Conjugated([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetIsSensor(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_GetTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("JPH_Quat *")] quaternion* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_GetSwingTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* outSwing, [NativeTypeName("JPH_Quat *")] quaternion* outTwist); + public static extern void JPH_BodyCreationSettings_SetCollideKinematicVsNonDynamic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_LERP([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetUseManifoldReduction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_SLERP([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_BodyCreationSettings_SetUseManifoldReduction(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_Rotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetApplyGyroscopicForce([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Quat_InverseRotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetApplyGyroscopicForce(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Vec3_IsClose([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float maxDistSq); + public static extern JPH_MotionQuality JPH_BodyCreationSettings_GetMotionQuality([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Vec3_IsNearZero([NativeTypeName("const JPH_Vec3 *")] float3* v, float maxDistSq); + public static extern void JPH_BodyCreationSettings_SetMotionQuality(JPH_BodyCreationSettings* settings, JPH_MotionQuality value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Vec3_IsNormalized([NativeTypeName("const JPH_Vec3 *")] float3* v, float tolerance); + public static extern byte JPH_BodyCreationSettings_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Vec3_IsNaN([NativeTypeName("const JPH_Vec3 *")] float3* v); + public static extern void JPH_BodyCreationSettings_SetEnhancedInternalEdgeRemoval(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Negate([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowSleeping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Normalized([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetAllowSleeping(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Cross([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_BodyCreationSettings_GetFriction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Abs([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetFriction(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Vec3_Length([NativeTypeName("const JPH_Vec3 *")] float3* v); + public static extern float JPH_BodyCreationSettings_GetRestitution([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Vec3_LengthSquared([NativeTypeName("const JPH_Vec3 *")] float3* v); + public static extern void JPH_BodyCreationSettings_SetRestitution(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_DotProduct([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float* result); + public static extern float JPH_BodyCreationSettings_GetLinearDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Normalize([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetLinearDamping(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Add([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_BodyCreationSettings_GetAngularDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Subtract([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetAngularDamping(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Multiply([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_BodyCreationSettings_GetMaxLinearVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_MultiplyScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetMaxLinearVelocity(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_Divide([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_BodyCreationSettings_GetMaxAngularVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Vec3_DivideScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BodyCreationSettings_SetMaxAngularVelocity(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Add([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern float JPH_BodyCreationSettings_GetGravityFactor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Subtract([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_BodyCreationSettings_SetGravityFactor(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Multiply([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumVelocityStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_MultiplyScalar([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, float scalar, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_BodyCreationSettings_SetNumVelocityStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Zero([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumPositionStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Identity([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_BodyCreationSettings_SetNumPositionStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Rotation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + public static extern JPH_OverrideMassProperties JPH_BodyCreationSettings_GetOverrideMassProperties([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Translation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + public static extern void JPH_BodyCreationSettings_SetOverrideMassProperties(JPH_BodyCreationSettings* settings, JPH_OverrideMassProperties value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_RotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + public static extern float JPH_BodyCreationSettings_GetInertiaMultiplier([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_InverseRotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + public static extern void JPH_BodyCreationSettings_SetInertiaMultiplier(JPH_BodyCreationSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Scale([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern void JPH_BodyCreationSettings_GetMassPropertiesOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_MassProperties* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Inversed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_BodyCreationSettings_SetMassPropertiesOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_Transposed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern JPH_SoftBodyCreationSettings* JPH_SoftBodyCreationSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Zero([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_SoftBodyCreationSettings_Destroy(JPH_SoftBodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Identity([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_Constraint_Destroy(JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Rotation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + public static extern JPH_ConstraintType JPH_Constraint_GetType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Translation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + public static extern JPH_ConstraintSubType JPH_Constraint_GetSubType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_RotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetConstraintPriority([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_InverseRotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + public static extern void JPH_Constraint_SetConstraintPriority(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint priority); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Scale([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumVelocityStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RMatrix4x4_Inversed([NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* m, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_Constraint_SetNumVelocityStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_GetAxisX([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumPositionStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_GetAxisY([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Constraint_SetNumPositionStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_GetAxisZ([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_GetEnabled([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_GetTranslation([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Constraint_SetEnabled(JPH_Constraint* constraint, [NativeTypeName("bool")] byte enabled); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Matrix4x4_GetQuaternion([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Quat *")] quaternion* result); + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Constraint_GetUserData([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PhysicsMaterial* JPH_PhysicsMaterial_Create([NativeTypeName("const char *")] sbyte* name, uint color); + public static extern void JPH_Constraint_SetUserData(JPH_Constraint* constraint, [NativeTypeName("uint64_t")] ulong userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PhysicsMaterial_Destroy(JPH_PhysicsMaterial* material); + public static extern void JPH_Constraint_NotifyShapeChanged(JPH_Constraint* constraint, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* deltaCOM); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const char *")] - public static extern sbyte* JPH_PhysicsMaterial_GetDebugName([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + public static extern void JPH_Constraint_ResetWarmStart(JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_PhysicsMaterial_GetDebugColor([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_IsActive([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeSettings_Destroy(JPH_ShapeSettings* settings); + public static extern void JPH_Constraint_SetupVelocityConstraint(JPH_Constraint* constraint, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_ShapeSettings_GetUserData([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings); + public static extern void JPH_Constraint_WarmStartVelocityConstraint(JPH_Constraint* constraint, float warmStartImpulseRatio); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeSettings_SetUserData(JPH_ShapeSettings* settings, [NativeTypeName("uint64_t")] ulong userData); + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolveVelocityConstraint(JPH_Constraint* constraint, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_Destroy(JPH_Shape* shape); + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolvePositionConstraint(JPH_Constraint* constraint, float deltaTime, float baumgarte); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ShapeType")] - public static extern ShapeType JPH_Shape_GetType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody1([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ShapeSubType")] - public static extern ShapeSubType JPH_Shape_GetSubType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody2([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_Shape_GetUserData([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody1Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_SetUserData(JPH_Shape* shape, [NativeTypeName("uint64_t")] ulong userData); + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody2Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_MustBeStatic([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_FixedConstraintSettings_Init(JPH_FixedConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetCenterOfMass([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern JPH_FixedConstraint* JPH_FixedConstraint_Create([NativeTypeName("const JPH_FixedConstraintSettings *")] JPH_FixedConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetLocalBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_AABox* result); + public static extern void JPH_FixedConstraint_GetSettings([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, JPH_FixedConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Shape_GetSubShapeIDBitsRecursive([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_FixedConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetWorldSpaceBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("JPH_Vec3 *")] float3* scale, JPH_AABox* result); + public static extern void JPH_FixedConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Shape_GetInnerRadius([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_DistanceConstraintSettings_Init(JPH_DistanceConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetMassProperties([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_MassProperties* result); + public static extern JPH_DistanceConstraint* JPH_DistanceConstraint_Create([NativeTypeName("const JPH_DistanceConstraintSettings *")] JPH_DistanceConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Shape *")] - public static extern JPH_Shape* JPH_Shape_GetLeafShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + public static extern void JPH_DistanceConstraint_GetSettings([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint, JPH_DistanceConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_PhysicsMaterial *")] - public static extern JPH_PhysicsMaterial* JPH_Shape_GetMaterial([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + public static extern void JPH_DistanceConstraint_SetDistance(JPH_DistanceConstraint* constraint, float minDistance, float maxDistance); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetSurfaceNormal([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* normal); + public static extern float JPH_DistanceConstraint_GetMinDistance(JPH_DistanceConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_GetSupportingFace([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform, JPH_SupportingFace* outVertices); + public static extern float JPH_DistanceConstraint_GetMaxDistance(JPH_DistanceConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Shape_GetVolume([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_DistanceConstraint_GetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_IsValidScale([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern void JPH_DistanceConstraint_SetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Shape_MakeScaleValid([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_DistanceConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Shape* JPH_Shape_ScaleShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern void JPH_PointConstraintSettings_Init(JPH_PointConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_CastRay([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit); + public static extern JPH_PointConstraint* JPH_PointConstraint_Create([NativeTypeName("const JPH_PointConstraintSettings *")] JPH_PointConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_CastRay2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_PointConstraint_GetSettings([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, JPH_PointConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_CollidePoint([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_PointConstraint_SetPoint1(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Shape_CollidePoint2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_PointConstraint_SetPoint2(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ConvexShapeSettings_GetDensity([NativeTypeName("const JPH_ConvexShapeSettings *")] JPH_ConvexShapeSettings* shape); + public static extern void JPH_PointConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConvexShapeSettings_SetDensity(JPH_ConvexShapeSettings* shape, float value); + public static extern void JPH_PointConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ConvexShape_GetDensity([NativeTypeName("const JPH_ConvexShape *")] JPH_ConvexShape* shape); + public static extern void JPH_PointConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConvexShape_SetDensity(JPH_ConvexShape* shape, float inDensity); + public static extern void JPH_HingeConstraintSettings_Init(JPH_HingeConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BoxShapeSettings* JPH_BoxShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + public static extern JPH_HingeConstraint* JPH_HingeConstraint_Create([NativeTypeName("const JPH_HingeConstraintSettings *")] JPH_HingeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BoxShape* JPH_BoxShapeSettings_CreateShape([NativeTypeName("const JPH_BoxShapeSettings *")] JPH_BoxShapeSettings* settings); + public static extern void JPH_HingeConstraint_GetSettings(JPH_HingeConstraint* constraint, JPH_HingeConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BoxShape* JPH_BoxShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + public static extern void JPH_HingeConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BoxShape_GetHalfExtent([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* halfExtent); + public static extern void JPH_HingeConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BoxShape_GetConvexRadius([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape); + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SphereShapeSettings* JPH_SphereShapeSettings_Create(float radius); + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SphereShape* JPH_SphereShapeSettings_CreateShape([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SphereShapeSettings_GetRadius([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SphereShapeSettings_SetRadius(JPH_SphereShapeSettings* settings, float radius); + public static extern float JPH_HingeConstraint_GetCurrentAngle(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SphereShape* JPH_SphereShape_Create(float radius); + public static extern void JPH_HingeConstraint_SetMaxFrictionTorque(JPH_HingeConstraint* constraint, float frictionTorque); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SphereShape_GetRadius([NativeTypeName("const JPH_SphereShape *")] JPH_SphereShape* shape); + public static extern float JPH_HingeConstraint_GetMaxFrictionTorque(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PlaneShapeSettings* JPH_PlaneShapeSettings_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + public static extern void JPH_HingeConstraint_SetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PlaneShape* JPH_PlaneShapeSettings_CreateShape([NativeTypeName("const JPH_PlaneShapeSettings *")] JPH_PlaneShapeSettings* settings); + public static extern void JPH_HingeConstraint_GetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PlaneShape* JPH_PlaneShape_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + public static extern void JPH_HingeConstraint_SetMotorState(JPH_HingeConstraint* constraint, JPH_MotorState state); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PlaneShape_GetPlane([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape, JPH_Plane* result); + public static extern JPH_MotorState JPH_HingeConstraint_GetMotorState(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_PlaneShape_GetHalfExtent([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape); + public static extern void JPH_HingeConstraint_SetTargetAngularVelocity(JPH_HingeConstraint* constraint, float angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TriangleShapeSettings* JPH_TriangleShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + public static extern float JPH_HingeConstraint_GetTargetAngularVelocity(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TriangleShape* JPH_TriangleShapeSettings_CreateShape([NativeTypeName("const JPH_TriangleShapeSettings *")] JPH_TriangleShapeSettings* settings); + public static extern void JPH_HingeConstraint_SetTargetAngle(JPH_HingeConstraint* constraint, float angle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TriangleShape* JPH_TriangleShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + public static extern float JPH_HingeConstraint_GetTargetAngle(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TriangleShape_GetConvexRadius([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape); + public static extern void JPH_HingeConstraint_SetLimits(JPH_HingeConstraint* constraint, float inLimitsMin, float inLimitsMax); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_TriangleShape_GetVertex1([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_HingeConstraint_GetLimitsMin(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_TriangleShape_GetVertex2([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_HingeConstraint_GetLimitsMax(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_TriangleShape_GetVertex3([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_HingeConstraint_HasLimits(JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CapsuleShapeSettings* JPH_CapsuleShapeSettings_Create(float halfHeightOfCylinder, float radius); + public static extern void JPH_HingeConstraint_GetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CapsuleShape* JPH_CapsuleShapeSettings_CreateShape([NativeTypeName("const JPH_CapsuleShapeSettings *")] JPH_CapsuleShapeSettings* settings); + public static extern void JPH_HingeConstraint_SetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CapsuleShape* JPH_CapsuleShape_Create(float halfHeightOfCylinder, float radius); + public static extern void JPH_HingeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CapsuleShape_GetRadius([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + public static extern void JPH_HingeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("float[2]")] float* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CapsuleShape_GetHalfHeightOfCylinder([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + public static extern float JPH_HingeConstraint_GetTotalLambdaRotationLimits([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CylinderShapeSettings* JPH_CylinderShapeSettings_Create(float halfHeight, float radius, float convexRadius); + public static extern float JPH_HingeConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CylinderShape* JPH_CylinderShapeSettings_CreateShape([NativeTypeName("const JPH_CylinderShapeSettings *")] JPH_CylinderShapeSettings* settings); + public static extern void JPH_SliderConstraintSettings_Init(JPH_SliderConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CylinderShape* JPH_CylinderShape_Create(float halfHeight, float radius); + public static extern void JPH_SliderConstraintSettings_SetSliderAxis(JPH_SliderConstraintSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CylinderShape_GetRadius([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + public static extern JPH_SliderConstraint* JPH_SliderConstraint_Create([NativeTypeName("const JPH_SliderConstraintSettings *")] JPH_SliderConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CylinderShape_GetHalfHeight([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + public static extern void JPH_SliderConstraint_GetSettings(JPH_SliderConstraint* constraint, JPH_SliderConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TaperedCylinderShapeSettings* JPH_TaperedCylinderShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius, float convexRadius, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + public static extern float JPH_SliderConstraint_GetCurrentPosition(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TaperedCylinderShape* JPH_TaperedCylinderShapeSettings_CreateShape([NativeTypeName("const JPH_TaperedCylinderShapeSettings *")] JPH_TaperedCylinderShapeSettings* settings); + public static extern void JPH_SliderConstraint_SetMaxFrictionForce(JPH_SliderConstraint* constraint, float frictionForce); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCylinderShape_GetTopRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + public static extern float JPH_SliderConstraint_GetMaxFrictionForce(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCylinderShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + public static extern void JPH_SliderConstraint_SetMotorSettings(JPH_SliderConstraint* constraint, JPH_MotorSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCylinderShape_GetConvexRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + public static extern void JPH_SliderConstraint_GetMotorSettings([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, JPH_MotorSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCylinderShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + public static extern void JPH_SliderConstraint_SetMotorState(JPH_SliderConstraint* constraint, JPH_MotorState state); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ConvexHullShapeSettings* JPH_ConvexHullShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* points, uint pointsCount, float maxConvexRadius); + public static extern JPH_MotorState JPH_SliderConstraint_GetMotorState(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ConvexHullShape* JPH_ConvexHullShapeSettings_CreateShape([NativeTypeName("const JPH_ConvexHullShapeSettings *")] JPH_ConvexHullShapeSettings* settings); + public static extern void JPH_SliderConstraint_SetTargetVelocity(JPH_SliderConstraint* constraint, float velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ConvexHullShape_GetNumPoints([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + public static extern float JPH_SliderConstraint_GetTargetVelocity(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConvexHullShape_GetPoint([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, uint index, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_SliderConstraint_SetTargetPosition(JPH_SliderConstraint* constraint, float position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ConvexHullShape_GetNumFaces([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + public static extern float JPH_SliderConstraint_GetTargetPosition(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ConvexHullShape_GetNumVerticesInFace([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, uint faceIndex); + public static extern void JPH_SliderConstraint_SetLimits(JPH_SliderConstraint* constraint, float inLimitsMin, float inLimitsMax); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ConvexHullShape_GetFaceVertices([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, uint faceIndex, uint maxVertices, [NativeTypeName(" *")] uint* vertices); + public static extern float JPH_SliderConstraint_GetLimitsMin(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create([NativeTypeName("const JPH_Triangle *")] JPH_Triangle* triangles, uint triangleCount); + public static extern float JPH_SliderConstraint_GetLimitsMax(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* vertices, uint verticesCount, [NativeTypeName("const JPH_IndexedTriangle *")] JPH_IndexedTriangle* triangles, uint triangleCount); + [return: NativeTypeName("bool")] + public static extern byte JPH_SliderConstraint_HasLimits(JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_MeshShapeSettings_GetMaxTrianglesPerLeaf([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + public static extern void JPH_SliderConstraint_GetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MeshShapeSettings_SetMaxTrianglesPerLeaf(JPH_MeshShapeSettings* settings, uint value); + public static extern void JPH_SliderConstraint_SetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_MeshShapeSettings_GetActiveEdgeCosThresholdAngle([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + public static extern void JPH_SliderConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("float[2]")] float* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MeshShapeSettings_SetActiveEdgeCosThresholdAngle(JPH_MeshShapeSettings* settings, float value); + public static extern float JPH_SliderConstraint_GetTotalLambdaPositionLimits([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_MeshShapeSettings_GetPerTriangleUserData([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + public static extern void JPH_SliderConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MeshShapeSettings_SetPerTriangleUserData(JPH_MeshShapeSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern float JPH_SliderConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Mesh_Shape_BuildQuality JPH_MeshShapeSettings_GetBuildQuality([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + public static extern void JPH_ConeConstraintSettings_Init(JPH_ConeConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MeshShapeSettings_SetBuildQuality(JPH_MeshShapeSettings* settings, JPH_Mesh_Shape_BuildQuality value); + public static extern JPH_ConeConstraint* JPH_ConeConstraint_Create([NativeTypeName("const JPH_ConeConstraintSettings *")] JPH_ConeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MeshShapeSettings_Sanitize(JPH_MeshShapeSettings* settings); + public static extern void JPH_ConeConstraint_GetSettings(JPH_ConeConstraint* constraint, JPH_ConeConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MeshShape* JPH_MeshShapeSettings_CreateShape([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + public static extern void JPH_ConeConstraint_SetHalfConeAngle(JPH_ConeConstraint* constraint, float halfConeAngle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_MeshShape_GetTriangleUserData([NativeTypeName("const JPH_MeshShape *")] JPH_MeshShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id); + public static extern float JPH_ConeConstraint_GetCosHalfConeAngle([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_HeightFieldShapeSettings* JPH_HeightFieldShapeSettings_Create([NativeTypeName("const float *")] float* samples, [NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Vec3 *")] float3* scale, uint sampleCount); + public static extern void JPH_ConeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_HeightFieldShape* JPH_HeightFieldShapeSettings_CreateShape(JPH_HeightFieldShapeSettings* settings); + public static extern float JPH_ConeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HeightFieldShapeSettings_DetermineMinAndMaxSample([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float* pOutMinValue, float* pOutMaxValue, float* pOutQuantizationScale); + public static extern void JPH_SwingTwistConstraintSettings_Init(JPH_SwingTwistConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_HeightFieldShapeSettings_CalculateBitsPerSampleForError([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float maxError); + public static extern JPH_SwingTwistConstraint* JPH_SwingTwistConstraint_Create([NativeTypeName("const JPH_SwingTwistConstraintSettings *")] JPH_SwingTwistConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_HeightFieldShape_GetSampleCount([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + public static extern void JPH_SwingTwistConstraint_GetSettings(JPH_SwingTwistConstraint* constraint, JPH_SwingTwistConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_HeightFieldShape_GetBlockSize([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + public static extern float JPH_SwingTwistConstraint_GetNormalHalfConeAngle(JPH_SwingTwistConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_PhysicsMaterial *")] - public static extern JPH_PhysicsMaterial* JPH_HeightFieldShape_GetMaterial([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, uint x, uint y); + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HeightFieldShape_GetPosition([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, uint x, uint y, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaTwist([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_HeightFieldShape_IsNoCollision([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, uint x, uint y); + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingY([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_HeightFieldShape_ProjectOntoSurface([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* outSurfacePosition, [NativeTypeName("JPH_SubShapeID *")] uint* outSubShapeID); + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingZ([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HeightFieldShape_GetMinHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HeightFieldShape_GetMaxHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + public static extern void JPH_SixDOFConstraintSettings_Init(JPH_SixDOFConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TaperedCapsuleShapeSettings* JPH_TaperedCapsuleShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius); + public static extern void JPH_SixDOFConstraintSettings_MakeFreeAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_TaperedCapsuleShape* JPH_TaperedCapsuleShapeSettings_CreateShape(JPH_TaperedCapsuleShapeSettings* settings); + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCapsuleShape_GetTopRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + public static extern void JPH_SixDOFConstraintSettings_MakeFixedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCapsuleShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_TaperedCapsuleShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + public static extern void JPH_SixDOFConstraintSettings_SetLimitedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis, float min, float max); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CompoundShapeSettings_AddShape(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, uint userData); + public static extern JPH_SixDOFConstraint* JPH_SixDOFConstraint_Create([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CompoundShapeSettings_AddShape2(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, uint userData); + public static extern void JPH_SixDOFConstraint_GetSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_CompoundShape_GetNumSubShapes([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape); + public static extern float JPH_SixDOFConstraint_GetLimitsMin(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CompoundShape_GetSubShape([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, uint index, [NativeTypeName("const JPH_Shape **")] JPH_Shape** subShape, [NativeTypeName("JPH_Vec3 *")] float3* positionCOM, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName(" *")] uint* userData); + public static extern float JPH_SixDOFConstraint_GetLimitsMax(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_CompoundShape_GetSubShapeIndexFromID([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + public static extern void JPH_SixDOFConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_StaticCompoundShapeSettings* JPH_StaticCompoundShapeSettings_Create(); + public static extern void JPH_SixDOFConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_StaticCompoundShape* JPH_StaticCompoundShape_Create([NativeTypeName("const JPH_StaticCompoundShapeSettings *")] JPH_StaticCompoundShapeSettings* settings); + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorTranslation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MutableCompoundShapeSettings* JPH_MutableCompoundShapeSettings_Create(); + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MutableCompoundShape* JPH_MutableCompoundShape_Create([NativeTypeName("const JPH_MutableCompoundShapeSettings *")] JPH_MutableCompoundShapeSettings* settings); + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_MutableCompoundShape_AddShape(JPH_MutableCompoundShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* child, uint userData, uint index); + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MutableCompoundShape_RemoveShape(JPH_MutableCompoundShape* shape, uint index); + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MutableCompoundShape_ModifyShape(JPH_MutableCompoundShape* shape, uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MutableCompoundShape_ModifyShape2(JPH_MutableCompoundShape* shape, uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* newShape); + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MutableCompoundShape_AdjustCenterOfMass(JPH_MutableCompoundShape* shape); + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Shape *")] - public static extern JPH_Shape* JPH_DecoratedShape_GetInnerShape([NativeTypeName("const JPH_DecoratedShape *")] JPH_DecoratedShape* shape); + public static extern void JPH_SixDOFConstraint_GetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* result, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + public static extern void JPH_SixDOFConstraint_SetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* settings, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_SixDOFConstraint_SetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, float inFriction); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShapeSettings_CreateShape([NativeTypeName("const JPH_RotatedTranslatedShapeSettings *")] JPH_RotatedTranslatedShapeSettings* settings); + public static extern float JPH_SixDOFConstraint_GetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_SixDOFConstraint_GetRotationInConstraintSpace(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RotatedTranslatedShape_GetPosition([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* position); + public static extern void JPH_SixDOFConstraint_GetMotorSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RotatedTranslatedShape_GetRotation([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + public static extern void JPH_SixDOFConstraint_SetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorState state); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern JPH_MotorState JPH_SixDOFConstraint_GetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern void JPH_SixDOFConstraint_SetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ScaledShape* JPH_ScaledShapeSettings_CreateShape([NativeTypeName("const JPH_ScaledShapeSettings *")] JPH_ScaledShapeSettings* settings); + public static extern void JPH_SixDOFConstraint_GetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ScaledShape* JPH_ScaledShape_Create([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + public static extern void JPH_SixDOFConstraint_SetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inAngularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ScaledShape_GetScale([NativeTypeName("const JPH_ScaledShape *")] JPH_ScaledShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_SixDOFConstraint_GetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + public static extern void JPH_SixDOFConstraint_SetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inPosition); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_SixDOFConstraint_GetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShapeSettings_CreateShape([NativeTypeName("const JPH_OffsetCenterOfMassShapeSettings *")] JPH_OffsetCenterOfMassShapeSettings* settings); + public static extern void JPH_SixDOFConstraint_SetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_SixDOFConstraint_GetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_OffsetCenterOfMassShape_GetOffset([NativeTypeName("const JPH_OffsetCenterOfMassShape *")] JPH_OffsetCenterOfMassShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_SixDOFConstraint_SetTargetOrientationBS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_EmptyShapeSettings* JPH_EmptyShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* centerOfMass); + public static extern void JPH_GearConstraintSettings_Init(JPH_GearConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_EmptyShape* JPH_EmptyShapeSettings_CreateShape([NativeTypeName("const JPH_EmptyShapeSettings *")] JPH_EmptyShapeSettings* settings); + public static extern JPH_GearConstraint* JPH_GearConstraint_Create([NativeTypeName("const JPH_GearConstraintSettings *")] JPH_GearConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create(); + public static extern void JPH_GearConstraint_GetSettings(JPH_GearConstraint* constraint, JPH_GearConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create2([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_MotionType")] MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer objectLayer); + public static extern void JPH_GearConstraint_SetConstraints(JPH_GearConstraint* constraint, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear1, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear2); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create3([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_MotionType")] MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer objectLayer); + public static extern float JPH_GearConstraint_GetTotalLambda([NativeTypeName("const JPH_GearConstraint *")] JPH_GearConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_Destroy(JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_DestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_GetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* value); + public static extern JPH_Body* JPH_BodyInterface_CreateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_GetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Quat *")] quaternion* value); + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_GetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_BodyInterface_DestroyBodyWithoutID(JPH_BodyInterface* bodyInterface, JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID(JPH_BodyInterface* bodyInterface, JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_GetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID2(JPH_BodyInterface* bodyInterface, JPH_Body* body, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern JPH_Body* JPH_BodyInterface_UnassignBodyID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_BodyCreationSettings_GetUserData([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetUserData(JPH_BodyCreationSettings* settings, [NativeTypeName("uint64_t")] ulong value); + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ObjectLayer")] - public static extern ObjectLayer JPH_BodyCreationSettings_GetObjectLayer([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetObjectLayer(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer value); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotionType")] - public static extern MotionType JPH_BodyCreationSettings_GetMotionType([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_AddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetMotionType(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_MotionType")] MotionType value); + public static extern void JPH_BodyInterface_RemoveBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_AllowedDOFs")] - public static extern AllowedDOFs JPH_BodyCreationSettings_GetAllowedDOFs([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_RemoveAndDestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetAllowedDOFs(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_AllowedDOFs")] AllowedDOFs value); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_IsActive(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetAllowDynamicOrKinematic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern byte JPH_BodyInterface_IsAdded(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetAllowDynamicOrKinematic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern JPH_BodyType JPH_BodyInterface_GetBodyType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetIsSensor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetIsSensor(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_BodyInterface_GetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_GetCenterOfMassPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetCollideKinematicVsNonDynamic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern JPH_MotionType JPH_BodyInterface_GetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetUseManifoldReduction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_MotionType motionType, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetUseManifoldReduction(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern float JPH_BodyInterface_GetRestitution([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetApplyGyroscopicForce([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetRestitution(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float restitution); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetApplyGyroscopicForce(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern float JPH_BodyInterface_GetFriction([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotionQuality")] - public static extern MotionQuality JPH_BodyCreationSettings_GetMotionQuality([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetFriction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float friction); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetMotionQuality(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_MotionQuality")] MotionQuality value); + public static extern void JPH_BodyInterface_SetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_GetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetEnhancedInternalEdgeRemoval(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_BodyInterface_SetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyCreationSettings_GetAllowSleeping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_GetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetAllowSleeping(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_BodyInterface_SetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetFriction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetPositionAndRotationWhenChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetFriction(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_GetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetRestitution([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetPositionRotationAndVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetRestitution(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_GetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_CollisionGroup* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetLinearDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetLinearDamping(JPH_BodyCreationSettings* settings, float value); + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_BodyInterface_GetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetAngularDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetAngularDamping(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_NotifyShapeChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* previousCenterOfMass, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetMaxLinearVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_ActivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetMaxLinearVelocity(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_DeactivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetMaxAngularVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyInterface_GetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetMaxAngularVelocity(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_SetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_ObjectLayer")] uint layer); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetGravityFactor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_GetWorldTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetGravityFactor(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_GetCenterOfMassTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_BodyCreationSettings_GetNumVelocityStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_MoveKinematic(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetNumVelocityStepsOverride(JPH_BodyCreationSettings* settings, uint value); + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_ApplyBuoyancyImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_BodyCreationSettings_GetNumPositionStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetNumPositionStepsOverride(JPH_BodyCreationSettings* settings, uint value); + public static extern void JPH_BodyInterface_GetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_OverrideMassProperties")] - public static extern OverrideMassProperties JPH_BodyCreationSettings_GetOverrideMassProperties([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_AddLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetOverrideMassProperties(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_OverrideMassProperties")] OverrideMassProperties value); + public static extern void JPH_BodyInterface_AddLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyCreationSettings_GetInertiaMultiplier([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_BodyInterface_SetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetInertiaMultiplier(JPH_BodyCreationSettings* settings, float value); + public static extern void JPH_BodyInterface_GetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_GetMassPropertiesOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_MassProperties* result); + public static extern void JPH_BodyInterface_GetPointVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyCreationSettings_SetMassPropertiesOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + public static extern void JPH_BodyInterface_AddForce(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SoftBodyCreationSettings* JPH_SoftBodyCreationSettings_Create(); + public static extern void JPH_BodyInterface_AddForce2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_RVec3 *")] rvec3* point); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SoftBodyCreationSettings_Destroy(JPH_SoftBodyCreationSettings* settings); + public static extern void JPH_BodyInterface_AddTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* torque); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_Destroy(JPH_Constraint* constraint); + public static extern void JPH_BodyInterface_AddForceAndTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_Vec3 *")] float3* torque); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ConstraintType")] - public static extern ConstraintType JPH_Constraint_GetType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern void JPH_BodyInterface_AddImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ConstraintSubType")] - public static extern ConstraintSubType JPH_Constraint_GetSubType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern void JPH_BodyInterface_AddImpulse2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse, [NativeTypeName("JPH_RVec3 *")] rvec3* point); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Constraint_GetConstraintPriority([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern void JPH_BodyInterface_AddAngularImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularImpulse); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetConstraintPriority(JPH_Constraint* constraint, uint priority); + public static extern void JPH_BodyInterface_SetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_MotionQuality quality); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Constraint_GetNumVelocityStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern JPH_MotionQuality JPH_BodyInterface_GetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetNumVelocityStepsOverride(JPH_Constraint* constraint, uint value); + public static extern void JPH_BodyInterface_GetInverseInertia(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Constraint_GetNumPositionStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern void JPH_BodyInterface_SetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetNumPositionStepsOverride(JPH_Constraint* constraint, uint value); + public static extern void JPH_BodyInterface_SetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Constraint_GetEnabled([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern byte JPH_BodyInterface_GetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetEnabled(JPH_Constraint* constraint, [NativeTypeName("bool")] NativeBool enabled); + public static extern void JPH_BodyInterface_SetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("uint64_t")] ulong inUserData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_Constraint_GetUserData([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern ulong JPH_BodyInterface_GetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetUserData(JPH_Constraint* constraint, [NativeTypeName("uint64_t")] ulong userData); + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_BodyInterface_GetMaterial(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_NotifyShapeChanged(JPH_Constraint* constraint, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("JPH_Vec3 *")] float3* deltaCOM); + public static extern void JPH_BodyInterface_InvalidateContactCache(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_ResetWarmStart(JPH_Constraint* constraint); + public static extern void JPH_BodyLockInterface_LockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockRead* outLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Constraint_IsActive([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + public static extern void JPH_BodyLockInterface_UnlockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockRead* ioLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_SetupVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + public static extern void JPH_BodyLockInterface_LockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockWrite* outLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Constraint_WarmStartVelocityConstraint(JPH_Constraint* constraint, float warmStartImpulseRatio); + public static extern void JPH_BodyLockInterface_UnlockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockWrite* ioLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Constraint_SolveVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + public static extern JPH_BodyLockMultiRead* JPH_BodyLockInterface_LockMultiRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Constraint_SolvePositionConstraint(JPH_Constraint* constraint, float deltaTime, float baumgarte); + public static extern void JPH_BodyLockMultiRead_Destroy(JPH_BodyLockMultiRead* ioLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody1([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_BodyLockMultiRead_GetBody(JPH_BodyLockMultiRead* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody2([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + public static extern JPH_BodyLockMultiWrite* JPH_BodyLockInterface_LockMultiWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_TwoBodyConstraint_GetConstraintToBody1Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_BodyLockMultiWrite_Destroy(JPH_BodyLockMultiWrite* ioLock); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_TwoBodyConstraint_GetConstraintToBody2Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern JPH_Body* JPH_BodyLockMultiWrite_GetBody(JPH_BodyLockMultiWrite* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_FixedConstraintSettings_Init(JPH_FixedConstraintSettings* settings); + public static extern JPH_AllowedDOFs JPH_MotionProperties_GetAllowedDOFs([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_FixedConstraint* JPH_FixedConstraint_Create([NativeTypeName("const JPH_FixedConstraintSettings *")] JPH_FixedConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_MotionProperties_SetLinearDamping(JPH_MotionProperties* properties, float damping); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_FixedConstraint_GetSettings([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, JPH_FixedConstraintSettings* settings); + public static extern float JPH_MotionProperties_GetLinearDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_FixedConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_MotionProperties_SetAngularDamping(JPH_MotionProperties* properties, float damping); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_FixedConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_MotionProperties_GetAngularDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DistanceConstraintSettings_Init(JPH_DistanceConstraintSettings* settings); + public static extern void JPH_MotionProperties_SetMassProperties(JPH_MotionProperties* properties, JPH_AllowedDOFs allowedDOFs, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_DistanceConstraint* JPH_DistanceConstraint_Create([NativeTypeName("const JPH_DistanceConstraintSettings *")] JPH_DistanceConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern float JPH_MotionProperties_GetInverseMassUnchecked(JPH_MotionProperties* properties); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DistanceConstraint_GetSettings([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint, JPH_DistanceConstraintSettings* settings); + public static extern void JPH_MotionProperties_SetInverseMass(JPH_MotionProperties* properties, float inverseMass); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DistanceConstraint_SetDistance(JPH_DistanceConstraint* constraint, float minDistance, float maxDistance); + public static extern void JPH_MotionProperties_GetInverseInertiaDiagonal(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_DistanceConstraint_GetMinDistance(JPH_DistanceConstraint* constraint); + public static extern void JPH_MotionProperties_GetInertiaRotation(JPH_MotionProperties* properties, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_DistanceConstraint_GetMaxDistance(JPH_DistanceConstraint* constraint); + public static extern void JPH_MotionProperties_SetInverseInertia(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* diagonal, [NativeTypeName("JPH_Quat *")] quaternion* rot); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DistanceConstraint_GetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* result); + public static extern void JPH_MotionProperties_ScaleToMass(JPH_MotionProperties* properties, float mass); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DistanceConstraint_SetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* settings); + public static extern void JPH_RayCast_GetPointOnRay([NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_DistanceConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint); + public static extern void JPH_RRayCast_GetPointOnRay([NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraintSettings_Init(JPH_PointConstraintSettings* settings); + public static extern void JPH_MassProperties_DecomposePrincipalMomentsOfInertia(JPH_MassProperties* properties, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* rotation, [NativeTypeName("JPH_Vec3 *")] float3* diagonal); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_PointConstraint* JPH_PointConstraint_Create([NativeTypeName("const JPH_PointConstraintSettings *")] JPH_PointConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_MassProperties_ScaleToMass(JPH_MassProperties* properties, float mass); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_GetSettings([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, JPH_PointConstraintSettings* settings); + public static extern void JPH_MassProperties_GetEquivalentSolidBoxSize(float mass, [NativeTypeName("const JPH_Vec3 *")] float3* inertiaDiagonal, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_SetPoint1(JPH_PointConstraint* constraint, [NativeTypeName("JPH_ConstraintSpace")] ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + public static extern void JPH_CollideShapeSettings_Init(JPH_CollideShapeSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_SetPoint2(JPH_PointConstraint* constraint, [NativeTypeName("JPH_ConstraintSpace")] ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + public static extern void JPH_ShapeCastSettings_Init(JPH_ShapeCastSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("JPH_RayCastBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay2([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_RayCastBodyResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_PointConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideAABox([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraintSettings_Init(JPH_HingeConstraintSettings* settings); + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideSphere([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* center, float radius, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_HingeConstraint* JPH_HingeConstraint_Create([NativeTypeName("const JPH_HingeConstraintSettings *")] JPH_HingeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollidePoint([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetSettings(JPH_HingeConstraint* constraint, JPH_HingeConstraintSettings* settings); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CastRayCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay3([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_CollidePointCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollideShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetCurrentAngle(JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetMaxFrictionTorque(JPH_HingeConstraint* constraint, float frictionTorque); + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetMaxFrictionTorque(JPH_HingeConstraint* constraint); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Body_GetID([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* settings); + public static extern JPH_BodyType JPH_Body_GetBodyType([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsRigidBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetMotorState(JPH_HingeConstraint* constraint, [NativeTypeName("JPH_MotorState")] MotorState state); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSoftBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotorState")] - public static extern MotorState JPH_HingeConstraint_GetMotorState(JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsActive([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetTargetAngularVelocity(JPH_HingeConstraint* constraint, float angularVelocity); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsStatic([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetTargetAngularVelocity(JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsKinematic([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetTargetAngle(JPH_HingeConstraint* constraint, float angle); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetTargetAngle(JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_CanBeKinematicOrDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetLimits(JPH_HingeConstraint* constraint, float inLimitsMin, float inLimitsMax); + public static extern void JPH_Body_SetIsSensor(JPH_Body* body, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetLimitsMin(JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSensor([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetLimitsMax(JPH_HingeConstraint* constraint); + public static extern void JPH_Body_SetCollideKinematicVsNonDynamic(JPH_Body* body, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_HingeConstraint_HasLimits(JPH_HingeConstraint* constraint); + public static extern byte JPH_Body_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* result); + public static extern void JPH_Body_SetUseManifoldReduction(JPH_Body* body, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_SetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* settings); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReduction([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReductionWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_HingeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("float[2]")] float2* rotation); + public static extern void JPH_Body_SetApplyGyroscopicForce(JPH_Body* body, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetTotalLambdaRotationLimits([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetApplyGyroscopicForce([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_HingeConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + public static extern void JPH_Body_SetEnhancedInternalEdgeRemoval(JPH_Body* body, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraintSettings_Init(JPH_SliderConstraintSettings* settings); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraintSettings_SetSliderAxis(JPH_SliderConstraintSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemovalWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SliderConstraint* JPH_SliderConstraint_Create([NativeTypeName("const JPH_SliderConstraintSettings *")] JPH_SliderConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern JPH_MotionType JPH_Body_GetMotionType([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_GetSettings(JPH_SliderConstraint* constraint, JPH_SliderConstraintSettings* settings); + public static extern void JPH_Body_SetMotionType(JPH_Body* body, JPH_MotionType motionType); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetCurrentPosition(JPH_SliderConstraint* constraint); + [return: NativeTypeName("JPH_BroadPhaseLayer")] + public static extern byte JPH_Body_GetBroadPhaseLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetMaxFrictionForce(JPH_SliderConstraint* constraint, float frictionForce); + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Body_GetObjectLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetMaxFrictionForce(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_GetCollisionGroup([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_CollisionGroup* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetMotorSettings(JPH_SliderConstraint* constraint, JPH_MotorSettings* settings); + public static extern void JPH_Body_SetCollisionGroup(JPH_Body* body, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_GetMotorSettings([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, JPH_MotorSettings* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetAllowSleeping(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetMotorState(JPH_SliderConstraint* constraint, [NativeTypeName("JPH_MotorState")] MotorState state); + public static extern void JPH_Body_SetAllowSleeping(JPH_Body* body, [NativeTypeName("bool")] byte allowSleeping); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotorState")] - public static extern MotorState JPH_SliderConstraint_GetMotorState(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_ResetSleepTimer(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetTargetVelocity(JPH_SliderConstraint* constraint, float velocity); + public static extern float JPH_Body_GetFriction([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetTargetVelocity(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_SetFriction(JPH_Body* body, float friction); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetTargetPosition(JPH_SliderConstraint* constraint, float position); + public static extern float JPH_Body_GetRestitution([NativeTypeName("const JPH_Body *")] JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetTargetPosition(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_SetRestitution(JPH_Body* body, float restitution); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetLimits(JPH_SliderConstraint* constraint, float inLimitsMin, float inLimitsMax); + public static extern void JPH_Body_GetLinearVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetLimitsMin(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_SetLinearVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetLimitsMax(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_SetLinearVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_SliderConstraint_HasLimits(JPH_SliderConstraint* constraint); + public static extern void JPH_Body_GetAngularVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_GetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* result); + public static extern void JPH_Body_SetAngularVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_SetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* settings); + public static extern void JPH_Body_SetAngularVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("float[2]")] float2* position); + public static extern void JPH_Body_GetPointVelocityCOM(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* pointRelativeToCOM, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetTotalLambdaPositionLimits([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + public static extern void JPH_Body_GetPointVelocity(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SliderConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Body_AddForce(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SliderConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + public static extern void JPH_Body_AddForceAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConeConstraintSettings_Init(JPH_ConeConstraintSettings* settings); + public static extern void JPH_Body_AddTorque(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ConeConstraint* JPH_ConeConstraint_Create([NativeTypeName("const JPH_ConeConstraintSettings *")] JPH_ConeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_Body_GetAccumulatedForce(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConeConstraint_GetSettings(JPH_ConeConstraint* constraint, JPH_ConeConstraintSettings* settings); + public static extern void JPH_Body_GetAccumulatedTorque(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConeConstraint_SetHalfConeAngle(JPH_ConeConstraint* constraint, float halfConeAngle); + public static extern void JPH_Body_ResetForce(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ConeConstraint_GetCosHalfConeAngle([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + public static extern void JPH_Body_ResetTorque(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ConeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Body_ResetMotion(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ConeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + public static extern void JPH_Body_GetInverseInertia(JPH_Body* body, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SwingTwistConstraintSettings_Init(JPH_SwingTwistConstraintSettings* settings); + public static extern void JPH_Body_AddImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SwingTwistConstraint* JPH_SwingTwistConstraint_Create([NativeTypeName("const JPH_SwingTwistConstraintSettings *")] JPH_SwingTwistConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_Body_AddImpulseAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SwingTwistConstraint_GetSettings(JPH_SwingTwistConstraint* constraint, JPH_SwingTwistConstraintSettings* settings); + public static extern void JPH_Body_AddAngularImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* angularImpulse); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SwingTwistConstraint_GetNormalHalfConeAngle(JPH_SwingTwistConstraint* constraint); + public static extern void JPH_Body_MoveKinematic(JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SwingTwistConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_ApplyBuoyancyImpulse(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SwingTwistConstraint_GetTotalLambdaTwist([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsInBroadPhase(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingY([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsCollisionCacheInvalid(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingZ([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Body_GetShape(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SwingTwistConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Body_GetPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraintSettings_Init(JPH_SixDOFConstraintSettings* settings); + public static extern void JPH_Body_GetRotation([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_Quat *")] quaternion* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraintSettings_MakeFreeAxis(JPH_SixDOFConstraintSettings* settings, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern void JPH_Body_GetWorldTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_SixDOFConstraintSettings_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern void JPH_Body_GetCenterOfMassPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraintSettings_MakeFixedAxis(JPH_SixDOFConstraintSettings* settings, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern void JPH_Body_GetCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_SixDOFConstraintSettings_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern void JPH_Body_GetInverseCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraintSettings_SetLimitedAxis(JPH_SixDOFConstraintSettings* settings, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis, float min, float max); + public static extern void JPH_Body_GetWorldSpaceBounds([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_AABox* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SixDOFConstraint* JPH_SixDOFConstraint_Create([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_Body_GetWorldSpaceSurfaceNormal([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Vec3 *")] float3* normal); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraint_GetSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintSettings* settings); + public static extern JPH_MotionProperties* JPH_Body_GetMotionProperties(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SixDOFConstraint_GetLimitsMin(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern JPH_MotionProperties* JPH_Body_GetMotionPropertiesUnchecked(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_SixDOFConstraint_GetLimitsMax(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_SixDOFConstraintAxis")] SixDOFConstraintAxis axis); + public static extern void JPH_Body_SetUserData(JPH_Body* body, [NativeTypeName("uint64_t")] ulong userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Body_GetUserData(JPH_Body* body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern JPH_Body* JPH_Body_GetFixedToWorldBody(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorTranslation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_BroadPhaseLayerFilter_SetProcs([NativeTypeName("const JPH_BroadPhaseLayerFilter_Procs *")] JPH_BroadPhaseLayerFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern JPH_BroadPhaseLayerFilter* JPH_BroadPhaseLayerFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_GearConstraintSettings_Init(JPH_GearConstraintSettings* settings); + public static extern void JPH_BroadPhaseLayerFilter_Destroy(JPH_BroadPhaseLayerFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_GearConstraint* JPH_GearConstraint_Create([NativeTypeName("const JPH_GearConstraintSettings *")] JPH_GearConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + public static extern void JPH_ObjectLayerFilter_SetProcs([NativeTypeName("const JPH_ObjectLayerFilter_Procs *")] JPH_ObjectLayerFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_GearConstraint_GetSettings(JPH_GearConstraint* constraint, JPH_GearConstraintSettings* settings); + public static extern JPH_ObjectLayerFilter* JPH_ObjectLayerFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_GearConstraint_SetConstraints(JPH_GearConstraint* constraint, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear1, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear2); + public static extern void JPH_ObjectLayerFilter_Destroy(JPH_ObjectLayerFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_GearConstraint_GetTotalLambda([NativeTypeName("const JPH_GearConstraint *")] JPH_GearConstraint* constraint); + public static extern void JPH_BodyFilter_SetProcs([NativeTypeName("const JPH_BodyFilter_Procs *")] JPH_BodyFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_DestroyBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern JPH_BodyFilter* JPH_BodyFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_BodyInterface_CreateAndAddBody(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern void JPH_BodyFilter_Destroy(JPH_BodyFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateBody(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_ShapeFilter_SetProcs([NativeTypeName("const JPH_ShapeFilter_Procs *")] JPH_ShapeFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithID(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern JPH_ShapeFilter* JPH_ShapeFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithoutID(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + public static extern void JPH_ShapeFilter_Destroy(JPH_ShapeFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_DestroyBodyWithoutID(JPH_BodyInterface* @interface, JPH_Body* body); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_ShapeFilter_GetBodyID2(JPH_ShapeFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_AssignBodyID(JPH_BodyInterface* @interface, JPH_Body* body); + public static extern void JPH_ShapeFilter_SetBodyID2(JPH_ShapeFilter* filter, [NativeTypeName("JPH_BodyID")] uint id); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_AssignBodyID2(JPH_BodyInterface* @interface, JPH_Body* body, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern void JPH_SimShapeFilter_SetProcs([NativeTypeName("const JPH_SimShapeFilter_Procs *")] JPH_SimShapeFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_UnassignBodyID(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern JPH_SimShapeFilter* JPH_SimShapeFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateSoftBody(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + public static extern void JPH_SimShapeFilter_Destroy(JPH_SimShapeFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithID(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + public static extern void JPH_ContactListener_SetProcs([NativeTypeName("const JPH_ContactListener_Procs *")] JPH_ContactListener_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithoutID(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + public static extern JPH_ContactListener* JPH_ContactListener_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_BodyInterface_CreateAndAddSoftBody(JPH_BodyInterface* @interface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern void JPH_ContactListener_Destroy(JPH_ContactListener* listener); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern void JPH_BodyActivationListener_SetProcs([NativeTypeName("const JPH_BodyActivationListener_Procs *")] JPH_BodyActivationListener_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_RemoveBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern JPH_BodyActivationListener* JPH_BodyActivationListener_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_RemoveAndDestroyBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern void JPH_BodyActivationListener_Destroy(JPH_BodyActivationListener* listener); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_IsActive(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern void JPH_BodyDrawFilter_SetProcs([NativeTypeName("const JPH_BodyDrawFilter_Procs *")] JPH_BodyDrawFilter_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_IsAdded(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern JPH_BodyDrawFilter* JPH_BodyDrawFilter_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyType")] - public static extern BodyType JPH_BodyInterface_GetBodyType(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern void JPH_BodyDrawFilter_Destroy(JPH_BodyDrawFilter* filter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetLinearVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern void JPH_ContactManifold_GetWorldSpaceNormal([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetLinearVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern float JPH_ContactManifold_GetPenetrationDepth([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetCenterOfMassPosition(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotionType")] - public static extern MotionType JPH_BodyInterface_GetMotionType(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetMotionType(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, [NativeTypeName("JPH_MotionType")] MotionType motionType, [NativeTypeName("JPH_Activation")] Activation activationMode); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ContactManifold_GetPointCount([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyInterface_GetRestitution([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetRestitution(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, float restitution); + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyInterface_GetFriction([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID); + public static extern float JPH_ContactSettings_GetFriction(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetFriction(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, float friction); + public static extern void JPH_ContactSettings_SetFriction(JPH_ContactSettings* settings, float friction); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetPosition(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern float JPH_ContactSettings_GetRestitution(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetPosition(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + public static extern void JPH_ContactSettings_SetRestitution(JPH_ContactSettings* settings, float restitution); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetRotation(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern float JPH_ContactSettings_GetInvMassScale1(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetRotation(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_ContactSettings_SetInvMassScale1(JPH_ContactSettings* settings, float scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetPositionAndRotation(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern float JPH_ContactSettings_GetInvInertiaScale1(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetPositionAndRotationWhenChanged(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern void JPH_ContactSettings_SetInvInertiaScale1(JPH_ContactSettings* settings, float scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetPositionAndRotation(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + public static extern float JPH_ContactSettings_GetInvMassScale2(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetPositionRotationAndVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + public static extern void JPH_ContactSettings_SetInvMassScale2(JPH_ContactSettings* settings, float scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Shape *")] - public static extern JPH_Shape* JPH_BodyInterface_GetShape(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern float JPH_ContactSettings_GetInvInertiaScale2(JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetShape(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("bool")] NativeBool updateMassProperties, [NativeTypeName("JPH_Activation")] Activation activationMode); + public static extern void JPH_ContactSettings_SetInvInertiaScale2(JPH_ContactSettings* settings, float scale); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_NotifyShapeChanged(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* previousCenterOfMass, [NativeTypeName("bool")] NativeBool updateMassProperties, [NativeTypeName("JPH_Activation")] Activation activationMode); + [return: NativeTypeName("bool")] + public static extern byte JPH_ContactSettings_GetIsSensor([NativeTypeName("const JPH_ContactSettings *")] JPH_ContactSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_ActivateBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_ContactSettings_SetIsSensor(JPH_ContactSettings* settings, [NativeTypeName("bool")] byte sensor); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_DeactivateBody(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_ContactSettings_GetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ObjectLayer")] - public static extern ObjectLayer JPH_BodyInterface_GetObjectLayer(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_ContactSettings_SetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetObjectLayer(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer); + public static extern void JPH_ContactSettings_GetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetWorldTransform(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_ContactSettings_SetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetCenterOfMassTransform(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_CharacterBase_Destroy(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_MoveKinematic(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + public static extern float JPH_CharacterBase_GetCosMaxSlopeAngle(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_ApplyBuoyancyImpulse(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + public static extern void JPH_CharacterBase_SetMaxSlopeAngle(JPH_CharacterBase* character, float maxSlopeAngle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetLinearAndAngularVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + public static extern void JPH_CharacterBase_GetUp(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetLinearAndAngularVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + public static extern void JPH_CharacterBase_SetUp(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddLinearVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity); + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSlopeTooSteep(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddLinearAndAngularVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_CharacterBase_GetShape(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetAngularVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + public static extern JPH_GroundState JPH_CharacterBase_GetGroundState(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetAngularVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSupported(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetPointVelocity(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_CharacterBase_GetGroundPosition(JPH_CharacterBase* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddForce(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force); + public static extern void JPH_CharacterBase_GetGroundNormal(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* normal); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddForce2(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + public static extern void JPH_CharacterBase_GetGroundVelocity(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddTorque(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* torque); + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_CharacterBase_GetGroundMaterial(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddForceAndTorque(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_Vec3 *")] float3* torque); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterBase_GetGroundBodyId(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddImpulse(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse); + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_CharacterBase_GetGroundSubShapeId(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddImpulse2(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterBase_GetGroundUserData(JPH_CharacterBase* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_AddAngularImpulse(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularImpulse); + public static extern void JPH_CharacterSettings_Init(JPH_CharacterSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetMotionQuality(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_MotionQuality")] MotionQuality quality); + public static extern JPH_Character* JPH_Character_Create([NativeTypeName("const JPH_CharacterSettings *")] JPH_CharacterSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotionQuality")] - public static extern MotionQuality JPH_BodyInterface_GetMotionQuality(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_Character_AddToPhysicsSystem(JPH_Character* character, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_GetInverseInertia(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_Character_RemoveFromPhysicsSystem(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetGravityFactor(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, float value); + public static extern void JPH_Character_Activate(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_BodyInterface_GetGravityFactor(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_Character_PostSimulation(JPH_Character* character, float maxSeparationDistance, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetUseManifoldReduction(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_Character_SetLinearAndAngularVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BodyInterface_GetUseManifoldReduction(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_Character_GetLinearVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_SetUserData(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("uint64_t")] ulong inUserData); + public static extern void JPH_Character_SetLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_BodyInterface_GetUserData(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + public static extern void JPH_Character_AddLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_PhysicsMaterial *")] - public static extern JPH_PhysicsMaterial* JPH_BodyInterface_GetMaterial(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + public static extern void JPH_Character_AddImpulse(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyInterface_InvalidateContactCache(JPH_BodyInterface* @interface, [NativeTypeName("JPH_BodyID")] BodyID bodyId); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Character_GetBodyID([NativeTypeName("const JPH_Character *")] JPH_Character* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockInterface_LockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, JPH_BodyLockRead* outLock); + public static extern void JPH_Character_GetPositionAndRotation(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockInterface_UnlockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockRead* ioLock); + public static extern void JPH_Character_SetPositionAndRotation(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockInterface_LockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] BodyID bodyID, JPH_BodyLockWrite* outLock); + public static extern void JPH_Character_GetPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockInterface_UnlockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockWrite* ioLock); + public static extern void JPH_Character_SetPosition(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyLockMultiRead* JPH_BodyLockInterface_LockMultiRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] BodyID* bodyIDs, uint count); + public static extern void JPH_Character_GetRotation(JPH_Character* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockMultiRead_Destroy(JPH_BodyLockMultiRead* ioLock); + public static extern void JPH_Character_SetRotation(JPH_Character* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Body *")] - public static extern JPH_Body* JPH_BodyLockMultiRead_GetBody(JPH_BodyLockMultiRead* ioLock, uint bodyIndex); + public static extern void JPH_Character_GetCenterOfMassPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* result, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyLockMultiWrite* JPH_BodyLockInterface_LockMultiWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] BodyID* bodyIDs, uint count); + public static extern void JPH_Character_GetWorldTransform(JPH_Character* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyLockMultiWrite_Destroy(JPH_BodyLockMultiWrite* ioLock); + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Character_GetLayer([NativeTypeName("const JPH_Character *")] JPH_Character* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_BodyLockMultiWrite_GetBody(JPH_BodyLockMultiWrite* ioLock, uint bodyIndex); + public static extern void JPH_Character_SetLayer(JPH_Character* character, [NativeTypeName("JPH_ObjectLayer")] uint value, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_AllowedDOFs")] - public static extern AllowedDOFs JPH_MotionProperties_GetAllowedDOFs([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + public static extern void JPH_Character_SetShape(JPH_Character* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_SetLinearDamping(JPH_MotionProperties* properties, float damping); + public static extern void JPH_CharacterVirtualSettings_Init(JPH_CharacterVirtualSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_MotionProperties_GetLinearDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + public static extern JPH_CharacterVirtual* JPH_CharacterVirtual_Create([NativeTypeName("const JPH_CharacterVirtualSettings *")] JPH_CharacterVirtualSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_SetAngularDamping(JPH_MotionProperties* properties, float damping); + [return: NativeTypeName("JPH_CharacterID")] + public static extern uint JPH_CharacterVirtual_GetID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_MotionProperties_GetAngularDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + public static extern void JPH_CharacterVirtual_SetListener(JPH_CharacterVirtual* character, JPH_CharacterContactListener* listener); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_SetMassProperties(JPH_MotionProperties* properties, [NativeTypeName("JPH_AllowedDOFs")] AllowedDOFs allowedDOFs, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + public static extern void JPH_CharacterVirtual_SetCharacterVsCharacterCollision(JPH_CharacterVirtual* character, JPH_CharacterVsCharacterCollision* characterVsCharacterCollision); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_MotionProperties_GetInverseMassUnchecked(JPH_MotionProperties* properties); + public static extern void JPH_CharacterVirtual_GetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_SetInverseMass(JPH_MotionProperties* properties, float inverseMass); + public static extern void JPH_CharacterVirtual_SetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_GetInverseInertiaDiagonal(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_CharacterVirtual_GetPosition(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_GetInertiaRotation(JPH_MotionProperties* properties, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_CharacterVirtual_SetPosition(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_SetInverseInertia(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* diagonal, [NativeTypeName("JPH_Quat *")] quaternion* rot); + public static extern void JPH_CharacterVirtual_GetRotation(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MotionProperties_ScaleToMass(JPH_MotionProperties* properties, float mass); + public static extern void JPH_CharacterVirtual_SetRotation(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RayCast_GetPointOnRay([NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_CharacterVirtual_GetWorldTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RRayCast_GetPointOnRay([NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + public static extern void JPH_CharacterVirtual_GetCenterOfMassTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MassProperties_DecomposePrincipalMomentsOfInertia(JPH_MassProperties* properties, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* rotation, [NativeTypeName("JPH_Vec3 *")] float3* diagonal); + public static extern float JPH_CharacterVirtual_GetMass(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MassProperties_ScaleToMass(JPH_MassProperties* properties, float mass); + public static extern void JPH_CharacterVirtual_SetMass(JPH_CharacterVirtual* character, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_MassProperties_GetEquivalentSolidBoxSize(float mass, [NativeTypeName("const JPH_Vec3 *")] float3* inertiaDiagonal, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_CharacterVirtual_GetMaxStrength(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CollideShapeSettings_Init(JPH_CollideShapeSettings* settings); + public static extern void JPH_CharacterVirtual_SetMaxStrength(JPH_CharacterVirtual* character, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeCastSettings_Init(JPH_ShapeCastSettings* settings); + public static extern float JPH_CharacterVirtual_GetPenetrationRecoverySpeed(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BroadPhaseQuery_CastRay([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("JPH_RayCastBodyCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + public static extern void JPH_CharacterVirtual_SetPenetrationRecoverySpeed(JPH_CharacterVirtual* character, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BroadPhaseQuery_CastRay2([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_RayCastBodyResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + public static extern byte JPH_CharacterVirtual_GetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BroadPhaseQuery_CollideAABox([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + public static extern void JPH_CharacterVirtual_SetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BroadPhaseQuery_CollideSphere([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* center, float radius, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + public static extern float JPH_CharacterVirtual_GetCharacterPadding(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_BroadPhaseQuery_CollidePoint([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetMaxNumHits(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CastRay([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter); + public static extern void JPH_CharacterVirtual_SetMaxNumHits(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CastRay2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CastRayCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_CharacterVirtual_GetHitReductionCosMaxAngle(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CastRay3([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_CharacterVirtual_SetHitReductionCosMaxAngle(JPH_CharacterVirtual* character, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CollidePoint([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_CollidePointCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern byte JPH_CharacterVirtual_GetMaxHitsExceeded(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CollidePoint2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_CharacterVirtual_GetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CollideShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_CharacterVirtual_SetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CollideShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CollideShapeResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterVirtual_GetUserData([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CastShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CastShapeCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_CharacterVirtual_SetUserData(JPH_CharacterVirtual* character, [NativeTypeName("uint64_t")] ulong value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_NarrowPhaseQuery_CastShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollisionCollectorType")] CollisionCollectorType collectorType, [NativeTypeName("JPH_CastShapeResultCallback *")] nint callback, [NativeTypeName("void*")] nint userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterVirtual_GetInnerBodyID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_Body_GetID([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_CancelVelocityTowardsSteepSlopes(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* desiredVelocity, [NativeTypeName("JPH_Vec3 *")] float3* velocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyType")] - public static extern BodyType JPH_Body_GetBodyType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_StartTrackingContactChanges(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsRigidBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_FinishTrackingContactChanges(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsSoftBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_Update(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsActive([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_ExtendedUpdate(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_ExtendedUpdateSettings *")] JPH_ExtendedUpdateSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsStatic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVirtual_RefreshContacts(JPH_CharacterVirtual* character, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsKinematic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_CanWalkStairs(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* linearVelocity); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_WalkStairs(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_Vec3 *")] float3* stepUp, [NativeTypeName("const JPH_Vec3 *")] float3* stepForward, [NativeTypeName("const JPH_Vec3 *")] float3* stepForwardTest, [NativeTypeName("const JPH_Vec3 *")] float3* stepDownExtra, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_CanBeKinematicOrDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_StickToFloor(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* stepDown, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetIsSensor(JPH_Body* body, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_CharacterVirtual_UpdateGroundVelocity(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsSensor([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_SetShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetCollideKinematicVsNonDynamic(JPH_Body* body, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_CharacterVirtual_SetInnerBodyShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetNumActiveContacts(JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetUseManifoldReduction(JPH_Body* body, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_CharacterVirtual_GetActiveContact(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint index, JPH_CharacterVirtualContact* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetUseManifoldReduction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_HasCollidedWithBody(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_BodyID")] uint body); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetUseManifoldReductionWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); - - [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetApplyGyroscopicForce(JPH_Body* body, [NativeTypeName("bool")] NativeBool value); + public static extern byte JPH_CharacterVirtual_HasCollidedWith(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterID")] uint other); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetApplyGyroscopicForce([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern byte JPH_CharacterVirtual_HasCollidedWithCharacter(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* other); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetEnhancedInternalEdgeRemoval(JPH_Body* body, [NativeTypeName("bool")] NativeBool value); + public static extern void JPH_CharacterContactListener_SetProcs([NativeTypeName("const JPH_CharacterContactListener_Procs *")] JPH_CharacterContactListener_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern JPH_CharacterContactListener* JPH_CharacterContactListener_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetEnhancedInternalEdgeRemovalWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); + public static extern void JPH_CharacterContactListener_Destroy(JPH_CharacterContactListener* listener); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_MotionType")] - public static extern MotionType JPH_Body_GetMotionType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVsCharacterCollision_SetProcs([NativeTypeName("const JPH_CharacterVsCharacterCollision_Procs *")] JPH_CharacterVsCharacterCollision_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetMotionType(JPH_Body* body, [NativeTypeName("JPH_MotionType")] MotionType motionType); + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BroadPhaseLayer")] - public static extern BroadPhaseLayer JPH_Body_GetBroadPhaseLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_CreateSimple(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ObjectLayer")] - public static extern ObjectLayer JPH_Body_GetObjectLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_CharacterVsCharacterCollisionSimple_AddCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_GetAllowSleeping(JPH_Body* body); + public static extern void JPH_CharacterVsCharacterCollisionSimple_RemoveCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetAllowSleeping(JPH_Body* body, [NativeTypeName("bool")] NativeBool allowSleeping); + public static extern void JPH_CharacterVsCharacterCollision_Destroy(JPH_CharacterVsCharacterCollision* listener); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_ResetSleepTimer(JPH_Body* body); + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CollideShapeVsShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform2, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* collideShapeSettings, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Body_GetFriction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeLocalSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1InShape2LocalSpace, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1InShape2LocalSpace, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetFriction(JPH_Body* body, float friction); + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeWorldSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* inScale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_Body_GetRestitution([NativeTypeName("const JPH_Body *")] JPH_Body* body); + public static extern void JPH_DebugRenderer_SetProcs([NativeTypeName("const JPH_DebugRenderer_Procs *")] JPH_DebugRenderer_Procs* procs); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetRestitution(JPH_Body* body, float restitution); + public static extern JPH_DebugRenderer* JPH_DebugRenderer_Create(void* userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetLinearVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_Destroy(JPH_DebugRenderer* renderer); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetLinearVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_NextFrame(JPH_DebugRenderer* renderer); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetLinearVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_SetCameraPos(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetAngularVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_DrawLine(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetAngularVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_DrawWireBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetAngularVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_DrawWireBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetPointVelocityCOM(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* pointRelativeToCOM, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_DrawMarker(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Color")] uint color, float size); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetPointVelocity(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_DebugRenderer_DrawArrow(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color, float size); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddForce(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + public static extern void JPH_DebugRenderer_DrawCoordinateSystem(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float size); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddForceAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + public static extern void JPH_DebugRenderer_DrawPlane(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("JPH_Color")] uint color, float size); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddTorque(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + public static extern void JPH_DebugRenderer_DrawWireTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetAccumulatedForce(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + public static extern void JPH_DebugRenderer_DrawWireSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, int level); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetAccumulatedTorque(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + public static extern void JPH_DebugRenderer_DrawWireUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("JPH_Color")] uint color, int level); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_ResetForce(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_ResetTorque(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_ResetMotion(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetInverseInertia(JPH_Body* body, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + public static extern void JPH_DebugRenderer_DrawSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse); + public static extern void JPH_DebugRenderer_DrawUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("JPH_RMatrix4x4")] rmatrix4x4 matrix, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddImpulseAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + public static extern void JPH_DebugRenderer_DrawCapsule(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeightOfCylinder, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_AddAngularImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* angularImpulse); + public static extern void JPH_DebugRenderer_DrawCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeight, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_MoveKinematic(JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + public static extern void JPH_DebugRenderer_DrawOpenCone(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* top, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("const JPH_Vec3 *")] float3* perpendicular, float halfAngle, float length, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_ApplyBuoyancyImpulse(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + public static extern void JPH_DebugRenderer_DrawSwingConeLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float swingYHalfAngle, float swingZHalfAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsInBroadPhase(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawSwingPyramidLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float minSwingYAngle, float maxSwingYAngle, float minSwingZAngle, float maxSwingZAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Body_IsCollisionCacheInvalid(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawPie(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("const JPH_Vec3 *")] float3* axis, float minAngle, float maxAngle, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Shape *")] - public static extern JPH_Shape* JPH_Body_GetShape(JPH_Body* body); + public static extern void JPH_DebugRenderer_DrawTaperedCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* inMatrix, float top, float bottom, float topRadius, float bottomRadius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + public static extern JPH_Skeleton* JPH_Skeleton_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetRotation([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_Quat *")] quaternion* result); + public static extern void JPH_Skeleton_Destroy(JPH_Skeleton* skeleton); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetWorldTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetCenterOfMassPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint2(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, int parentIndex); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint3(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, [NativeTypeName("const char *")] sbyte* parentName); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetInverseCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern int JPH_Skeleton_GetJointCount([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetWorldSpaceBounds([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_AABox* result); + public static extern void JPH_Skeleton_GetJoint([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, int index, JPH_SkeletonJoint* joint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_GetWorldSpaceSurfaceNormal([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Vec3 *")] float3* normal); + public static extern int JPH_Skeleton_GetJointIndex([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MotionProperties* JPH_Body_GetMotionProperties(JPH_Body* body); + public static extern void JPH_Skeleton_CalculateParentJointIndices(JPH_Skeleton* skeleton); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_MotionProperties* JPH_Body_GetMotionPropertiesUnchecked(JPH_Body* body); + [return: NativeTypeName("bool")] + public static extern byte JPH_Skeleton_AreJointsCorrectlyOrdered([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Body_SetUserData(JPH_Body* body, [NativeTypeName("uint64_t")] ulong userData); + public static extern JPH_RagdollSettings* JPH_RagdollSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_Body_GetUserData(JPH_Body* body); + public static extern void JPH_RagdollSettings_Destroy(JPH_RagdollSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Body* JPH_Body_GetFixedToWorldBody(); + [return: NativeTypeName("const JPH_Skeleton *")] + public static extern JPH_Skeleton* JPH_RagdollSettings_GetSkeleton([NativeTypeName("const JPH_RagdollSettings *")] JPH_RagdollSettings* character); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BroadPhaseLayerFilter_SetProcs([NativeTypeName("const JPH_BroadPhaseLayerFilter_Procs *")] JPH_BroadPhaseLayerFilter_Procs* procs); + public static extern void JPH_RagdollSettings_SetSkeleton(JPH_RagdollSettings* character, JPH_Skeleton* skeleton); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BroadPhaseLayerFilter* JPH_BroadPhaseLayerFilter_Create([NativeTypeName("void*")] nint userData); + [return: NativeTypeName("bool")] + public static extern byte JPH_RagdollSettings_Stabilize(JPH_RagdollSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BroadPhaseLayerFilter_Destroy(JPH_BroadPhaseLayerFilter* filter); + public static extern void JPH_RagdollSettings_DisableParentChildCollisions(JPH_RagdollSettings* settings, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* jointMatrices, float minSeparationDistance); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ObjectLayerFilter_SetProcs([NativeTypeName("const JPH_ObjectLayerFilter_Procs *")] JPH_ObjectLayerFilter_Procs* procs); + public static extern void JPH_RagdollSettings_CalculateBodyIndexToConstraintIndex(JPH_RagdollSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ObjectLayerFilter* JPH_ObjectLayerFilter_Create([NativeTypeName("void*")] nint userData); + public static extern int JPH_RagdollSettings_GetConstraintIndexForBodyIndex(JPH_RagdollSettings* settings, int bodyIndex); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ObjectLayerFilter_Destroy(JPH_ObjectLayerFilter* filter); + public static extern void JPH_RagdollSettings_CalculateConstraintIndexToBodyIdxPair(JPH_RagdollSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyFilter_SetProcs([NativeTypeName("const JPH_BodyFilter_Procs *")] JPH_BodyFilter_Procs* procs); + public static extern JPH_Ragdoll* JPH_RagdollSettings_CreateRagdoll(JPH_RagdollSettings* settings, JPH_PhysicsSystem* system, [NativeTypeName("JPH_CollisionGroupID")] uint collisionGroup, [NativeTypeName("uint64_t")] ulong userData); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyFilter* JPH_BodyFilter_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_Ragdoll_Destroy(JPH_Ragdoll* ragdoll); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyFilter_Destroy(JPH_BodyFilter* filter); + public static extern void JPH_Ragdoll_AddToPhysicsSystem(JPH_Ragdoll* ragdoll, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeFilter_SetProcs([NativeTypeName("const JPH_ShapeFilter_Procs *")] JPH_ShapeFilter_Procs* procs); + public static extern void JPH_Ragdoll_RemoveFromPhysicsSystem(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ShapeFilter* JPH_ShapeFilter_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_Ragdoll_Activate(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeFilter_Destroy(JPH_ShapeFilter* filter); + [return: NativeTypeName("bool")] + public static extern byte JPH_Ragdoll_IsActive([NativeTypeName("const JPH_Ragdoll *")] JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_ShapeFilter_GetBodyID2(JPH_ShapeFilter* filter); + public static extern void JPH_Ragdoll_ResetWarmStart(JPH_Ragdoll* ragdoll); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ShapeFilter_SetBodyID2(JPH_ShapeFilter* filter, [NativeTypeName("JPH_BodyID")] BodyID id); + public static extern void JPH_EstimateCollisionResponse([NativeTypeName("const JPH_Body *")] JPH_Body* body1, [NativeTypeName("const JPH_Body *")] JPH_Body* body2, [NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, float combinedFriction, float combinedRestitution, float minVelocityForRestitution, [NativeTypeName("uint32_t")] uint numIterations, JPH_CollisionEstimationResult* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SimShapeFilter_SetProcs([NativeTypeName("const JPH_SimShapeFilter_Procs *")] JPH_SimShapeFilter_Procs* procs); + public static extern void JPH_VehicleConstraintSettings_Init(JPH_VehicleConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_SimShapeFilter* JPH_SimShapeFilter_Create([NativeTypeName("void*")] nint userData); + public static extern JPH_VehicleConstraint* JPH_VehicleConstraint_Create(JPH_Body* body, [NativeTypeName("const JPH_VehicleConstraintSettings *")] JPH_VehicleConstraintSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_SimShapeFilter_Destroy(JPH_SimShapeFilter* filter); + public static extern JPH_PhysicsStepListener* JPH_VehicleConstraint_AsPhysicsStepListener(JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactListener_SetProcs([NativeTypeName("const JPH_ContactListener_Procs *")] JPH_ContactListener_Procs* procs); + public static extern void JPH_VehicleConstraint_SetMaxPitchRollAngle(JPH_VehicleConstraint* constraint, float maxPitchRollAngle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_ContactListener* JPH_ContactListener_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_VehicleConstraint_SetVehicleCollisionTester(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactListener_Destroy(JPH_ContactListener* listener); + public static extern void JPH_VehicleConstraint_OverrideGravity(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyActivationListener_SetProcs([NativeTypeName("const JPH_BodyActivationListener_Procs *")] JPH_BodyActivationListener_Procs* procs); + [return: NativeTypeName("bool")] + public static extern byte JPH_VehicleConstraint_IsGravityOverridden([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyActivationListener* JPH_BodyActivationListener_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_VehicleConstraint_GetGravityOverride([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyActivationListener_Destroy(JPH_BodyActivationListener* listener); + public static extern void JPH_VehicleConstraint_ResetGravityOverride(JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyDrawFilter_SetProcs([NativeTypeName("const JPH_BodyDrawFilter_Procs *")] JPH_BodyDrawFilter_Procs* procs); + public static extern void JPH_VehicleConstraint_GetLocalForward([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_BodyDrawFilter* JPH_BodyDrawFilter_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_VehicleConstraint_GetLocalUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_BodyDrawFilter_Destroy(JPH_BodyDrawFilter* filter); + public static extern void JPH_VehicleConstraint_GetWorldUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactManifold_GetWorldSpaceNormal([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("JPH_Vec3 *")] float3* result); + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_VehicleConstraint_GetVehicleBody([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactManifold_GetPenetrationDepth([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + public static extern JPH_VehicleController* JPH_VehicleConstraint_GetController(JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_SubShapeID")] - public static extern uint JPH_ContactManifold_GetSubShapeID1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleConstraint_GetWheelsCount(JPH_VehicleConstraint* constraint); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_SubShapeID")] - public static extern uint JPH_ContactManifold_GetSubShapeID2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + public static extern JPH_Wheel* JPH_VehicleConstraint_GetWheel(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint index); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_ContactManifold_GetPointCount([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + public static extern void JPH_VehicleConstraint_GetWheelLocalBasis(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* outForward, [NativeTypeName("JPH_Vec3 *")] float3* outUp, [NativeTypeName("JPH_Vec3 *")] float3* outRight); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + public static extern void JPH_VehicleConstraint_GetWheelLocalTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + public static extern void JPH_VehicleConstraint_GetWheelWorldTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetFriction(JPH_ContactSettings* settings); + public static extern JPH_WheelSettings* JPH_WheelSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetFriction(JPH_ContactSettings* settings, float friction); + public static extern void JPH_WheelSettings_Destroy(JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetRestitution(JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetPosition([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetRestitution(JPH_ContactSettings* settings, float restitution); + public static extern void JPH_WheelSettings_SetPosition(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetInvMassScale1(JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetInvMassScale1(JPH_ContactSettings* settings, float scale); + public static extern void JPH_WheelSettings_SetSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetInvInertiaScale1(JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetSuspensionDirection([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetInvInertiaScale1(JPH_ContactSettings* settings, float scale); + public static extern void JPH_WheelSettings_SetSuspensionDirection(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetInvMassScale2(JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetSteeringAxis([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetInvMassScale2(JPH_ContactSettings* settings, float scale); + public static extern void JPH_WheelSettings_SetSteeringAxis(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_ContactSettings_GetInvInertiaScale2(JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetWheelUp([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetInvInertiaScale2(JPH_ContactSettings* settings, float scale); + public static extern void JPH_WheelSettings_SetWheelUp(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_ContactSettings_GetIsSensor([NativeTypeName("const JPH_ContactSettings *")] JPH_ContactSettings* settings); + public static extern void JPH_WheelSettings_GetWheelForward([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetIsSensor(JPH_ContactSettings* settings, [NativeTypeName("bool")] NativeBool sensor); + public static extern void JPH_WheelSettings_SetWheelForward(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_GetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_WheelSettings_GetSuspensionMinLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_WheelSettings_SetSuspensionMinLength(JPH_WheelSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_GetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern float JPH_WheelSettings_GetSuspensionMaxLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_ContactSettings_SetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_WheelSettings_SetSuspensionMaxLength(JPH_WheelSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_Destroy(JPH_CharacterBase* character); + public static extern float JPH_WheelSettings_GetSuspensionPreloadLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterBase_GetCosMaxSlopeAngle(JPH_CharacterBase* character); + public static extern void JPH_WheelSettings_SetSuspensionPreloadLength(JPH_WheelSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_SetMaxSlopeAngle(JPH_CharacterBase* character, float maxSlopeAngle); + public static extern void JPH_WheelSettings_GetSuspensionSpring([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, JPH_SpringSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_GetUp(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_WheelSettings_SetSuspensionSpring(JPH_WheelSettings* settings, JPH_SpringSettings* springSettings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_SetUp(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + public static extern float JPH_WheelSettings_GetRadius([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterBase_IsSlopeTooSteep(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + public static extern void JPH_WheelSettings_SetRadius(JPH_WheelSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Shape *")] - public static extern JPH_Shape* JPH_CharacterBase_GetShape(JPH_CharacterBase* character); + public static extern float JPH_WheelSettings_GetWidth([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_GroundState")] - public static extern GroundState JPH_CharacterBase_GetGroundState(JPH_CharacterBase* character); + public static extern void JPH_WheelSettings_SetWidth(JPH_WheelSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterBase_IsSupported(JPH_CharacterBase* character); + public static extern byte JPH_WheelSettings_GetEnableSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_GetGroundPosition(JPH_CharacterBase* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + public static extern void JPH_WheelSettings_SetEnableSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_GetGroundNormal(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* normal); + public static extern JPH_Wheel* JPH_Wheel_Create([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterBase_GetGroundVelocity(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_Wheel_Destroy(JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_PhysicsMaterial *")] - public static extern JPH_PhysicsMaterial* JPH_CharacterBase_GetGroundMaterial(JPH_CharacterBase* character); + [return: NativeTypeName("const JPH_WheelSettings *")] + public static extern JPH_WheelSettings* JPH_Wheel_GetSettings([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_CharacterBase_GetGroundBodyId(JPH_CharacterBase* character); + public static extern float JPH_Wheel_GetAngularVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_SubShapeID")] - public static extern uint JPH_CharacterBase_GetGroundSubShapeId(JPH_CharacterBase* character); + public static extern void JPH_Wheel_SetAngularVelocity(JPH_Wheel* wheel, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_CharacterBase_GetGroundUserData(JPH_CharacterBase* character); + public static extern float JPH_Wheel_GetRotationAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterSettings_Init(JPH_CharacterSettings* settings); + public static extern void JPH_Wheel_SetRotationAngle(JPH_Wheel* wheel, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Character* JPH_Character_Create([NativeTypeName("const JPH_CharacterSettings *")] JPH_CharacterSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + public static extern float JPH_Wheel_GetSteerAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_AddToPhysicsSystem(JPH_Character* character, [NativeTypeName("JPH_Activation")] Activation activationMode, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_Wheel_SetSteerAngle(JPH_Wheel* wheel, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_RemoveFromPhysicsSystem(JPH_Character* character, [NativeTypeName("bool")] NativeBool lockBodies); + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasContact([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_Activate(JPH_Character* character, [NativeTypeName("bool")] NativeBool lockBodies); + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Wheel_GetContactBodyID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_PostSimulation(JPH_Character* character, float maxSeparationDistance, [NativeTypeName("bool")] NativeBool lockBodies); + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_Wheel_GetContactSubShapeID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetLinearAndAngularVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_Wheel_GetContactPosition([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_RVec3 *")] rvec3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetLinearVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern void JPH_Wheel_GetContactPointVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_Wheel_GetContactNormal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_AddLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_Wheel_GetContactLongitudinal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_AddImpulse(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_Wheel_GetContactLateral([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_Character_GetBodyID([NativeTypeName("const JPH_Character *")] JPH_Character* character); + public static extern float JPH_Wheel_GetSuspensionLength([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetPositionAndRotation(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern float JPH_Wheel_GetSuspensionLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetPositionAndRotation(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Activation")] Activation activationMode, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern float JPH_Wheel_GetLongitudinalLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern float JPH_Wheel_GetLateralLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetPosition(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Activation")] Activation activationMode, [NativeTypeName("bool")] NativeBool lockBodies); + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasHitHardPoint([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetRotation(JPH_Character* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_VehicleAntiRollBar_Init(JPH_VehicleAntiRollBar* antiRollBar); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetRotation(JPH_Character* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Activation")] Activation activationMode, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_VehicleEngineSettings_Init(JPH_VehicleEngineSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetCenterOfMassPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* result, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_VehicleDifferentialSettings_Init(JPH_VehicleDifferentialSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_GetWorldTransform(JPH_Character* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern JPH_VehicleTransmissionSettings* JPH_VehicleTransmissionSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_ObjectLayer")] - public static extern ObjectLayer JPH_Character_GetLayer([NativeTypeName("const JPH_Character *")] JPH_Character* character); + public static extern void JPH_VehicleTransmissionSettings_Destroy(JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetLayer(JPH_Character* character, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer value, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern JPH_TransmissionMode JPH_VehicleTransmissionSettings_GetMode([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Character_SetShape(JPH_Character* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_VehicleTransmissionSettings_SetMode(JPH_VehicleTransmissionSettings* settings, JPH_TransmissionMode value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtualSettings_Init(JPH_CharacterVirtualSettings* settings); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CharacterVirtual* JPH_CharacterVirtual_Create([NativeTypeName("const JPH_CharacterVirtualSettings *")] JPH_CharacterVirtualSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + public static extern float JPH_VehicleTransmissionSettings_GetGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_CharacterID")] - public static extern uint JPH_CharacterVirtual_GetID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetListener(JPH_CharacterVirtual* character, JPH_CharacterContactListener* listener); + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetCharacterVsCharacterCollision(JPH_CharacterVirtual* character, JPH_CharacterVsCharacterCollision* characterVsCharacterCollision); + public static extern void JPH_VehicleTransmissionSettings_SetGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetReverseGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + public static extern float JPH_VehicleTransmissionSettings_GetReverseGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetPosition(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetPosition(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetReverseGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetRotation(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetRotation(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + public static extern float JPH_VehicleTransmissionSettings_GetSwitchTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetWorldTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern void JPH_VehicleTransmissionSettings_SetSwitchTime(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetCenterOfMassTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + public static extern float JPH_VehicleTransmissionSettings_GetClutchReleaseTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterVirtual_GetMass(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetClutchReleaseTime(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetMass(JPH_CharacterVirtual* character, float value); + public static extern float JPH_VehicleTransmissionSettings_GetSwitchLatency([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterVirtual_GetMaxStrength(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetSwitchLatency(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetMaxStrength(JPH_CharacterVirtual* character, float value); + public static extern float JPH_VehicleTransmissionSettings_GetShiftUpRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterVirtual_GetPenetrationRecoverySpeed(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetShiftUpRPM(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetPenetrationRecoverySpeed(JPH_CharacterVirtual* character, float value); + public static extern float JPH_VehicleTransmissionSettings_GetShiftDownRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_GetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetShiftDownRPM(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character, [NativeTypeName("bool")] NativeBool value); + public static extern float JPH_VehicleTransmissionSettings_GetClutchStrength([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterVirtual_GetCharacterPadding(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleTransmissionSettings_SetClutchStrength(JPH_VehicleTransmissionSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_CharacterVirtual_GetMaxNumHits(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleCollisionTester_Destroy(JPH_VehicleCollisionTester* tester); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetMaxNumHits(JPH_CharacterVirtual* character, uint value); + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_VehicleCollisionTester_GetObjectLayer([NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern float JPH_CharacterVirtual_GetHitReductionCosMaxAngle(JPH_CharacterVirtual* character); + public static extern void JPH_VehicleCollisionTester_SetObjectLayer(JPH_VehicleCollisionTester* tester, [NativeTypeName("JPH_ObjectLayer")] uint value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetHitReductionCosMaxAngle(JPH_CharacterVirtual* character, float value); + public static extern JPH_VehicleCollisionTesterRay* JPH_VehicleCollisionTesterRay_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_GetMaxHitsExceeded(JPH_CharacterVirtual* character); + public static extern JPH_VehicleCollisionTesterCastSphere* JPH_VehicleCollisionTesterCastSphere_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + public static extern JPH_VehicleCollisionTesterCastCylinder* JPH_VehicleCollisionTesterCastCylinder_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float convexRadiusFraction); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + public static extern void JPH_VehicleControllerSettings_Destroy(JPH_VehicleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("uint64_t")] - public static extern ulong JPH_CharacterVirtual_GetUserData([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + [return: NativeTypeName("const JPH_VehicleConstraint *")] + public static extern JPH_VehicleConstraint* JPH_VehicleController_GetConstraint(JPH_VehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetUserData(JPH_CharacterVirtual* character, [NativeTypeName("uint64_t")] ulong value); + public static extern JPH_WheelSettingsWV* JPH_WheelSettingsWV_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("JPH_BodyID")] - public static extern BodyID JPH_CharacterVirtual_GetInnerBodyID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + public static extern float JPH_WheelSettingsWV_GetInertia([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_CancelVelocityTowardsSteepSlopes(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* desiredVelocity, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + public static extern void JPH_WheelSettingsWV_SetInertia(JPH_WheelSettingsWV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_StartTrackingContactChanges(JPH_CharacterVirtual* character); + public static extern float JPH_WheelSettingsWV_GetAngularDamping([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_FinishTrackingContactChanges(JPH_CharacterVirtual* character); + public static extern void JPH_WheelSettingsWV_SetAngularDamping(JPH_WheelSettingsWV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_Update(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_WheelSettingsWV_GetMaxSteerAngle([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_ExtendedUpdate(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_ExtendedUpdateSettings *")] JPH_ExtendedUpdateSettings* settings, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_WheelSettingsWV_SetMaxSteerAngle(JPH_WheelSettingsWV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_RefreshContacts(JPH_CharacterVirtual* character, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_WheelSettingsWV_GetMaxBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_CanWalkStairs(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* linearVelocity); + public static extern void JPH_WheelSettingsWV_SetMaxBrakeTorque(JPH_WheelSettingsWV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_WalkStairs(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_Vec3 *")] float3* stepUp, [NativeTypeName("const JPH_Vec3 *")] float3* stepForward, [NativeTypeName("const JPH_Vec3 *")] float3* stepForwardTest, [NativeTypeName("const JPH_Vec3 *")] float3* stepDownExtra, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_WheelSettingsWV_GetMaxHandBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_StickToFloor(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* stepDown, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_WheelSettingsWV_SetMaxHandBrakeTorque(JPH_WheelSettingsWV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_UpdateGroundVelocity(JPH_CharacterVirtual* character); + public static extern JPH_WheelWV* JPH_WheelWV_Create([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_SetShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("JPH_ObjectLayer")] ObjectLayer layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + [return: NativeTypeName("const JPH_WheelSettingsWV *")] + public static extern JPH_WheelSettingsWV* JPH_WheelWV_GetSettings([NativeTypeName("const JPH_WheelWV *")] JPH_WheelWV* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_SetInnerBodyShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + public static extern void JPH_WheelWV_ApplyTorque(JPH_WheelWV* wheel, float torque, float deltaTime); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_CharacterVirtual_GetNumActiveContacts(JPH_CharacterVirtual* character); + public static extern JPH_WheeledVehicleControllerSettings* JPH_WheeledVehicleControllerSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVirtual_GetActiveContact(JPH_CharacterVirtual* character, uint index, JPH_CharacterVirtualContact* result); + public static extern void JPH_WheeledVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_HasCollidedWithBody(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_BodyID")] BodyID body); + public static extern void JPH_WheeledVehicleControllerSettings_SetEngine(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_HasCollidedWith(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterID")] uint other); + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_WheeledVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CharacterVirtual_HasCollidedWithCharacter(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* other); + public static extern void JPH_WheeledVehicleControllerSettings_SetTransmission(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterContactListener_SetProcs([NativeTypeName("const JPH_CharacterContactListener_Procs *")] JPH_CharacterContactListener_Procs* procs); + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_WheeledVehicleControllerSettings_GetDifferentialsCount([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CharacterContactListener* JPH_CharacterContactListener_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialsCount(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterContactListener_Destroy(JPH_CharacterContactListener* listener); + public static extern void JPH_WheeledVehicleControllerSettings_GetDifferential([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, JPH_VehicleDifferentialSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVsCharacterCollision_SetProcs([NativeTypeName("const JPH_CharacterVsCharacterCollision_Procs *")] JPH_CharacterVsCharacterCollision_Procs* procs); + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferential(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_Create([NativeTypeName("void*")] nint userData); + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentials(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* values, [NativeTypeName("uint32_t")] uint count); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_CreateSimple(); + public static extern float JPH_WheeledVehicleControllerSettings_GetDifferentialLimitedSlipRatio([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVsCharacterCollisionSimple_AddCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialLimitedSlipRatio(JPH_WheeledVehicleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVsCharacterCollisionSimple_RemoveCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + public static extern void JPH_WheeledVehicleController_SetDriverInput(JPH_WheeledVehicleController* controller, float forward, float right, float brake, float handBrake); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_CharacterVsCharacterCollision_Destroy(JPH_CharacterVsCharacterCollision* listener); + public static extern void JPH_WheeledVehicleController_SetForwardInput(JPH_WheeledVehicleController* controller, float forward); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CollisionDispatch_CollideShapeVsShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform2, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* collideShapeSettings, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_WheeledVehicleController_GetForwardInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CollisionDispatch_CastShapeVsShapeLocalSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1InShape2LocalSpace, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1InShape2LocalSpace, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern void JPH_WheeledVehicleController_SetRightInput(JPH_WheeledVehicleController* controller, float rightRatio); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_CollisionDispatch_CastShapeVsShapeWorldSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* inScale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] nint callback, [NativeTypeName("void*")] nint userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + public static extern float JPH_WheeledVehicleController_GetRightInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_SetProcs([NativeTypeName("const JPH_DebugRenderer_Procs *")] JPH_DebugRenderer_Procs* procs); + public static extern void JPH_WheeledVehicleController_SetBrakeInput(JPH_WheeledVehicleController* controller, float brakeInput); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_DebugRenderer* JPH_DebugRenderer_Create([NativeTypeName("void*")] nint userData); + public static extern float JPH_WheeledVehicleController_GetBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_Destroy(JPH_DebugRenderer* renderer); + public static extern void JPH_WheeledVehicleController_SetHandBrakeInput(JPH_WheeledVehicleController* controller, float handBrakeInput); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_NextFrame(JPH_DebugRenderer* renderer); + public static extern float JPH_WheeledVehicleController_GetHandBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_SetCameraPos(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + public static extern float JPH_WheeledVehicleController_GetWheelSpeedAtClutch([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawLine(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color); + public static extern JPH_WheelSettingsTV* JPH_WheelSettingsTV_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawWireBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + public static extern float JPH_WheelSettingsTV_GetLongitudinalFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawWireBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + public static extern void JPH_WheelSettingsTV_SetLongitudinalFriction(JPH_WheelSettingsTV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawMarker(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Color")] uint color, float size); + public static extern float JPH_WheelSettingsTV_GetLateralFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawArrow(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color, float size); + public static extern void JPH_WheelSettingsTV_SetLateralFriction(JPH_WheelSettingsTV* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawCoordinateSystem(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float size); + public static extern JPH_WheelTV* JPH_WheelTV_Create([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawPlane(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("JPH_Color")] uint color, float size); + [return: NativeTypeName("const JPH_WheelSettingsTV *")] + public static extern JPH_WheelSettingsTV* JPH_WheelTV_GetSettings([NativeTypeName("const JPH_WheelTV *")] JPH_WheelTV* wheel); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawWireTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color); + public static extern JPH_TrackedVehicleControllerSettings* JPH_TrackedVehicleControllerSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawWireSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, int level); + public static extern void JPH_TrackedVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawWireUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("JPH_Color")] uint color, int level); + public static extern void JPH_TrackedVehicleControllerSettings_SetEngine(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow); + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_TrackedVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleControllerSettings_SetTransmission(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleController_SetDriverInput(JPH_TrackedVehicleController* controller, float forward, float leftRatio, float rightRatio, float brake); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern float JPH_TrackedVehicleController_GetForwardInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("JPH_RMatrix4x4")] rmatrix4x4 matrix, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleController_SetForwardInput(JPH_TrackedVehicleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawCapsule(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeightOfCylinder, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern float JPH_TrackedVehicleController_GetLeftRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeight, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleController_SetLeftRatio(JPH_TrackedVehicleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawOpenCone(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* top, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("const JPH_Vec3 *")] float3* perpendicular, float halfAngle, float length, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern float JPH_TrackedVehicleController_GetRightRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawSwingConeLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float swingYHalfAngle, float swingZHalfAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleController_SetRightRatio(JPH_TrackedVehicleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawSwingPyramidLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float minSwingYAngle, float maxSwingYAngle, float minSwingZAngle, float maxSwingZAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern float JPH_TrackedVehicleController_GetBrakeInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawPie(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("const JPH_Vec3 *")] float3* axis, float minAngle, float maxAngle, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern void JPH_TrackedVehicleController_SetBrakeInput(JPH_TrackedVehicleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_DebugRenderer_DrawTaperedCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* inMatrix, float top, float bottom, float topRadius, float bottomRadius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + public static extern JPH_MotorcycleControllerSettings* JPH_MotorcycleControllerSettings_Create(); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Skeleton* JPH_Skeleton_Create(); + public static extern float JPH_MotorcycleControllerSettings_GetMaxLeanAngle([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Skeleton_Destroy(JPH_Skeleton* skeleton); + public static extern void JPH_MotorcycleControllerSettings_SetMaxLeanAngle(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Skeleton_AddJoint(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Skeleton_AddJoint2(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, int parentIndex); + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringConstant(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern uint JPH_Skeleton_AddJoint3(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, [NativeTypeName("const char *")] sbyte* parentName); + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern int JPH_Skeleton_GetJointCount([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringDamping(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Skeleton_GetJoint([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, int index, JPH_SkeletonJoint* joint); + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern int JPH_Skeleton_GetJointIndex([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Skeleton_CalculateParentJointIndices(JPH_Skeleton* skeleton); + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Skeleton_AreJointsCorrectlyOrdered([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_RagdollSettings* JPH_RagdollSettings_Create(); + public static extern float JPH_MotorcycleControllerSettings_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RagdollSettings_Destroy(JPH_RagdollSettings* settings); + public static extern void JPH_MotorcycleControllerSettings_SetLeanSmoothingFactor(JPH_MotorcycleControllerSettings* settings, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("const JPH_Skeleton *")] - public static extern JPH_Skeleton* JPH_RagdollSettings_GetSkeleton([NativeTypeName("const JPH_RagdollSettings *")] JPH_RagdollSettings* character); + public static extern float JPH_MotorcycleController_GetWheelBase([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RagdollSettings_SetSkeleton(JPH_RagdollSettings* character, JPH_Skeleton* skeleton); + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanControllerEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_RagdollSettings_Stabilize(JPH_RagdollSettings* settings); + public static extern void JPH_MotorcycleController_EnableLeanController(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RagdollSettings_DisableParentChildCollisions(JPH_RagdollSettings* settings, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* jointMatrices, float minSeparationDistance); + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanSteeringLimitEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RagdollSettings_CalculateBodyIndexToConstraintIndex(JPH_RagdollSettings* settings); + public static extern void JPH_MotorcycleController_EnableLeanSteeringLimit(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern int JPH_RagdollSettings_GetConstraintIndexForBodyIndex(JPH_RagdollSettings* settings, int bodyIndex); + public static extern float JPH_MotorcycleController_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_RagdollSettings_CalculateConstraintIndexToBodyIdxPair(JPH_RagdollSettings* settings); + public static extern void JPH_MotorcycleController_SetLeanSpringConstant(JPH_MotorcycleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern JPH_Ragdoll* JPH_RagdollSettings_CreateRagdoll(JPH_RagdollSettings* settings, JPH_PhysicsSystem* system, [NativeTypeName("JPH_CollisionGroupID")] uint collisionGroup, [NativeTypeName("uint64_t")] ulong userData); + public static extern float JPH_MotorcycleController_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Ragdoll_Destroy(JPH_Ragdoll* ragdoll); + public static extern void JPH_MotorcycleController_SetLeanSpringDamping(JPH_MotorcycleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Ragdoll_AddToPhysicsSystem(JPH_Ragdoll* ragdoll, [NativeTypeName("JPH_Activation")] Activation activationMode, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Ragdoll_RemoveFromPhysicsSystem(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Ragdoll_Activate(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - [return: NativeTypeName("bool")] - public static extern NativeBool JPH_Ragdoll_IsActive([NativeTypeName("const JPH_Ragdoll *")] JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] NativeBool lockBodies); + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleController* controller, float value); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_Ragdoll_ResetWarmStart(JPH_Ragdoll* ragdoll); + public static extern float JPH_MotorcycleController_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern void JPH_EstimateCollisionResponse([NativeTypeName("const JPH_Body *")] JPH_Body* body1, [NativeTypeName("const JPH_Body *")] JPH_Body* body2, [NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, float combinedFriction, float combinedRestitution, float minVelocityForRestitution, uint numIterations, JPH_CollisionEstimationResult* result); + public static extern void JPH_MotorcycleController_SetLeanSmoothingFactor(JPH_MotorcycleController* controller, float value); } } diff --git a/Jolt/Bindings/UnsafeBindings.cs.meta b/Jolt/Bindings/UnsafeBindings.cs.meta new file mode 100644 index 0000000..c5112a0 --- /dev/null +++ b/Jolt/Bindings/UnsafeBindings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 023949b42aa9c4a19a12fbebd8f9c874 \ No newline at end of file diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..81a6573ad574633390e3793bfca84376340d7d07 GIT binary patch literal 13824 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 HqYS(P5vz{5 literal 0 HcmV?d00001 diff --git a/Jolt/Attributes.meta b/Jolt~/Attributes.meta similarity index 100% rename from Jolt/Attributes.meta rename to Jolt~/Attributes.meta diff --git a/Jolt/Attributes/ExpectedStructSizeAttribute.cs b/Jolt~/Attributes/ExpectedStructSizeAttribute.cs similarity index 100% rename from Jolt/Attributes/ExpectedStructSizeAttribute.cs rename to Jolt~/Attributes/ExpectedStructSizeAttribute.cs diff --git a/Jolt/Attributes/ExpectedStructSizeAttribute.cs.meta b/Jolt~/Attributes/ExpectedStructSizeAttribute.cs.meta similarity index 100% rename from Jolt/Attributes/ExpectedStructSizeAttribute.cs.meta rename to Jolt~/Attributes/ExpectedStructSizeAttribute.cs.meta diff --git a/Jolt/Attributes/GenerateBindingsAttribute.cs b/Jolt~/Attributes/GenerateBindingsAttribute.cs similarity index 100% rename from Jolt/Attributes/GenerateBindingsAttribute.cs rename to Jolt~/Attributes/GenerateBindingsAttribute.cs diff --git a/Jolt/Attributes/GenerateBindingsAttribute.cs.meta b/Jolt~/Attributes/GenerateBindingsAttribute.cs.meta similarity index 100% rename from Jolt/Attributes/GenerateBindingsAttribute.cs.meta rename to Jolt~/Attributes/GenerateBindingsAttribute.cs.meta diff --git a/Jolt~/Bindings.meta b/Jolt~/Bindings.meta new file mode 100644 index 0000000..6c69647 --- /dev/null +++ b/Jolt~/Bindings.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 876712de4e0546ad98291e03035fe4b6 +timeCreated: 1704838615 \ No newline at end of file diff --git a/Jolt/Bindings/Bindings.cs b/Jolt~/Bindings/Bindings.cs similarity index 100% rename from Jolt/Bindings/Bindings.cs rename to Jolt~/Bindings/Bindings.cs diff --git a/Jolt/Bindings/Bindings.cs.meta b/Jolt~/Bindings/Bindings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings.cs.meta rename to Jolt~/Bindings/Bindings.cs.meta diff --git a/Jolt/Bindings/Bindings_Handles.cs b/Jolt~/Bindings/Bindings_Handles.cs similarity index 100% rename from Jolt/Bindings/Bindings_Handles.cs rename to Jolt~/Bindings/Bindings_Handles.cs diff --git a/Jolt/Bindings/Bindings_Handles.cs.meta b/Jolt~/Bindings/Bindings_Handles.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_Handles.cs.meta rename to Jolt~/Bindings/Bindings_Handles.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH.cs b/Jolt~/Bindings/Bindings_JPH.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH.cs rename to Jolt~/Bindings/Bindings_JPH.cs diff --git a/Jolt/Bindings/Bindings_JPH.cs.meta b/Jolt~/Bindings/Bindings_JPH.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH.cs.meta rename to Jolt~/Bindings/Bindings_JPH.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_Body.cs b/Jolt~/Bindings/Bindings_JPH_Body.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Body.cs rename to Jolt~/Bindings/Bindings_JPH_Body.cs diff --git a/Jolt/Bindings/Bindings_JPH_Body.cs.meta b/Jolt~/Bindings/Bindings_JPH_Body.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Body.cs.meta rename to Jolt~/Bindings/Bindings_JPH_Body.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BodyActivationListener.cs b/Jolt~/Bindings/Bindings_JPH_BodyActivationListener.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyActivationListener.cs rename to Jolt~/Bindings/Bindings_JPH_BodyActivationListener.cs diff --git a/Jolt/Bindings/Bindings_JPH_BodyActivationListener.cs.meta b/Jolt~/Bindings/Bindings_JPH_BodyActivationListener.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyActivationListener.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BodyActivationListener.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BodyCreationSettings.cs b/Jolt~/Bindings/Bindings_JPH_BodyCreationSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyCreationSettings.cs rename to Jolt~/Bindings/Bindings_JPH_BodyCreationSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_BodyCreationSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_BodyCreationSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyCreationSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BodyCreationSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BodyFilter.cs b/Jolt~/Bindings/Bindings_JPH_BodyFilter.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyFilter.cs rename to Jolt~/Bindings/Bindings_JPH_BodyFilter.cs diff --git a/Jolt/Bindings/Bindings_JPH_BodyFilter.cs.meta b/Jolt~/Bindings/Bindings_JPH_BodyFilter.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyFilter.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BodyFilter.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BodyInterface.cs b/Jolt~/Bindings/Bindings_JPH_BodyInterface.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyInterface.cs rename to Jolt~/Bindings/Bindings_JPH_BodyInterface.cs diff --git a/Jolt/Bindings/Bindings_JPH_BodyInterface.cs.meta b/Jolt~/Bindings/Bindings_JPH_BodyInterface.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BodyInterface.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BodyInterface.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BoxShape.cs b/Jolt~/Bindings/Bindings_JPH_BoxShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BoxShape.cs rename to Jolt~/Bindings/Bindings_JPH_BoxShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_BoxShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_BoxShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BoxShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BoxShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BoxShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_BoxShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BoxShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_BoxShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_BoxShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_BoxShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BoxShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BoxShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs.meta b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerFilter.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs.meta b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceMask.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs.meta b/Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseLayerInterfaceTable.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseQuery.cs b/Jolt~/Bindings/Bindings_JPH_BroadPhaseQuery.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseQuery.cs rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseQuery.cs diff --git a/Jolt/Bindings/Bindings_JPH_BroadPhaseQuery.cs.meta b/Jolt~/Bindings/Bindings_JPH_BroadPhaseQuery.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_BroadPhaseQuery.cs.meta rename to Jolt~/Bindings/Bindings_JPH_BroadPhaseQuery.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CapsuleShape.cs b/Jolt~/Bindings/Bindings_JPH_CapsuleShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CapsuleShape.cs rename to Jolt~/Bindings/Bindings_JPH_CapsuleShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_CapsuleShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_CapsuleShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CapsuleShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CapsuleShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CapsuleShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_CapsuleShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CapsuleShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_CapsuleShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_CapsuleShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_CapsuleShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CapsuleShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CapsuleShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CollideShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_CollideShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CollideShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_CollideShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_CollideShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_CollideShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CollideShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CollideShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CompoundShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_CompoundShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CompoundShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_CompoundShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_CompoundShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_CompoundShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CompoundShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CompoundShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConeConstraint.cs b/Jolt~/Bindings/Bindings_JPH_ConeConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConeConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_ConeConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConeConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConeConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConeConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConeConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConeConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_ConeConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConeConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ConeConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConeConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConeConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConeConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConeConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_Constraint.cs b/Jolt~/Bindings/Bindings_JPH_Constraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Constraint.cs rename to Jolt~/Bindings/Bindings_JPH_Constraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_Constraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_Constraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Constraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_Constraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ContactListener.cs b/Jolt~/Bindings/Bindings_JPH_ContactListener.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactListener.cs rename to Jolt~/Bindings/Bindings_JPH_ContactListener.cs diff --git a/Jolt/Bindings/Bindings_JPH_ContactListener.cs.meta b/Jolt~/Bindings/Bindings_JPH_ContactListener.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactListener.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ContactListener.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ContactManifold.cs b/Jolt~/Bindings/Bindings_JPH_ContactManifold.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactManifold.cs rename to Jolt~/Bindings/Bindings_JPH_ContactManifold.cs diff --git a/Jolt/Bindings/Bindings_JPH_ContactManifold.cs.meta b/Jolt~/Bindings/Bindings_JPH_ContactManifold.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactManifold.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ContactManifold.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ContactSettings.cs b/Jolt~/Bindings/Bindings_JPH_ContactSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ContactSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ContactSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ContactSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ContactSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ContactSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConvexHullShape.cs b/Jolt~/Bindings/Bindings_JPH_ConvexHullShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexHullShape.cs rename to Jolt~/Bindings/Bindings_JPH_ConvexHullShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConvexHullShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConvexHullShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexHullShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConvexHullShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConvexHullShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConvexShape.cs b/Jolt~/Bindings/Bindings_JPH_ConvexShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexShape.cs rename to Jolt~/Bindings/Bindings_JPH_ConvexShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConvexShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConvexShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConvexShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ConvexShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_ConvexShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ConvexShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ConvexShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ConvexShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ConvexShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ConvexShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CylinderShape.cs b/Jolt~/Bindings/Bindings_JPH_CylinderShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CylinderShape.cs rename to Jolt~/Bindings/Bindings_JPH_CylinderShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_CylinderShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_CylinderShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CylinderShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CylinderShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_CylinderShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_CylinderShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CylinderShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_CylinderShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_CylinderShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_CylinderShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_CylinderShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_CylinderShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_DistanceConstraint.cs b/Jolt~/Bindings/Bindings_JPH_DistanceConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_DistanceConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_DistanceConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_DistanceConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_DistanceConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_DistanceConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_DistanceConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_DistanceConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_DistanceConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_DistanceConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_DistanceConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_DistanceConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_DistanceConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_DistanceConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_DistanceConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_FixedConstraint.cs b/Jolt~/Bindings/Bindings_JPH_FixedConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_FixedConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_FixedConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_FixedConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_FixedConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_FixedConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_FixedConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_FixedConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_FixedConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_FixedConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_FixedConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_FixedConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_FixedConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_FixedConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_FixedConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_GearConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_GearConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_GearConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_GearConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_GearConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_GearConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_GearConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_GearConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_HeightFieldShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_HingeConstraint.cs b/Jolt~/Bindings/Bindings_JPH_HingeConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HingeConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_HingeConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_HingeConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_HingeConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HingeConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_HingeConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_HingeConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_HingeConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HingeConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_HingeConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_HingeConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_HingeConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_HingeConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_HingeConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_JobSystem.cs b/Jolt~/Bindings/Bindings_JPH_JobSystem.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystem.cs rename to Jolt~/Bindings/Bindings_JPH_JobSystem.cs diff --git a/Jolt/Bindings/Bindings_JPH_JobSystem.cs.meta b/Jolt~/Bindings/Bindings_JPH_JobSystem.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystem.cs.meta rename to Jolt~/Bindings/Bindings_JPH_JobSystem.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_JobSystemCallback.cs b/Jolt~/Bindings/Bindings_JPH_JobSystemCallback.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystemCallback.cs rename to Jolt~/Bindings/Bindings_JPH_JobSystemCallback.cs diff --git a/Jolt/Bindings/Bindings_JPH_JobSystemCallback.cs.meta b/Jolt~/Bindings/Bindings_JPH_JobSystemCallback.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystemCallback.cs.meta rename to Jolt~/Bindings/Bindings_JPH_JobSystemCallback.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_JobSystemThreadPool.cs b/Jolt~/Bindings/Bindings_JPH_JobSystemThreadPool.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystemThreadPool.cs rename to Jolt~/Bindings/Bindings_JPH_JobSystemThreadPool.cs diff --git a/Jolt/Bindings/Bindings_JPH_JobSystemThreadPool.cs.meta b/Jolt~/Bindings/Bindings_JPH_JobSystemThreadPool.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_JobSystemThreadPool.cs.meta rename to Jolt~/Bindings/Bindings_JPH_JobSystemThreadPool.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_MassProperties.cs b/Jolt~/Bindings/Bindings_JPH_MassProperties.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MassProperties.cs rename to Jolt~/Bindings/Bindings_JPH_MassProperties.cs diff --git a/Jolt/Bindings/Bindings_JPH_MassProperties.cs.meta b/Jolt~/Bindings/Bindings_JPH_MassProperties.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MassProperties.cs.meta rename to Jolt~/Bindings/Bindings_JPH_MassProperties.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_MeshShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_MeshShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MeshShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_MeshShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_MeshShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_MeshShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MeshShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_MeshShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_MotionProperties.cs b/Jolt~/Bindings/Bindings_JPH_MotionProperties.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MotionProperties.cs rename to Jolt~/Bindings/Bindings_JPH_MotionProperties.cs diff --git a/Jolt/Bindings/Bindings_JPH_MotionProperties.cs.meta b/Jolt~/Bindings/Bindings_JPH_MotionProperties.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_MotionProperties.cs.meta rename to Jolt~/Bindings/Bindings_JPH_MotionProperties.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_NarrowPhaseQuery.cs b/Jolt~/Bindings/Bindings_JPH_NarrowPhaseQuery.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_NarrowPhaseQuery.cs rename to Jolt~/Bindings/Bindings_JPH_NarrowPhaseQuery.cs diff --git a/Jolt/Bindings/Bindings_JPH_NarrowPhaseQuery.cs.meta b/Jolt~/Bindings/Bindings_JPH_NarrowPhaseQuery.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_NarrowPhaseQuery.cs.meta rename to Jolt~/Bindings/Bindings_JPH_NarrowPhaseQuery.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerFilter.cs b/Jolt~/Bindings/Bindings_JPH_ObjectLayerFilter.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerFilter.cs rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerFilter.cs diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerFilter.cs.meta b/Jolt~/Bindings/Bindings_JPH_ObjectLayerFilter.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerFilter.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerFilter.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs b/Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs.meta b/Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterMask.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs b/Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs diff --git a/Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs.meta b/Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ObjectLayerPairFilterTable.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs b/Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs rename to Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs diff --git a/Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs.meta b/Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterMask.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs b/Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs rename to Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs diff --git a/Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs.meta b/Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ObjectVsBroadPhaseLayerFilterTable.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PhysicsMaterial.cs b/Jolt~/Bindings/Bindings_JPH_PhysicsMaterial.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PhysicsMaterial.cs rename to Jolt~/Bindings/Bindings_JPH_PhysicsMaterial.cs diff --git a/Jolt/Bindings/Bindings_JPH_PhysicsMaterial.cs.meta b/Jolt~/Bindings/Bindings_JPH_PhysicsMaterial.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PhysicsMaterial.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PhysicsMaterial.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PhysicsSystem.cs b/Jolt~/Bindings/Bindings_JPH_PhysicsSystem.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PhysicsSystem.cs rename to Jolt~/Bindings/Bindings_JPH_PhysicsSystem.cs diff --git a/Jolt/Bindings/Bindings_JPH_PhysicsSystem.cs.meta b/Jolt~/Bindings/Bindings_JPH_PhysicsSystem.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PhysicsSystem.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PhysicsSystem.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PlaneShape.cs b/Jolt~/Bindings/Bindings_JPH_PlaneShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PlaneShape.cs rename to Jolt~/Bindings/Bindings_JPH_PlaneShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_PlaneShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_PlaneShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PlaneShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PlaneShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PlaneShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_PlaneShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PlaneShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_PlaneShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_PlaneShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_PlaneShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PlaneShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PlaneShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PointConstraint.cs b/Jolt~/Bindings/Bindings_JPH_PointConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PointConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_PointConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_PointConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_PointConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PointConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PointConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_PointConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_PointConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PointConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_PointConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_PointConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_PointConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_PointConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_PointConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_RotatedTranslatedShape.cs b/Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_RotatedTranslatedShape.cs rename to Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_RotatedTranslatedShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_RotatedTranslatedShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_RotatedTranslatedShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_Shape.cs b/Jolt~/Bindings/Bindings_JPH_Shape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Shape.cs rename to Jolt~/Bindings/Bindings_JPH_Shape.cs diff --git a/Jolt/Bindings/Bindings_JPH_Shape.cs.meta b/Jolt~/Bindings/Bindings_JPH_Shape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_Shape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_Shape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ShapeCastSettings.cs b/Jolt~/Bindings/Bindings_JPH_ShapeCastSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ShapeCastSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ShapeCastSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ShapeCastSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ShapeCastSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ShapeCastSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ShapeCastSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_ShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_ShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_ShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_ShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_ShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_ShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_ShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SixDOFConstraint.cs b/Jolt~/Bindings/Bindings_JPH_SixDOFConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SixDOFConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_SixDOFConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_SixDOFConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_SixDOFConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SixDOFConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SixDOFConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SixDOFConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SliderConstraint.cs b/Jolt~/Bindings/Bindings_JPH_SliderConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SliderConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_SliderConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_SliderConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_SliderConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SliderConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SliderConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SliderConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_SliderConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SliderConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_SliderConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_SliderConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_SliderConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SliderConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SliderConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs b/Jolt~/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs rename to Jolt~/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SoftBodyCreationSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SphereShape.cs b/Jolt~/Bindings/Bindings_JPH_SphereShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SphereShape.cs rename to Jolt~/Bindings/Bindings_JPH_SphereShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_SphereShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_SphereShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SphereShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SphereShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SphereShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_SphereShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SphereShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_SphereShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_SphereShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_SphereShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SphereShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SphereShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SwingTwistConstraint.cs b/Jolt~/Bindings/Bindings_JPH_SwingTwistConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SwingTwistConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_SwingTwistConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_SwingTwistConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_SwingTwistConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SwingTwistConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SwingTwistConstraint.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs b/Jolt~/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs rename to Jolt~/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_SwingTwistConstraintSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCapsuleShape.cs b/Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCapsuleShape.cs rename to Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCapsuleShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCapsuleShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TaperedCapsuleShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCylinderShape.cs b/Jolt~/Bindings/Bindings_JPH_TaperedCylinderShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCylinderShape.cs rename to Jolt~/Bindings/Bindings_JPH_TaperedCylinderShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCylinderShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_TaperedCylinderShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCylinderShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TaperedCylinderShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TaperedCylinderShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TriangleShape.cs b/Jolt~/Bindings/Bindings_JPH_TriangleShape.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TriangleShape.cs rename to Jolt~/Bindings/Bindings_JPH_TriangleShape.cs diff --git a/Jolt/Bindings/Bindings_JPH_TriangleShape.cs.meta b/Jolt~/Bindings/Bindings_JPH_TriangleShape.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TriangleShape.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TriangleShape.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TriangleShapeSettings.cs b/Jolt~/Bindings/Bindings_JPH_TriangleShapeSettings.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TriangleShapeSettings.cs rename to Jolt~/Bindings/Bindings_JPH_TriangleShapeSettings.cs diff --git a/Jolt/Bindings/Bindings_JPH_TriangleShapeSettings.cs.meta b/Jolt~/Bindings/Bindings_JPH_TriangleShapeSettings.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TriangleShapeSettings.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TriangleShapeSettings.cs.meta diff --git a/Jolt/Bindings/Bindings_JPH_TwoBodyConstraint.cs b/Jolt~/Bindings/Bindings_JPH_TwoBodyConstraint.cs similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TwoBodyConstraint.cs rename to Jolt~/Bindings/Bindings_JPH_TwoBodyConstraint.cs diff --git a/Jolt/Bindings/Bindings_JPH_TwoBodyConstraint.cs.meta b/Jolt~/Bindings/Bindings_JPH_TwoBodyConstraint.cs.meta similarity index 100% rename from Jolt/Bindings/Bindings_JPH_TwoBodyConstraint.cs.meta rename to Jolt~/Bindings/Bindings_JPH_TwoBodyConstraint.cs.meta diff --git a/Jolt/Bindings/ManagedReference.cs b/Jolt~/Bindings/ManagedReference.cs similarity index 100% rename from Jolt/Bindings/ManagedReference.cs rename to Jolt~/Bindings/ManagedReference.cs diff --git a/Jolt/Bindings/ManagedReference.cs.meta b/Jolt~/Bindings/ManagedReference.cs.meta similarity index 100% rename from Jolt/Bindings/ManagedReference.cs.meta rename to Jolt~/Bindings/ManagedReference.cs.meta diff --git a/Jolt~/Bindings/UnsafeBindings.cs b/Jolt~/Bindings/UnsafeBindings.cs new file mode 100644 index 0000000..032454e --- /dev/null +++ b/Jolt~/Bindings/UnsafeBindings.cs @@ -0,0 +1,5475 @@ +using System; +using System.Runtime.InteropServices; +using Unity.Mathematics; + +namespace Jolt +{ + public partial struct JPH_BroadPhaseLayerInterface + { + } + + public partial struct JPH_ObjectVsBroadPhaseLayerFilter + { + } + + public partial struct JPH_ObjectLayerPairFilter + { + } + + public partial struct JPH_BroadPhaseLayerFilter + { + } + + public partial struct JPH_ObjectLayerFilter + { + } + + public partial struct JPH_BodyFilter + { + } + + public partial struct JPH_ShapeFilter + { + } + + public partial struct JPH_SimShapeFilter + { + } + + public partial struct JPH_PhysicsStepListener + { + } + + public partial struct JPH_PhysicsSystem + { + } + + public partial struct JPH_PhysicsMaterial + { + } + + public partial struct JPH_ShapeSettings + { + } + + public partial struct JPH_ConvexShapeSettings + { + } + + public partial struct JPH_SphereShapeSettings + { + } + + public partial struct JPH_BoxShapeSettings + { + } + + public partial struct JPH_PlaneShapeSettings + { + } + + public partial struct JPH_TriangleShapeSettings + { + } + + public partial struct JPH_CapsuleShapeSettings + { + } + + public partial struct JPH_TaperedCapsuleShapeSettings + { + } + + public partial struct JPH_CylinderShapeSettings + { + } + + public partial struct JPH_TaperedCylinderShapeSettings + { + } + + public partial struct JPH_ConvexHullShapeSettings + { + } + + public partial struct JPH_CompoundShapeSettings + { + } + + public partial struct JPH_StaticCompoundShapeSettings + { + } + + public partial struct JPH_MutableCompoundShapeSettings + { + } + + public partial struct JPH_MeshShapeSettings + { + } + + public partial struct JPH_HeightFieldShapeSettings + { + } + + public partial struct JPH_RotatedTranslatedShapeSettings + { + } + + public partial struct JPH_ScaledShapeSettings + { + } + + public partial struct JPH_OffsetCenterOfMassShapeSettings + { + } + + public partial struct JPH_EmptyShapeSettings + { + } + + public partial struct JPH_Shape + { + } + + public partial struct JPH_ConvexShape + { + } + + public partial struct JPH_SphereShape + { + } + + public partial struct JPH_BoxShape + { + } + + public partial struct JPH_PlaneShape + { + } + + public partial struct JPH_CapsuleShape + { + } + + public partial struct JPH_CylinderShape + { + } + + public partial struct JPH_TaperedCylinderShape + { + } + + public partial struct JPH_TriangleShape + { + } + + public partial struct JPH_TaperedCapsuleShape + { + } + + public partial struct JPH_ConvexHullShape + { + } + + public partial struct JPH_CompoundShape + { + } + + public partial struct JPH_StaticCompoundShape + { + } + + public partial struct JPH_MutableCompoundShape + { + } + + public partial struct JPH_MeshShape + { + } + + public partial struct JPH_HeightFieldShape + { + } + + public partial struct JPH_DecoratedShape + { + } + + public partial struct JPH_RotatedTranslatedShape + { + } + + public partial struct JPH_ScaledShape + { + } + + public partial struct JPH_OffsetCenterOfMassShape + { + } + + public partial struct JPH_EmptyShape + { + } + + public partial struct JPH_BodyCreationSettings + { + } + + public partial struct JPH_SoftBodyCreationSettings + { + } + + public partial struct JPH_BodyInterface + { + } + + public partial struct JPH_BodyLockInterface + { + } + + public partial struct JPH_BroadPhaseQuery + { + } + + public partial struct JPH_NarrowPhaseQuery + { + } + + public partial struct JPH_MotionProperties + { + } + + public partial struct JPH_Body + { + } + + public partial struct JPH_ContactListener + { + } + + public partial struct JPH_ContactManifold + { + } + + public partial struct JPH_ContactSettings + { + } + + public partial struct JPH_GroupFilter + { + } + + public partial struct JPH_GroupFilterTable + { + } + + [NativeTypeName("unsigned int")] + public enum JPH_PhysicsUpdateError : uint + { + None = 0, + ManifoldCacheFull = 1 << 0, + BodyPairCacheFull = 1 << 1, + ContactConstraintsFull = 1 << 2, + _JPH_PhysicsUpdateError_Count, + _JPH_PhysicsUpdateError_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BodyType : uint + { + Rigid = 0, + Soft = 1, + _JPH_BodyType_Count, + _JPH_BodyType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotionType : uint + { + Static = 0, + Kinematic = 1, + Dynamic = 2, + _JPH_MotionType_Count, + _JPH_MotionType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_Activation : uint + { + Activate = 0, + DontActivate = 1, + _JPH_Activation_Count, + _JPH_Activation_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ValidateResult : uint + { + AcceptAllContactsForThisBodyPair = 0, + AcceptContact = 1, + RejectContact = 2, + RejectAllContactsForThisBodyPair = 3, + _JPH_ValidateResult_Count, + _JPH_ValidateResult_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ShapeType : uint + { + Convex = 0, + Compound = 1, + Decorated = 2, + Mesh = 3, + HeightField = 4, + SoftBody = 5, + User1 = 6, + User2 = 7, + User3 = 8, + User4 = 9, + _JPH_ShapeType_Count, + _JPH_ShapeType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ShapeSubType : uint + { + Sphere = 0, + Box = 1, + Triangle = 2, + Capsule = 3, + TaperedCapsule = 4, + Cylinder = 5, + ConvexHull = 6, + StaticCompound = 7, + MutableCompound = 8, + RotatedTranslated = 9, + Scaled = 10, + OffsetCenterOfMass = 11, + Mesh = 12, + HeightField = 13, + SoftBody = 14, + _JPH_ShapeSubType_Count, + _JPH_ShapeSubType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintType : uint + { + Constraint = 0, + TwoBodyConstraint = 1, + _JPH_ConstraintType_Count, + _JPH_ConstraintType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSubType : uint + { + Fixed = 0, + Point = 1, + Hinge = 2, + Slider = 3, + Distance = 4, + Cone = 5, + SwingTwist = 6, + SixDOF = 7, + Path = 8, + Vehicle = 9, + RackAndPinion = 10, + Gear = 11, + Pulley = 12, + User1 = 13, + User2 = 14, + User3 = 15, + User4 = 16, + _JPH_ConstraintSubType_Count, + _JPH_ConstraintSubType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSpace : uint + { + LocalToBodyCOM = 0, + WorldSpace = 1, + _JPH_ConstraintSpace_Count, + _JPH_ConstraintSpace_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotionQuality : uint + { + Discrete = 0, + LinearCast = 1, + _JPH_MotionQuality_Count, + _JPH_MotionQuality_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_OverrideMassProperties : uint + { + CalculateMassAndInertia, + CalculateInertia, + MassAndInertiaProvided, + _JPH_JPH_OverrideMassProperties_Count, + _JPH_JPH_OverrideMassProperties_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_GroundState : uint + { + OnGround = 0, + OnSteepGround = 1, + NotSupported = 2, + InAir = 3, + _JPH_GroundState_Count, + _JPH_GroundState_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BackFaceMode : uint + { + IgnoreBackFaces, + CollideWithBackFaces, + _JPH_BackFaceMode_Count, + _JPH_BackFaceMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ActiveEdgeMode : uint + { + CollideOnlyWithActive, + CollideWithAll, + _JPH_ActiveEdgeMode_Count, + _JPH_ActiveEdgeMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_CollectFacesMode : uint + { + CollectFaces, + NoFaces, + _JPH_CollectFacesMode_Count, + _JPH_CollectFacesMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotorState : uint + { + Off = 0, + Velocity = 1, + Position = 2, + _JPH_MotorState_Count, + _JPH_MotorState_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_CollisionCollectorType : uint + { + AllHit = 0, + AllHitSorted = 1, + ClosestHit = 2, + AnyHit = 3, + _JPH_CollisionCollectorType_Count, + _JPH_CollisionCollectorType_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SwingType : uint + { + Cone, + Pyramid, + _JPH_SwingType_Count, + _JPH_SwingType_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SpringMode : uint + { + FrequencyAndDamping = 0, + StiffnessAndDamping = 1, + _JPH_SpringMode_Count, + _JPH_SpringMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SoftBodyConstraintColor : uint + { + ConstraintType, + ConstraintGroup, + ConstraintOrder, + _JPH_SoftBodyConstraintColor_Count, + _JPH_SoftBodyConstraintColor_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BodyManager_ShapeColor : uint + { + InstanceColor, + ShapeTypeColor, + MotionTypeColor, + SleepColor, + IslandColor, + MaterialColor, + _JPH_BodyManager_ShapeColor_Count, + _JPH_BodyManager_ShapeColor_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_CastShadow : uint + { + On = 0, + Off = 1, + _JPH_DebugRenderer_CastShadow_Count, + _JPH_DebugRenderer_CastShadow_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_DrawMode : uint + { + Solid = 0, + Wireframe = 1, + _JPH_DebugRenderer_DrawMode_Count, + _JPH_DebugRenderer_DrawMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_Mesh_Shape_BuildQuality : uint + { + FavorRuntimePerformance = 0, + FavorBuildSpeed = 1, + _JPH_Mesh_Shape_BuildQuality_Count, + _JPH_Mesh_Shape_BuildQuality_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_TransmissionMode : uint + { + Auto = 0, + Manual = 1, + _JPH_TransmissionMode_Count, + _JPH_TransmissionMode_Force32 = 0x7FFFFFFF, + } + + public partial struct JPH_Plane + { + [NativeTypeName("JPH_Vec3")] + public float3 normal; + + public float distance; + } + + public partial struct JPH_AABox + { + [NativeTypeName("JPH_Vec3")] + public float3 min; + + [NativeTypeName("JPH_Vec3")] + public float3 max; + } + + public partial struct JPH_Triangle + { + [NativeTypeName("JPH_Vec3")] + public float3 v1; + + [NativeTypeName("JPH_Vec3")] + public float3 v2; + + [NativeTypeName("JPH_Vec3")] + public float3 v3; + + [NativeTypeName("uint32_t")] + public uint materialIndex; + } + + public partial struct JPH_IndexedTriangleNoMaterial + { + [NativeTypeName("uint32_t")] + public uint i1; + + [NativeTypeName("uint32_t")] + public uint i2; + + [NativeTypeName("uint32_t")] + public uint i3; + } + + public partial struct JPH_IndexedTriangle + { + [NativeTypeName("uint32_t")] + public uint i1; + + [NativeTypeName("uint32_t")] + public uint i2; + + [NativeTypeName("uint32_t")] + public uint i3; + + [NativeTypeName("uint32_t")] + public uint materialIndex; + + [NativeTypeName("uint32_t")] + public uint userData; + } + + public partial struct JPH_MassProperties + { + public float mass; + + [NativeTypeName("JPH_Matrix4x4")] + public float4x4 inertia; + } + + public partial struct JPH_CollideSettingsBase + { + public JPH_ActiveEdgeMode activeEdgeMode; + + public JPH_CollectFacesMode collectFacesMode; + + public float collisionTolerance; + + public float penetrationTolerance; + + [NativeTypeName("JPH_Vec3")] + public float3 activeEdgeMovementDirection; + } + + public partial struct JPH_CollideShapeSettings + { + public JPH_CollideSettingsBase @base; + + public float maxSeparationDistance; + + public JPH_BackFaceMode backFaceMode; + } + + public partial struct JPH_ShapeCastSettings + { + public JPH_CollideSettingsBase @base; + + public JPH_BackFaceMode backFaceModeTriangles; + + public JPH_BackFaceMode backFaceModeConvex; + + [NativeTypeName("bool")] + public byte useShrunkenShapeAndConvexRadius; + + [NativeTypeName("bool")] + public byte returnDeepestPoint; + } + + public partial struct JPH_RayCastSettings + { + public JPH_BackFaceMode backFaceModeTriangles; + + public JPH_BackFaceMode backFaceModeConvex; + + [NativeTypeName("bool")] + public byte treatConvexAsSolid; + } + + public partial struct JPH_SpringSettings + { + public JPH_SpringMode mode; + + public float frequencyOrStiffness; + + public float damping; + } + + public partial struct JPH_MotorSettings + { + public JPH_SpringSettings springSettings; + + public float minForceLimit; + + public float maxForceLimit; + + public float minTorqueLimit; + + public float maxTorqueLimit; + } + + public partial struct JPH_SubShapeIDPair + { + [NativeTypeName("JPH_BodyID")] + public uint Body1ID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_BodyID")] + public uint Body2ID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public partial struct JPH_BroadPhaseCastResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + public float fraction; + } + + public partial struct JPH_RayCastResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + public float fraction; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public partial struct JPH_CollidePointResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public unsafe partial struct JPH_CollideShapeResult + { + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; + + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; + + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; + + public float penetrationDepth; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; + + [NativeTypeName("uint32_t")] + public uint shape1FaceCount; + + [NativeTypeName("JPH_Vec3 *")] + public float3* shape1Faces; + + [NativeTypeName("uint32_t")] + public uint shape2FaceCount; + + [NativeTypeName("JPH_Vec3 *")] + public float3* shape2Faces; + } + + public partial struct JPH_ShapeCastResult + { + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; + + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; + + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; + + public float penetrationDepth; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; + + public float fraction; + + [NativeTypeName("bool")] + public byte isBackFaceHit; + } + + public partial struct JPH_DrawSettings + { + [NativeTypeName("bool")] + public byte drawGetSupportFunction; + + [NativeTypeName("bool")] + public byte drawSupportDirection; + + [NativeTypeName("bool")] + public byte drawGetSupportingFace; + + [NativeTypeName("bool")] + public byte drawShape; + + [NativeTypeName("bool")] + public byte drawShapeWireframe; + + public JPH_BodyManager_ShapeColor drawShapeColor; + + [NativeTypeName("bool")] + public byte drawBoundingBox; + + [NativeTypeName("bool")] + public byte drawCenterOfMassTransform; + + [NativeTypeName("bool")] + public byte drawWorldTransform; + + [NativeTypeName("bool")] + public byte drawVelocity; + + [NativeTypeName("bool")] + public byte drawMassAndInertia; + + [NativeTypeName("bool")] + public byte drawSleepStats; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertices; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertexVelocities; + + [NativeTypeName("bool")] + public byte drawSoftBodyEdgeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyBendConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyVolumeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodySkinConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyLRAConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyPredictedBounds; + + public JPH_SoftBodyConstraintColor drawSoftBodyConstraintColor; + } + + public partial struct JPH_SupportingFace + { + [NativeTypeName("uint32_t")] + public uint count; + + [NativeTypeName("JPH_Vec3[32]")] + public _vertices_e__FixedBuffer vertices; + + public partial struct _vertices_e__FixedBuffer + { + public float3 e0; + public float3 e1; + public float3 e2; + public float3 e3; + public float3 e4; + public float3 e5; + public float3 e6; + public float3 e7; + public float3 e8; + public float3 e9; + public float3 e10; + public float3 e11; + public float3 e12; + public float3 e13; + public float3 e14; + public float3 e15; + public float3 e16; + public float3 e17; + public float3 e18; + public float3 e19; + public float3 e20; + public float3 e21; + public float3 e22; + public float3 e23; + public float3 e24; + public float3 e25; + public float3 e26; + public float3 e27; + public float3 e28; + public float3 e29; + public float3 e30; + public float3 e31; + + public unsafe ref float3 this[int index] + { + get + { + fixed (float3* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + } + + public unsafe partial struct JPH_CollisionGroup + { + [NativeTypeName("const JPH_GroupFilter *")] + public JPH_GroupFilter* groupFilter; + + [NativeTypeName("JPH_CollisionGroupID")] + public uint groupID; + + [NativeTypeName("JPH_CollisionSubGroupID")] + public uint subGroupID; + } + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastRayResultCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_RayCastBodyResultCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeBodyResultCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollidePointResultCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeResultCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastShapeResultCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastRayCollectorCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_RayCastBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollidePointCollectorCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeCollectorCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastShapeCollectorCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + public partial struct JPH_CollisionEstimationResultImpulse + { + public float contactImpulse; + + public float frictionImpulse1; + + public float frictionImpulse2; + } + + public unsafe partial struct JPH_CollisionEstimationResult + { + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity1; + + [NativeTypeName("JPH_Vec3")] + public float3 angularVelocity1; + + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity2; + + [NativeTypeName("JPH_Vec3")] + public float3 angularVelocity2; + + [NativeTypeName("JPH_Vec3")] + public float3 tangent1; + + [NativeTypeName("JPH_Vec3")] + public float3 tangent2; + + [NativeTypeName("uint32_t")] + public uint impulseCount; + + public JPH_CollisionEstimationResultImpulse* impulses; + } + + public partial struct JPH_BodyActivationListener + { + } + + public partial struct JPH_BodyDrawFilter + { + } + + public partial struct JPH_SharedMutex + { + } + + public partial struct JPH_DebugRenderer + { + } + + public partial struct JPH_Constraint + { + } + + public partial struct JPH_TwoBodyConstraint + { + } + + public partial struct JPH_FixedConstraint + { + } + + public partial struct JPH_DistanceConstraint + { + } + + public partial struct JPH_PointConstraint + { + } + + public partial struct JPH_HingeConstraint + { + } + + public partial struct JPH_SliderConstraint + { + } + + public partial struct JPH_ConeConstraint + { + } + + public partial struct JPH_SwingTwistConstraint + { + } + + public partial struct JPH_SixDOFConstraint + { + } + + public partial struct JPH_GearConstraint + { + } + + public partial struct JPH_CharacterBase + { + } + + public partial struct JPH_Character + { + } + + public partial struct JPH_CharacterVirtual + { + } + + public partial struct JPH_CharacterContactListener + { + } + + public partial struct JPH_CharacterVsCharacterCollision + { + } + + public partial struct JPH_Skeleton + { + } + + public partial struct JPH_RagdollSettings + { + } + + public partial struct JPH_Ragdoll + { + } + + public partial struct JPH_ConstraintSettings + { + [NativeTypeName("bool")] + public byte enabled; + + [NativeTypeName("uint32_t")] + public uint constraintPriority; + + [NativeTypeName("uint32_t")] + public uint numVelocityStepsOverride; + + [NativeTypeName("uint32_t")] + public uint numPositionStepsOverride; + + public float drawConstraintSize; + + [NativeTypeName("uint64_t")] + public ulong userData; + } + + public partial struct JPH_FixedConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("bool")] + public byte autoDetectPoint; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY2; + } + + public partial struct JPH_DistanceConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + public float minDistance; + + public float maxDistance; + + public JPH_SpringSettings limitsSpringSettings; + } + + public partial struct JPH_PointConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + } + + public partial struct JPH_HingeConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis2; + + public float limitsMin; + + public float limitsMax; + + public JPH_SpringSettings limitsSpringSettings; + + public float maxFrictionTorque; + + public JPH_MotorSettings motorSettings; + } + + public partial struct JPH_SliderConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("bool")] + public byte autoDetectPoint; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 sliderAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 sliderAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis2; + + public float limitsMin; + + public float limitsMax; + + public JPH_SpringSettings limitsSpringSettings; + + public float maxFrictionForce; + + public JPH_MotorSettings motorSettings; + } + + public partial struct JPH_ConeConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis2; + + public float halfConeAngle; + } + + public partial struct JPH_SwingTwistConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position1; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 planeAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position2; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 planeAxis2; + + public JPH_SwingType swingType; + + public float normalHalfConeAngle; + + public float planeHalfConeAngle; + + public float twistMinAngle; + + public float twistMaxAngle; + + public float maxFrictionTorque; + + public JPH_MotorSettings swingMotorSettings; + + public JPH_MotorSettings twistMotorSettings; + } + + public unsafe partial struct JPH_SixDOFConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY2; + + [NativeTypeName("float[6]")] + public fixed float maxFriction[6]; + + public JPH_SwingType swingType; + + [NativeTypeName("float[6]")] + public fixed float limitMin[6]; + + [NativeTypeName("float[6]")] + public fixed float limitMax[6]; + + [NativeTypeName("JPH_SpringSettings[3]")] + public _limitsSpringSettings_e__FixedBuffer limitsSpringSettings; + + [NativeTypeName("JPH_MotorSettings[6]")] + public _motorSettings_e__FixedBuffer motorSettings; + + public partial struct _limitsSpringSettings_e__FixedBuffer + { + public JPH_SpringSettings e0; + public JPH_SpringSettings e1; + public JPH_SpringSettings e2; + + public unsafe ref JPH_SpringSettings this[int index] + { + get + { + fixed (JPH_SpringSettings* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + + public partial struct _motorSettings_e__FixedBuffer + { + public JPH_MotorSettings e0; + public JPH_MotorSettings e1; + public JPH_MotorSettings e2; + public JPH_MotorSettings e3; + public JPH_MotorSettings e4; + public JPH_MotorSettings e5; + + public unsafe ref JPH_MotorSettings this[int index] + { + get + { + fixed (JPH_MotorSettings* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + } + + public partial struct JPH_GearConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis2; + + public float ratio; + } + + public unsafe partial struct JPH_BodyLockRead + { + [NativeTypeName("const JPH_BodyLockInterface *")] + public JPH_BodyLockInterface* lockInterface; + + public JPH_SharedMutex* mutex; + + [NativeTypeName("const JPH_Body *")] + public JPH_Body* body; + } + + public unsafe partial struct JPH_BodyLockWrite + { + [NativeTypeName("const JPH_BodyLockInterface *")] + public JPH_BodyLockInterface* lockInterface; + + public JPH_SharedMutex* mutex; + + public JPH_Body* body; + } + + public partial struct JPH_BodyLockMultiRead + { + } + + public partial struct JPH_BodyLockMultiWrite + { + } + + public partial struct JPH_ExtendedUpdateSettings + { + [NativeTypeName("JPH_Vec3")] + public float3 stickToFloorStepDown; + + [NativeTypeName("JPH_Vec3")] + public float3 walkStairsStepUp; + + public float walkStairsMinStepForward; + + public float walkStairsStepForwardTest; + + public float walkStairsCosAngleForwardContact; + + [NativeTypeName("JPH_Vec3")] + public float3 walkStairsStepDownExtra; + } + + public unsafe partial struct JPH_CharacterBaseSettings + { + [NativeTypeName("JPH_Vec3")] + public float3 up; + + public JPH_Plane supportingVolume; + + public float maxSlopeAngle; + + [NativeTypeName("bool")] + public byte enhancedInternalEdgeRemoval; + + [NativeTypeName("const JPH_Shape *")] + public JPH_Shape* shape; + } + + public partial struct JPH_CharacterSettings + { + public JPH_CharacterBaseSettings @base; + + [NativeTypeName("JPH_ObjectLayer")] + public uint layer; + + public float mass; + + public float friction; + + public float gravityFactor; + + public JPH_AllowedDOFs allowedDOFs; + } + + public unsafe partial struct JPH_CharacterVirtualSettings + { + public JPH_CharacterBaseSettings @base; + + [NativeTypeName("JPH_CharacterID")] + public uint ID; + + public float mass; + + public float maxStrength; + + [NativeTypeName("JPH_Vec3")] + public float3 shapeOffset; + + public JPH_BackFaceMode backFaceMode; + + public float predictiveContactDistance; + + [NativeTypeName("uint32_t")] + public uint maxCollisionIterations; + + [NativeTypeName("uint32_t")] + public uint maxConstraintIterations; + + public float minTimeRemaining; + + public float collisionTolerance; + + public float characterPadding; + + [NativeTypeName("uint32_t")] + public uint maxNumHits; + + public float hitReductionCosMaxAngle; + + public float penetrationRecoverySpeed; + + [NativeTypeName("const JPH_Shape *")] + public JPH_Shape* innerBodyShape; + + [NativeTypeName("JPH_BodyID")] + public uint innerBodyIDOverride; + + [NativeTypeName("JPH_ObjectLayer")] + public uint innerBodyLayer; + } + + public partial struct JPH_CharacterContactSettings + { + [NativeTypeName("bool")] + public byte canPushCharacter; + + [NativeTypeName("bool")] + public byte canReceiveImpulses; + } + + public unsafe partial struct JPH_CharacterVirtualContact + { + [NativeTypeName("uint64_t")] + public ulong hash; + + [NativeTypeName("JPH_BodyID")] + public uint bodyB; + + [NativeTypeName("JPH_CharacterID")] + public uint characterIDB; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeIDB; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position; + + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity; + + [NativeTypeName("JPH_Vec3")] + public float3 contactNormal; + + [NativeTypeName("JPH_Vec3")] + public float3 surfaceNormal; + + public float distance; + + public float fraction; + + public JPH_MotionType motionTypeB; + + [NativeTypeName("bool")] + public byte isSensorB; + + [NativeTypeName("const JPH_CharacterVirtual *")] + public JPH_CharacterVirtual* characterB; + + [NativeTypeName("uint64_t")] + public ulong userData; + + [NativeTypeName("const JPH_PhysicsMaterial *")] + public JPH_PhysicsMaterial* material; + + [NativeTypeName("bool")] + public byte hadCollision; + + [NativeTypeName("bool")] + public byte wasDiscarded; + + [NativeTypeName("bool")] + public byte canPushCharacter; + } + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_TraceFunc([NativeTypeName("const char *")] sbyte* message); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate bool JPH_AssertFailureFunc([NativeTypeName("const char *")] sbyte* expression, [NativeTypeName("const char *")] sbyte* message, [NativeTypeName("const char *")] sbyte* file, [NativeTypeName("uint32_t")] uint line); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_JobFunction(void* arg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_QueueJobCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void* arg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_QueueJobsCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void** args, [NativeTypeName("uint32_t")] uint count); + + public partial struct JobSystemThreadPoolConfig + { + [NativeTypeName("uint32_t")] + public uint maxJobs; + + [NativeTypeName("uint32_t")] + public uint maxBarriers; + + [NativeTypeName("int32_t")] + public int numThreads; + } + + public unsafe partial struct JPH_JobSystemConfig + { + public void* context; + + [NativeTypeName("JPH_QueueJobCallback *")] + public IntPtr queueJob; + + [NativeTypeName("JPH_QueueJobsCallback *")] + public IntPtr queueJobs; + + [NativeTypeName("uint32_t")] + public uint maxConcurrency; + + [NativeTypeName("uint32_t")] + public uint maxBarriers; + } + + public partial struct JPH_JobSystem + { + } + + public unsafe partial struct JPH_PhysicsSystemSettings + { + [NativeTypeName("uint32_t")] + public uint maxBodies; + + [NativeTypeName("uint32_t")] + public uint numBodyMutexes; + + [NativeTypeName("uint32_t")] + public uint maxBodyPairs; + + [NativeTypeName("uint32_t")] + public uint maxContactConstraints; + + [NativeTypeName("uint32_t")] + public uint _padding; + + public JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface; + + public JPH_ObjectLayerPairFilter* objectLayerPairFilter; + + public JPH_ObjectVsBroadPhaseLayerFilter* objectVsBroadPhaseLayerFilter; + } + + public partial struct JPH_PhysicsSettings + { + public int maxInFlightBodyPairs; + + public int stepListenersBatchSize; + + public int stepListenerBatchesPerJob; + + public float baumgarte; + + public float speculativeContactDistance; + + public float penetrationSlop; + + public float linearCastThreshold; + + public float linearCastMaxPenetration; + + public float manifoldTolerance; + + public float maxPenetrationDistance; + + public float bodyPairCacheMaxDeltaPositionSq; + + public float bodyPairCacheCosMaxDeltaRotationDiv2; + + public float contactNormalCosMaxDeltaRotation; + + public float contactPointPreserveLambdaMaxDistSq; + + [NativeTypeName("uint32_t")] + public uint numVelocitySteps; + + [NativeTypeName("uint32_t")] + public uint numPositionSteps; + + public float minVelocityForRestitution; + + public float timeBeforeSleep; + + public float pointVelocitySleepThreshold; + + [NativeTypeName("bool")] + public byte deterministicSimulation; + + [NativeTypeName("bool")] + public byte constraintWarmStart; + + [NativeTypeName("bool")] + public byte useBodyPairContactCache; + + [NativeTypeName("bool")] + public byte useManifoldReduction; + + [NativeTypeName("bool")] + public byte useLargeIslandSplitter; + + [NativeTypeName("bool")] + public byte allowSleeping; + + [NativeTypeName("bool")] + public byte checkActiveEdges; + } + + public unsafe partial struct JPH_PhysicsStepListenerContext + { + public float deltaTime; + + [NativeTypeName("JPH_Bool")] + public uint isFirstStep; + + [NativeTypeName("JPH_Bool")] + public uint isLastStep; + + public JPH_PhysicsSystem* physicsSystem; + } + + public partial struct JPH_PhysicsStepListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_PhysicsStepListenerContext *)")] + public IntPtr OnStep; + } + + public partial struct JPH_BroadPhaseLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BroadPhaseLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ObjectLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_ObjectLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_BodyFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BodyID)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldCollideLocked; + } + + public partial struct JPH_ShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide2; + } + + public partial struct JPH_SimShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ContactListener_Procs + { + [NativeTypeName("JPH_ValidateResult (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_RVec3 *, const JPH_CollideShapeResult *)")] + public IntPtr OnContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_SubShapeIDPair *)")] + public IntPtr OnContactRemoved; + } + + public partial struct JPH_BodyActivationListener_Procs + { + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyActivated; + + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyDeactivated; + } + + public partial struct JPH_BodyDrawFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldDraw; + } + + public partial struct JPH_CharacterContactListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_Body *, JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnAdjustBodyVelocity; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactValidate; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterID, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnContactSolve; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnCharacterContactSolve; + } + + public partial struct JPH_CharacterVsCharacterCollision_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_CollideShapeSettings *, const JPH_RVec3 *)")] + public IntPtr CollideCharacter; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_Vec3 *, const JPH_ShapeCastSettings *, const JPH_RVec3 *)")] + public IntPtr CastCharacter; + } + + public partial struct JPH_DebugRenderer_Procs + { + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color)")] + public IntPtr DrawLine; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color, JPH_DebugRenderer_CastShadow)")] + public IntPtr DrawTriangle; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const char *, JPH_Color, float)")] + public IntPtr DrawText3D; + } + + public unsafe partial struct JPH_SkeletonJoint + { + [NativeTypeName("const char *")] + public sbyte* name; + + [NativeTypeName("const char *")] + public sbyte* parentName; + + public int parentJointIndex; + } + + public partial struct JPH_WheelSettings + { + } + + public partial struct JPH_WheelSettingsWV + { + } + + public partial struct JPH_WheelSettingsTV + { + } + + public partial struct JPH_Wheel + { + } + + public partial struct JPH_WheelWV + { + } + + public partial struct JPH_WheelTV + { + } + + public partial struct JPH_VehicleTransmissionSettings + { + } + + public partial struct JPH_VehicleCollisionTester + { + } + + public partial struct JPH_VehicleCollisionTesterRay + { + } + + public partial struct JPH_VehicleCollisionTesterCastSphere + { + } + + public partial struct JPH_VehicleCollisionTesterCastCylinder + { + } + + public partial struct JPH_VehicleConstraint + { + } + + public partial struct JPH_VehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleControllerSettings + { + } + + public partial struct JPH_MotorcycleControllerSettings + { + } + + public partial struct JPH_TrackedVehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleController + { + } + + public partial struct JPH_MotorcycleController + { + } + + public partial struct JPH_TrackedVehicleController + { + } + + public partial struct JPH_VehicleController + { + } + + public partial struct JPH_VehicleAntiRollBar + { + public int leftWheel; + + public int rightWheel; + + public float stiffness; + } + + public unsafe partial struct JPH_VehicleConstraintSettings + { + public JPH_ConstraintSettings @base; + + [NativeTypeName("JPH_Vec3")] + public float3 up; + + [NativeTypeName("JPH_Vec3")] + public float3 forward; + + public float maxPitchRollAngle; + + [NativeTypeName("uint32_t")] + public uint wheelsCount; + + public JPH_WheelSettings** wheels; + + [NativeTypeName("uint32_t")] + public uint antiRollBarsCount; + + [NativeTypeName("const JPH_VehicleAntiRollBar *")] + public JPH_VehicleAntiRollBar* antiRollBars; + + public JPH_VehicleControllerSettings* controller; + } + + public partial struct JPH_VehicleEngineSettings + { + public float maxTorque; + + public float minRPM; + + public float maxRPM; + + public float inertia; + + public float angularDamping; + } + + public partial struct JPH_VehicleDifferentialSettings + { + public int leftWheel; + + public int rightWheel; + + public float differentialRatio; + + public float leftRightSplit; + + public float limitedSlipRatio; + + public float engineTorqueRatio; + } + + public static unsafe partial class UnsafeBindings + { + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemThreadPool_Create([NativeTypeName("const JobSystemThreadPoolConfig *")] JobSystemThreadPoolConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemCallback_Create([NativeTypeName("const JPH_JobSystemConfig *")] JPH_JobSystemConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_JobSystem_Destroy(JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Init(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shutdown(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetTraceHandler([NativeTypeName("JPH_TraceFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetAssertFailureHandler([NativeTypeName("JPH_AssertFailureFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollideShapeResult_FreeMembers(JPH_CollideShapeResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollisionEstimationResult_FreeMembers(JPH_CollisionEstimationResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceMask_Create([NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceMask_ConfigureLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer, [NativeTypeName("uint32_t")] uint groupsToInclude, [NativeTypeName("uint32_t")] uint groupsToExclude); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceTable_MapObjectToBroadPhaseLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterMask_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetObjectLayer([NativeTypeName("uint32_t")] uint group, [NativeTypeName("uint32_t")] uint mask); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetGroup([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetMask([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_DisableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_EnableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_ObjectLayerPairFilterTable_ShouldCollide(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterMask_Create([NativeTypeName("const JPH_BroadPhaseLayerInterface *")] JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterTable_Create(JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers, JPH_ObjectLayerPairFilter* objectLayerPairFilter, [NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DrawSettings_InitDefault(JPH_DrawSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsSystem* JPH_PhysicsSystem_Create([NativeTypeName("const JPH_PhysicsSystemSettings *")] JPH_PhysicsSystemSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsUpdateError JPH_PhysicsSystem_Update(JPH_PhysicsSystem* system, float deltaTime, int collisionSteps, JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterface(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterfaceNoLock(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterface([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterfaceNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BroadPhaseQuery *")] + public static extern JPH_BroadPhaseQuery* JPH_PhysicsSystem_GetBroadPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQueryNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetContactListener(JPH_PhysicsSystem* system, JPH_ContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetBodyActivationListener(JPH_PhysicsSystem* system, JPH_BodyActivationListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetSimShapeFilter(JPH_PhysicsSystem* system, JPH_SimShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_PhysicsSystem_WereBodiesInContact([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID")] uint body1, [NativeTypeName("JPH_BodyID")] uint body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumActiveBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, JPH_BodyType type); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetMaxBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetGravity(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetGravity(JPH_PhysicsSystem* system, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID *")] uint* ids, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Constraint **")] JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawBodies(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_DrawSettings *")] JPH_DrawSettings* settings, JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_BodyDrawFilter *")] JPH_BodyDrawFilter* bodyFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraints(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintLimits(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintReferenceFrame(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_SetProcs([NativeTypeName("const JPH_PhysicsStepListener_Procs *")] JPH_PhysicsStepListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsStepListener* JPH_PhysicsStepListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_Destroy(JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quaternion_FromTo([NativeTypeName("const JPH_Vec3 *")] float3* from, [NativeTypeName("const JPH_Vec3 *")] float3* to, [NativeTypeName("JPH_Quat *")] quaternion* quat); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetAxisAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* outAxis, float* outAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetEulerAngles([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisX([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisY([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisZ([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Inversed([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetPerpendicular([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Quat_GetRotationAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_FromEulerAngles([NativeTypeName("const JPH_Vec3 *")] float3* angles, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Add([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Subtract([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Multiply([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_MultiplyScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_DivideScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Dot([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Conjugated([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetSwingTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* outSwing, [NativeTypeName("JPH_Quat *")] quaternion* outTwist); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Lerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Slerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Rotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_InverseRotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsClose([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNearZero([NativeTypeName("const JPH_Vec3 *")] float3* v, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNormalized([NativeTypeName("const JPH_Vec3 *")] float3* v, float tolerance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNaN([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Negate([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalized([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Cross([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Abs([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_Length([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_LengthSquared([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DotProduct([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalize([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Add([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Subtract([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Multiply([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_MultiplyScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Divide([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DivideScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Add([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Subtract([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Multiply([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_MultiplyScalar([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, float scalar, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Zero([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Identity([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Rotation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Translation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_RotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_InverseRotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Scale([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Inversed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Transposed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Zero([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Identity([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Rotation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Translation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_RotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_InverseRotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Scale([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Inversed([NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* m, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisX([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisY([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisZ([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetTranslation([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetQuaternion([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsMaterial* JPH_PhysicsMaterial_Create([NativeTypeName("const char *")] sbyte* name, [NativeTypeName("uint32_t")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsMaterial_Destroy(JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const char *")] + public static extern sbyte* JPH_PhysicsMaterial_GetDebugName([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsMaterial_GetDebugColor([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilter_Destroy(JPH_GroupFilter* groupFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilter_CanCollide(JPH_GroupFilter* groupFilter, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group1, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GroupFilterTable* JPH_GroupFilterTable_Create([NativeTypeName("uint32_t")] uint numSubGroups); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_DisableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_EnableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilterTable_IsCollisionEnabled(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_Destroy(JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_ShapeSettings_GetUserData([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_SetUserData(JPH_ShapeSettings* settings, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_Destroy(JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeType JPH_Shape_GetType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeSubType JPH_Shape_GetSubType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Shape_GetUserData([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_SetUserData(JPH_Shape* shape, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_MustBeStatic([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetCenterOfMass([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetLocalBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Shape_GetSubShapeIDBitsRecursive([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetWorldSpaceBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("JPH_Vec3 *")] float3* scale, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetInnerRadius([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetMassProperties([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_MassProperties* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Shape_GetLeafShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_Shape_GetMaterial([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSurfaceNormal([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSupportingFace([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform, JPH_SupportingFace* outVertices); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetVolume([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_IsValidScale([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_MakeScaleValid([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Shape* JPH_Shape_ScaleShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShapeSettings_GetDensity([NativeTypeName("const JPH_ConvexShapeSettings *")] JPH_ConvexShapeSettings* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShapeSettings_SetDensity(JPH_ConvexShapeSettings* shape, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShape_GetDensity([NativeTypeName("const JPH_ConvexShape *")] JPH_ConvexShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShape_SetDensity(JPH_ConvexShape* shape, float inDensity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShapeSettings* JPH_BoxShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShapeSettings_CreateShape([NativeTypeName("const JPH_BoxShapeSettings *")] JPH_BoxShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BoxShape_GetHalfExtent([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BoxShape_GetConvexRadius([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShapeSettings* JPH_SphereShapeSettings_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShapeSettings_CreateShape([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShapeSettings_GetRadius([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SphereShapeSettings_SetRadius(JPH_SphereShapeSettings* settings, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShape_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShape_GetRadius([NativeTypeName("const JPH_SphereShape *")] JPH_SphereShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShapeSettings* JPH_PlaneShapeSettings_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShapeSettings_CreateShape([NativeTypeName("const JPH_PlaneShapeSettings *")] JPH_PlaneShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShape_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PlaneShape_GetPlane([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape, JPH_Plane* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_PlaneShape_GetHalfExtent([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShapeSettings* JPH_TriangleShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShapeSettings_CreateShape([NativeTypeName("const JPH_TriangleShapeSettings *")] JPH_TriangleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TriangleShape_GetConvexRadius([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex1([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex2([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex3([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShapeSettings* JPH_CapsuleShapeSettings_Create(float halfHeightOfCylinder, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShapeSettings_CreateShape([NativeTypeName("const JPH_CapsuleShapeSettings *")] JPH_CapsuleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShape_Create(float halfHeightOfCylinder, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetRadius([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetHalfHeightOfCylinder([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShapeSettings* JPH_CylinderShapeSettings_Create(float halfHeight, float radius, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShapeSettings_CreateShape([NativeTypeName("const JPH_CylinderShapeSettings *")] JPH_CylinderShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShape_Create(float halfHeight, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetRadius([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetHalfHeight([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShapeSettings* JPH_TaperedCylinderShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius, float convexRadius, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShape* JPH_TaperedCylinderShapeSettings_CreateShape([NativeTypeName("const JPH_TaperedCylinderShapeSettings *")] JPH_TaperedCylinderShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetTopRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetConvexRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShapeSettings* JPH_ConvexHullShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* points, [NativeTypeName("uint32_t")] uint pointsCount, float maxConvexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShape* JPH_ConvexHullShapeSettings_CreateShape([NativeTypeName("const JPH_ConvexHullShapeSettings *")] JPH_ConvexHullShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumPoints([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexHullShape_GetPoint([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumFaces([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumVerticesInFace([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetFaceVertices([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex, [NativeTypeName("uint32_t")] uint maxVertices, [NativeTypeName("uint32_t *")] uint* vertices); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create([NativeTypeName("const JPH_Triangle *")] JPH_Triangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* vertices, [NativeTypeName("uint32_t")] uint verticesCount, [NativeTypeName("const JPH_IndexedTriangle *")] JPH_IndexedTriangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShapeSettings_GetMaxTrianglesPerLeaf([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetMaxTrianglesPerLeaf(JPH_MeshShapeSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MeshShapeSettings_GetActiveEdgeCosThresholdAngle([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetActiveEdgeCosThresholdAngle(JPH_MeshShapeSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MeshShapeSettings_GetPerTriangleUserData([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetPerTriangleUserData(JPH_MeshShapeSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Mesh_Shape_BuildQuality JPH_MeshShapeSettings_GetBuildQuality([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetBuildQuality(JPH_MeshShapeSettings* settings, JPH_Mesh_Shape_BuildQuality value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_Sanitize(JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShape* JPH_MeshShapeSettings_CreateShape([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShape_GetTriangleUserData([NativeTypeName("const JPH_MeshShape *")] JPH_MeshShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShapeSettings* JPH_HeightFieldShapeSettings_Create([NativeTypeName("const float *")] float* samples, [NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("uint32_t")] uint sampleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShape* JPH_HeightFieldShapeSettings_CreateShape(JPH_HeightFieldShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HeightFieldShapeSettings_DetermineMinAndMaxSample([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float* pOutMinValue, float* pOutMaxValue, float* pOutQuantizationScale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShapeSettings_CalculateBitsPerSampleForError([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float maxError); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetSampleCount([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetBlockSize([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_HeightFieldShape_GetMaterial([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HeightFieldShape_GetPosition([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_IsNoCollision([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_ProjectOntoSurface([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* outSurfacePosition, [NativeTypeName("JPH_SubShapeID *")] uint* outSubShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HeightFieldShape_GetMinHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HeightFieldShape_GetMaxHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCapsuleShapeSettings* JPH_TaperedCapsuleShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCapsuleShape* JPH_TaperedCapsuleShapeSettings_CreateShape(JPH_TaperedCapsuleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetTopRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShapeSettings_AddShape(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("uint32_t")] uint userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShapeSettings_AddShape2(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("uint32_t")] uint userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetNumSubShapes([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShape_GetSubShape([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Shape **")] JPH_Shape** subShape, [NativeTypeName("JPH_Vec3 *")] float3* positionCOM, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint32_t *")] uint* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetSubShapeIndexFromID([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_StaticCompoundShapeSettings* JPH_StaticCompoundShapeSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_StaticCompoundShape* JPH_StaticCompoundShape_Create([NativeTypeName("const JPH_StaticCompoundShapeSettings *")] JPH_StaticCompoundShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MutableCompoundShapeSettings* JPH_MutableCompoundShapeSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MutableCompoundShape* JPH_MutableCompoundShape_Create([NativeTypeName("const JPH_MutableCompoundShapeSettings *")] JPH_MutableCompoundShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MutableCompoundShape_AddShape(JPH_MutableCompoundShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* child, [NativeTypeName("uint32_t")] uint userData, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_RemoveShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_ModifyShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_ModifyShape2(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* newShape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_AdjustCenterOfMass(JPH_MutableCompoundShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_DecoratedShape_GetInnerShape([NativeTypeName("const JPH_DecoratedShape *")] JPH_DecoratedShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShapeSettings_CreateShape([NativeTypeName("const JPH_RotatedTranslatedShapeSettings *")] JPH_RotatedTranslatedShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RotatedTranslatedShape_GetPosition([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RotatedTranslatedShape_GetRotation([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShape* JPH_ScaledShapeSettings_CreateShape([NativeTypeName("const JPH_ScaledShapeSettings *")] JPH_ScaledShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShape* JPH_ScaledShape_Create([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ScaledShape_GetScale([NativeTypeName("const JPH_ScaledShape *")] JPH_ScaledShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShapeSettings_CreateShape([NativeTypeName("const JPH_OffsetCenterOfMassShapeSettings *")] JPH_OffsetCenterOfMassShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_OffsetCenterOfMassShape_GetOffset([NativeTypeName("const JPH_OffsetCenterOfMassShape *")] JPH_OffsetCenterOfMassShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_EmptyShapeSettings* JPH_EmptyShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* centerOfMass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_EmptyShape* JPH_EmptyShapeSettings_CreateShape([NativeTypeName("const JPH_EmptyShapeSettings *")] JPH_EmptyShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create2([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create3([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_Destroy(JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Quat *")] quaternion* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_BodyCreationSettings_GetUserData([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetUserData(JPH_BodyCreationSettings* settings, [NativeTypeName("uint64_t")] ulong value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyCreationSettings_GetObjectLayer([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetObjectLayer(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetCollisionGroup([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetCollisionGroup(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_BodyCreationSettings_GetMotionType([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMotionType(JPH_BodyCreationSettings* settings, JPH_MotionType value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_AllowedDOFs JPH_BodyCreationSettings_GetAllowedDOFs([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowedDOFs(JPH_BodyCreationSettings* settings, JPH_AllowedDOFs value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowDynamicOrKinematic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowDynamicOrKinematic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetIsSensor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetIsSensor(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetCollideKinematicVsNonDynamic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetUseManifoldReduction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetUseManifoldReduction(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetApplyGyroscopicForce([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetApplyGyroscopicForce(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionQuality JPH_BodyCreationSettings_GetMotionQuality([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMotionQuality(JPH_BodyCreationSettings* settings, JPH_MotionQuality value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetEnhancedInternalEdgeRemoval(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowSleeping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowSleeping(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetFriction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetFriction(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetRestitution([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetRestitution(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetLinearDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetLinearDamping(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetAngularDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAngularDamping(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetMaxLinearVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMaxLinearVelocity(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetMaxAngularVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMaxAngularVelocity(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetGravityFactor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetGravityFactor(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumVelocityStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetNumVelocityStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumPositionStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetNumPositionStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OverrideMassProperties JPH_BodyCreationSettings_GetOverrideMassProperties([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetOverrideMassProperties(JPH_BodyCreationSettings* settings, JPH_OverrideMassProperties value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetInertiaMultiplier([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetInertiaMultiplier(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetMassPropertiesOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_MassProperties* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMassPropertiesOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SoftBodyCreationSettings* JPH_SoftBodyCreationSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SoftBodyCreationSettings_Destroy(JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_Destroy(JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConstraintType JPH_Constraint_GetType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConstraintSubType JPH_Constraint_GetSubType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetConstraintPriority([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetConstraintPriority(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint priority); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumVelocityStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetNumVelocityStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumPositionStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetNumPositionStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_GetEnabled([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetEnabled(JPH_Constraint* constraint, [NativeTypeName("bool")] byte enabled); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Constraint_GetUserData([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetUserData(JPH_Constraint* constraint, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_NotifyShapeChanged(JPH_Constraint* constraint, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* deltaCOM); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_ResetWarmStart(JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_IsActive([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetupVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_WarmStartVelocityConstraint(JPH_Constraint* constraint, float warmStartImpulseRatio); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolveVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolvePositionConstraint(JPH_Constraint* constraint, float deltaTime, float baumgarte); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody1([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody2([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody1Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody2Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraintSettings_Init(JPH_FixedConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_FixedConstraint* JPH_FixedConstraint_Create([NativeTypeName("const JPH_FixedConstraintSettings *")] JPH_FixedConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetSettings([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, JPH_FixedConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraintSettings_Init(JPH_DistanceConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_DistanceConstraint* JPH_DistanceConstraint_Create([NativeTypeName("const JPH_DistanceConstraintSettings *")] JPH_DistanceConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_GetSettings([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint, JPH_DistanceConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_SetDistance(JPH_DistanceConstraint* constraint, float minDistance, float maxDistance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetMinDistance(JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetMaxDistance(JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_GetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_SetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraintSettings_Init(JPH_PointConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PointConstraint* JPH_PointConstraint_Create([NativeTypeName("const JPH_PointConstraintSettings *")] JPH_PointConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetSettings([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, JPH_PointConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_SetPoint1(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_SetPoint2(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraintSettings_Init(JPH_HingeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HingeConstraint* JPH_HingeConstraint_Create([NativeTypeName("const JPH_HingeConstraintSettings *")] JPH_HingeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetSettings(JPH_HingeConstraint* constraint, JPH_HingeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetCurrentAngle(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMaxFrictionTorque(JPH_HingeConstraint* constraint, float frictionTorque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetMaxFrictionTorque(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMotorState(JPH_HingeConstraint* constraint, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_HingeConstraint_GetMotorState(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetTargetAngularVelocity(JPH_HingeConstraint* constraint, float angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTargetAngularVelocity(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetTargetAngle(JPH_HingeConstraint* constraint, float angle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTargetAngle(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetLimits(JPH_HingeConstraint* constraint, float inLimitsMin, float inLimitsMax); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetLimitsMin(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetLimitsMax(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HingeConstraint_HasLimits(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("float[2]")] float* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTotalLambdaRotationLimits([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraintSettings_Init(JPH_SliderConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraintSettings_SetSliderAxis(JPH_SliderConstraintSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SliderConstraint* JPH_SliderConstraint_Create([NativeTypeName("const JPH_SliderConstraintSettings *")] JPH_SliderConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetSettings(JPH_SliderConstraint* constraint, JPH_SliderConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetCurrentPosition(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMaxFrictionForce(JPH_SliderConstraint* constraint, float frictionForce); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetMaxFrictionForce(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMotorSettings(JPH_SliderConstraint* constraint, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetMotorSettings([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, JPH_MotorSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMotorState(JPH_SliderConstraint* constraint, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_SliderConstraint_GetMotorState(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetTargetVelocity(JPH_SliderConstraint* constraint, float velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTargetVelocity(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetTargetPosition(JPH_SliderConstraint* constraint, float position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTargetPosition(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetLimits(JPH_SliderConstraint* constraint, float inLimitsMin, float inLimitsMax); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetLimitsMin(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetLimitsMax(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SliderConstraint_HasLimits(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("float[2]")] float* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTotalLambdaPositionLimits([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraintSettings_Init(JPH_ConeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConeConstraint* JPH_ConeConstraint_Create([NativeTypeName("const JPH_ConeConstraintSettings *")] JPH_ConeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_GetSettings(JPH_ConeConstraint* constraint, JPH_ConeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_SetHalfConeAngle(JPH_ConeConstraint* constraint, float halfConeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConeConstraint_GetCosHalfConeAngle([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraintSettings_Init(JPH_SwingTwistConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SwingTwistConstraint* JPH_SwingTwistConstraint_Create([NativeTypeName("const JPH_SwingTwistConstraintSettings *")] JPH_SwingTwistConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetSettings(JPH_SwingTwistConstraint* constraint, JPH_SwingTwistConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetNormalHalfConeAngle(JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaTwist([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingY([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingZ([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_Init(JPH_SixDOFConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_MakeFreeAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_MakeFixedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_SetLimitedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis, float min, float max); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SixDOFConstraint* JPH_SixDOFConstraint_Create([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetLimitsMin(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetLimitsMax(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorTranslation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* result, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, float inFriction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationInConstraintSpace(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetMotorSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_SixDOFConstraint_GetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inAngularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inPosition); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetOrientationBS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraintSettings_Init(JPH_GearConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GearConstraint* JPH_GearConstraint_Create([NativeTypeName("const JPH_GearConstraintSettings *")] JPH_GearConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraint_GetSettings(JPH_GearConstraint* constraint, JPH_GearConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraint_SetConstraints(JPH_GearConstraint* constraint, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear1, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_GearConstraint_GetTotalLambda([NativeTypeName("const JPH_GearConstraint *")] JPH_GearConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DestroyBodyWithoutID(JPH_BodyInterface* bodyInterface, JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID(JPH_BodyInterface* bodyInterface, JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID2(JPH_BodyInterface* bodyInterface, JPH_Body* body, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_UnassignBodyID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_RemoveBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_RemoveAndDestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_IsActive(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_IsAdded(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyType JPH_BodyInterface_GetBodyType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCenterOfMassPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_BodyInterface_GetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_MotionType motionType, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetRestitution([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetRestitution(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetFriction([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetFriction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionAndRotationWhenChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionRotationAndVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_BodyInterface_GetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_NotifyShapeChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* previousCenterOfMass, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_ActivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DeactivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyInterface_GetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetWorldTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCenterOfMassTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_MoveKinematic(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_ApplyBuoyancyImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPointVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForce(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForce2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* torque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForceAndTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_Vec3 *")] float3* torque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddImpulse2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddAngularImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularImpulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_MotionQuality quality); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionQuality JPH_BodyInterface_GetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetInverseInertia(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_GetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("uint64_t")] ulong inUserData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_BodyInterface_GetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_BodyInterface_GetMaterial(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_InvalidateContactCache(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_LockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockRead* outLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_UnlockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockRead* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_LockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockWrite* outLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_UnlockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockWrite* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyLockMultiRead* JPH_BodyLockInterface_LockMultiRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockMultiRead_Destroy(JPH_BodyLockMultiRead* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_BodyLockMultiRead_GetBody(JPH_BodyLockMultiRead* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyLockMultiWrite* JPH_BodyLockInterface_LockMultiWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockMultiWrite_Destroy(JPH_BodyLockMultiWrite* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyLockMultiWrite_GetBody(JPH_BodyLockMultiWrite* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_AllowedDOFs JPH_MotionProperties_GetAllowedDOFs([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetLinearDamping(JPH_MotionProperties* properties, float damping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetLinearDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetAngularDamping(JPH_MotionProperties* properties, float damping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetAngularDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetMassProperties(JPH_MotionProperties* properties, JPH_AllowedDOFs allowedDOFs, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetInverseMassUnchecked(JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetInverseMass(JPH_MotionProperties* properties, float inverseMass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_GetInverseInertiaDiagonal(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_GetInertiaRotation(JPH_MotionProperties* properties, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetInverseInertia(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* diagonal, [NativeTypeName("JPH_Quat *")] quaternion* rot); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_ScaleToMass(JPH_MotionProperties* properties, float mass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RayCast_GetPointOnRay([NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RRayCast_GetPointOnRay([NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_DecomposePrincipalMomentsOfInertia(JPH_MassProperties* properties, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* rotation, [NativeTypeName("JPH_Vec3 *")] float3* diagonal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_ScaleToMass(JPH_MassProperties* properties, float mass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_GetEquivalentSolidBoxSize(float mass, [NativeTypeName("const JPH_Vec3 *")] float3* inertiaDiagonal, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollideShapeSettings_Init(JPH_CollideShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeCastSettings_Init(JPH_ShapeCastSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("JPH_RayCastBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay2([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_RayCastBodyResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideAABox([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideSphere([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* center, float radius, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollidePoint([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CastRayCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay3([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_CollidePointCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollideShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Body_GetID([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyType JPH_Body_GetBodyType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsRigidBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSoftBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsActive([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsStatic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsKinematic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_CanBeKinematicOrDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetIsSensor(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSensor([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetCollideKinematicVsNonDynamic(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetUseManifoldReduction(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReduction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReductionWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetApplyGyroscopicForce(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetApplyGyroscopicForce([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetEnhancedInternalEdgeRemoval(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemovalWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_Body_GetMotionType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetMotionType(JPH_Body* body, JPH_MotionType motionType); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BroadPhaseLayer")] + public static extern byte JPH_Body_GetBroadPhaseLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Body_GetObjectLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCollisionGroup([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetCollisionGroup(JPH_Body* body, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetAllowSleeping(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAllowSleeping(JPH_Body* body, [NativeTypeName("bool")] byte allowSleeping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetSleepTimer(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Body_GetFriction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetFriction(JPH_Body* body, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Body_GetRestitution([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetRestitution(JPH_Body* body, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetLinearVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetLinearVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetLinearVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAngularVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAngularVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAngularVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPointVelocityCOM(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* pointRelativeToCOM, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPointVelocity(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddForce(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddForceAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddTorque(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAccumulatedForce(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAccumulatedTorque(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetForce(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetTorque(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetMotion(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetInverseInertia(JPH_Body* body, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddImpulseAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddAngularImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* angularImpulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_MoveKinematic(JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_ApplyBuoyancyImpulse(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsInBroadPhase(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsCollisionCacheInvalid(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Body_GetShape(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetRotation([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCenterOfMassPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetInverseCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldSpaceBounds([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldSpaceSurfaceNormal([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionProperties* JPH_Body_GetMotionProperties(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionProperties* JPH_Body_GetMotionPropertiesUnchecked(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetUserData(JPH_Body* body, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Body_GetUserData(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_Body_GetFixedToWorldBody(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerFilter_SetProcs([NativeTypeName("const JPH_BroadPhaseLayerFilter_Procs *")] JPH_BroadPhaseLayerFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerFilter* JPH_BroadPhaseLayerFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerFilter_Destroy(JPH_BroadPhaseLayerFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerFilter_SetProcs([NativeTypeName("const JPH_ObjectLayerFilter_Procs *")] JPH_ObjectLayerFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerFilter* JPH_ObjectLayerFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerFilter_Destroy(JPH_ObjectLayerFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyFilter_SetProcs([NativeTypeName("const JPH_BodyFilter_Procs *")] JPH_BodyFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyFilter* JPH_BodyFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyFilter_Destroy(JPH_BodyFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_SetProcs([NativeTypeName("const JPH_ShapeFilter_Procs *")] JPH_ShapeFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeFilter* JPH_ShapeFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_Destroy(JPH_ShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_ShapeFilter_GetBodyID2(JPH_ShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_SetBodyID2(JPH_ShapeFilter* filter, [NativeTypeName("JPH_BodyID")] uint id); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SimShapeFilter_SetProcs([NativeTypeName("const JPH_SimShapeFilter_Procs *")] JPH_SimShapeFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SimShapeFilter* JPH_SimShapeFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SimShapeFilter_Destroy(JPH_SimShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactListener_SetProcs([NativeTypeName("const JPH_ContactListener_Procs *")] JPH_ContactListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ContactListener* JPH_ContactListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactListener_Destroy(JPH_ContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyActivationListener_SetProcs([NativeTypeName("const JPH_BodyActivationListener_Procs *")] JPH_BodyActivationListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyActivationListener* JPH_BodyActivationListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyActivationListener_Destroy(JPH_BodyActivationListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyDrawFilter_SetProcs([NativeTypeName("const JPH_BodyDrawFilter_Procs *")] JPH_BodyDrawFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyDrawFilter* JPH_BodyDrawFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyDrawFilter_Destroy(JPH_BodyDrawFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceNormal([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactManifold_GetPenetrationDepth([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ContactManifold_GetPointCount([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetFriction(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetFriction(JPH_ContactSettings* settings, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetRestitution(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRestitution(JPH_ContactSettings* settings, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvMassScale1(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvMassScale1(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvInertiaScale1(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvInertiaScale1(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvMassScale2(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvMassScale2(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvInertiaScale2(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvInertiaScale2(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_ContactSettings_GetIsSensor([NativeTypeName("const JPH_ContactSettings *")] JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetIsSensor(JPH_ContactSettings* settings, [NativeTypeName("bool")] byte sensor); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_GetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_GetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_Destroy(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterBase_GetCosMaxSlopeAngle(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_SetMaxSlopeAngle(JPH_CharacterBase* character, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetUp(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_SetUp(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSlopeTooSteep(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_CharacterBase_GetShape(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GroundState JPH_CharacterBase_GetGroundState(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSupported(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundPosition(JPH_CharacterBase* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundNormal(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundVelocity(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_CharacterBase_GetGroundMaterial(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterBase_GetGroundBodyId(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_CharacterBase_GetGroundSubShapeId(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterBase_GetGroundUserData(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterSettings_Init(JPH_CharacterSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Character* JPH_Character_Create([NativeTypeName("const JPH_CharacterSettings *")] JPH_CharacterSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddToPhysicsSystem(JPH_Character* character, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_RemoveFromPhysicsSystem(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_Activate(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_PostSimulation(JPH_Character* character, float maxSeparationDistance, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLinearAndAngularVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetLinearVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddImpulse(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Character_GetBodyID([NativeTypeName("const JPH_Character *")] JPH_Character* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetPositionAndRotation(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetPositionAndRotation(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetPosition(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetRotation(JPH_Character* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetRotation(JPH_Character* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetCenterOfMassPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* result, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetWorldTransform(JPH_Character* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Character_GetLayer([NativeTypeName("const JPH_Character *")] JPH_Character* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLayer(JPH_Character* character, [NativeTypeName("JPH_ObjectLayer")] uint value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetShape(JPH_Character* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtualSettings_Init(JPH_CharacterVirtualSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVirtual* JPH_CharacterVirtual_Create([NativeTypeName("const JPH_CharacterVirtualSettings *")] JPH_CharacterVirtualSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_CharacterID")] + public static extern uint JPH_CharacterVirtual_GetID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetListener(JPH_CharacterVirtual* character, JPH_CharacterContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetCharacterVsCharacterCollision(JPH_CharacterVirtual* character, JPH_CharacterVsCharacterCollision* characterVsCharacterCollision); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetPosition(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetPosition(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetRotation(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetRotation(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetWorldTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetCenterOfMassTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetMass(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMass(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetMaxStrength(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMaxStrength(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetPenetrationRecoverySpeed(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetPenetrationRecoverySpeed(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_GetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetCharacterPadding(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetMaxNumHits(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMaxNumHits(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetHitReductionCosMaxAngle(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetHitReductionCosMaxAngle(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_GetMaxHitsExceeded(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterVirtual_GetUserData([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetUserData(JPH_CharacterVirtual* character, [NativeTypeName("uint64_t")] ulong value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterVirtual_GetInnerBodyID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_CancelVelocityTowardsSteepSlopes(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* desiredVelocity, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_StartTrackingContactChanges(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_FinishTrackingContactChanges(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_Update(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_ExtendedUpdate(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_ExtendedUpdateSettings *")] JPH_ExtendedUpdateSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_RefreshContacts(JPH_CharacterVirtual* character, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_CanWalkStairs(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* linearVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_WalkStairs(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_Vec3 *")] float3* stepUp, [NativeTypeName("const JPH_Vec3 *")] float3* stepForward, [NativeTypeName("const JPH_Vec3 *")] float3* stepForwardTest, [NativeTypeName("const JPH_Vec3 *")] float3* stepDownExtra, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_StickToFloor(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* stepDown, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_UpdateGroundVelocity(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_SetShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetInnerBodyShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetNumActiveContacts(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetActiveContact(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint index, JPH_CharacterVirtualContact* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWithBody(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_BodyID")] uint body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWith(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterID")] uint other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWithCharacter(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterContactListener_SetProcs([NativeTypeName("const JPH_CharacterContactListener_Procs *")] JPH_CharacterContactListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterContactListener* JPH_CharacterContactListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterContactListener_Destroy(JPH_CharacterContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollision_SetProcs([NativeTypeName("const JPH_CharacterVsCharacterCollision_Procs *")] JPH_CharacterVsCharacterCollision_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_CreateSimple(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollisionSimple_AddCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollisionSimple_RemoveCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollision_Destroy(JPH_CharacterVsCharacterCollision* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CollideShapeVsShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform2, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* collideShapeSettings, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeLocalSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1InShape2LocalSpace, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1InShape2LocalSpace, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeWorldSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* inScale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_SetProcs([NativeTypeName("const JPH_DebugRenderer_Procs *")] JPH_DebugRenderer_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_DebugRenderer* JPH_DebugRenderer_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_Destroy(JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_NextFrame(JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_SetCameraPos(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawLine(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawMarker(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawArrow(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCoordinateSystem(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawPlane(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, int level); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("JPH_Color")] uint color, int level); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("JPH_RMatrix4x4")] rmatrix4x4 matrix, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCapsule(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeightOfCylinder, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeight, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawOpenCone(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* top, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("const JPH_Vec3 *")] float3* perpendicular, float halfAngle, float length, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSwingConeLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float swingYHalfAngle, float swingZHalfAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSwingPyramidLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float minSwingYAngle, float maxSwingYAngle, float minSwingZAngle, float maxSwingZAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawPie(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("const JPH_Vec3 *")] float3* axis, float minAngle, float maxAngle, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawTaperedCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* inMatrix, float top, float bottom, float topRadius, float bottomRadius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Skeleton* JPH_Skeleton_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_Destroy(JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint2(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, int parentIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint3(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, [NativeTypeName("const char *")] sbyte* parentName); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_Skeleton_GetJointCount([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_GetJoint([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, int index, JPH_SkeletonJoint* joint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_Skeleton_GetJointIndex([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_CalculateParentJointIndices(JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Skeleton_AreJointsCorrectlyOrdered([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RagdollSettings* JPH_RagdollSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_Destroy(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Skeleton *")] + public static extern JPH_Skeleton* JPH_RagdollSettings_GetSkeleton([NativeTypeName("const JPH_RagdollSettings *")] JPH_RagdollSettings* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_SetSkeleton(JPH_RagdollSettings* character, JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_RagdollSettings_Stabilize(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_DisableParentChildCollisions(JPH_RagdollSettings* settings, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* jointMatrices, float minSeparationDistance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_CalculateBodyIndexToConstraintIndex(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_RagdollSettings_GetConstraintIndexForBodyIndex(JPH_RagdollSettings* settings, int bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_CalculateConstraintIndexToBodyIdxPair(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Ragdoll* JPH_RagdollSettings_CreateRagdoll(JPH_RagdollSettings* settings, JPH_PhysicsSystem* system, [NativeTypeName("JPH_CollisionGroupID")] uint collisionGroup, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_Destroy(JPH_Ragdoll* ragdoll); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_AddToPhysicsSystem(JPH_Ragdoll* ragdoll, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_RemoveFromPhysicsSystem(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_Activate(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Ragdoll_IsActive([NativeTypeName("const JPH_Ragdoll *")] JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_ResetWarmStart(JPH_Ragdoll* ragdoll); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_EstimateCollisionResponse([NativeTypeName("const JPH_Body *")] JPH_Body* body1, [NativeTypeName("const JPH_Body *")] JPH_Body* body2, [NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, float combinedFriction, float combinedRestitution, float minVelocityForRestitution, [NativeTypeName("uint32_t")] uint numIterations, JPH_CollisionEstimationResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraintSettings_Init(JPH_VehicleConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleConstraint* JPH_VehicleConstraint_Create(JPH_Body* body, [NativeTypeName("const JPH_VehicleConstraintSettings *")] JPH_VehicleConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsStepListener* JPH_VehicleConstraint_AsPhysicsStepListener(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_SetMaxPitchRollAngle(JPH_VehicleConstraint* constraint, float maxPitchRollAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_SetVehicleCollisionTester(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_OverrideGravity(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_VehicleConstraint_IsGravityOverridden([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetGravityOverride([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_ResetGravityOverride(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetLocalForward([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetLocalUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWorldUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_VehicleConstraint_GetVehicleBody([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleController* JPH_VehicleConstraint_GetController(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleConstraint_GetWheelsCount(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Wheel* JPH_VehicleConstraint_GetWheel(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelLocalBasis(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* outForward, [NativeTypeName("JPH_Vec3 *")] float3* outUp, [NativeTypeName("JPH_Vec3 *")] float3* outRight); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelLocalTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelWorldTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettings* JPH_WheelSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_Destroy(JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetPosition([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetPosition(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionDirection([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionDirection(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSteeringAxis([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSteeringAxis(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetWheelUp([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWheelUp(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetWheelForward([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWheelForward(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionMinLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionMinLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionMaxLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionMaxLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionPreloadLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionPreloadLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionSpring([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionSpring(JPH_WheelSettings* settings, JPH_SpringSettings* springSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetRadius([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetRadius(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetWidth([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWidth(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_WheelSettings_GetEnableSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetEnableSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Wheel* JPH_Wheel_Create([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_Destroy(JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettings *")] + public static extern JPH_WheelSettings* JPH_Wheel_GetSettings([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetAngularVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetAngularVelocity(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetRotationAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetRotationAngle(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSteerAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetSteerAngle(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasContact([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Wheel_GetContactBodyID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_Wheel_GetContactSubShapeID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactPosition([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactPointVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactNormal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactLongitudinal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactLateral([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSuspensionLength([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSuspensionLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetLongitudinalLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetLateralLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasHitHardPoint([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleAntiRollBar_Init(JPH_VehicleAntiRollBar* antiRollBar); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleEngineSettings_Init(JPH_VehicleEngineSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleDifferentialSettings_Init(JPH_VehicleDifferentialSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleTransmissionSettings* JPH_VehicleTransmissionSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_Destroy(JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TransmissionMode JPH_VehicleTransmissionSettings_GetMode([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetMode(JPH_VehicleTransmissionSettings* settings, JPH_TransmissionMode value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetReverseGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetReverseGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetReverseGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetSwitchTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetSwitchTime(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetClutchReleaseTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetClutchReleaseTime(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetSwitchLatency([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetSwitchLatency(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetShiftUpRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetShiftUpRPM(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetShiftDownRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetShiftDownRPM(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetClutchStrength([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetClutchStrength(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleCollisionTester_Destroy(JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_VehicleCollisionTester_GetObjectLayer([NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleCollisionTester_SetObjectLayer(JPH_VehicleCollisionTester* tester, [NativeTypeName("JPH_ObjectLayer")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterRay* JPH_VehicleCollisionTesterRay_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterCastSphere* JPH_VehicleCollisionTesterCastSphere_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterCastCylinder* JPH_VehicleCollisionTesterCastCylinder_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float convexRadiusFraction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleControllerSettings_Destroy(JPH_VehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleConstraint *")] + public static extern JPH_VehicleConstraint* JPH_VehicleController_GetConstraint(JPH_VehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettingsWV* JPH_WheelSettingsWV_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetInertia([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetInertia(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetAngularDamping([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetAngularDamping(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxSteerAngle([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxSteerAngle(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxBrakeTorque(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxHandBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxHandBrakeTorque(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelWV* JPH_WheelWV_Create([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettingsWV *")] + public static extern JPH_WheelSettingsWV* JPH_WheelWV_GetSettings([NativeTypeName("const JPH_WheelWV *")] JPH_WheelWV* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelWV_ApplyTorque(JPH_WheelWV* wheel, float torque, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheeledVehicleControllerSettings* JPH_WheeledVehicleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetEngine(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_WheeledVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetTransmission(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_WheeledVehicleControllerSettings_GetDifferentialsCount([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialsCount(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_GetDifferential([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, JPH_VehicleDifferentialSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferential(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentials(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleControllerSettings_GetDifferentialLimitedSlipRatio([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialLimitedSlipRatio(JPH_WheeledVehicleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetDriverInput(JPH_WheeledVehicleController* controller, float forward, float right, float brake, float handBrake); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetForwardInput(JPH_WheeledVehicleController* controller, float forward); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetForwardInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetRightInput(JPH_WheeledVehicleController* controller, float rightRatio); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetRightInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetBrakeInput(JPH_WheeledVehicleController* controller, float brakeInput); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetHandBrakeInput(JPH_WheeledVehicleController* controller, float handBrakeInput); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetHandBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetWheelSpeedAtClutch([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettingsTV* JPH_WheelSettingsTV_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsTV_GetLongitudinalFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsTV_SetLongitudinalFriction(JPH_WheelSettingsTV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsTV_GetLateralFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsTV_SetLateralFriction(JPH_WheelSettingsTV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelTV* JPH_WheelTV_Create([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettingsTV *")] + public static extern JPH_WheelSettingsTV* JPH_WheelTV_GetSettings([NativeTypeName("const JPH_WheelTV *")] JPH_WheelTV* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TrackedVehicleControllerSettings* JPH_TrackedVehicleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_SetEngine(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_TrackedVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_SetTransmission(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetDriverInput(JPH_TrackedVehicleController* controller, float forward, float leftRatio, float rightRatio, float brake); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetForwardInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetForwardInput(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetLeftRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetLeftRatio(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetRightRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetRightRatio(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetBrakeInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetBrakeInput(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorcycleControllerSettings* JPH_MotorcycleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetMaxLeanAngle([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetMaxLeanAngle(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringConstant(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringDamping(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSmoothingFactor(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetWheelBase([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanControllerEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_EnableLeanController(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanSteeringLimitEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_EnableLeanSteeringLimit(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringConstant(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringDamping(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSmoothingFactor(JPH_MotorcycleController* controller, float value); + } +} diff --git a/Jolt~/Bindings/UnsafeBindings.cs.meta b/Jolt~/Bindings/UnsafeBindings.cs.meta new file mode 100644 index 0000000..c5112a0 --- /dev/null +++ b/Jolt~/Bindings/UnsafeBindings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 023949b42aa9c4a19a12fbebd8f9c874 \ No newline at end of file diff --git a/Jolt/Generated.meta b/Jolt~/Generated.meta similarity index 100% rename from Jolt/Generated.meta rename to Jolt~/Generated.meta diff --git a/Jolt/Generated/Body.g.cs b/Jolt~/Generated/Body.g.cs similarity index 100% rename from Jolt/Generated/Body.g.cs rename to Jolt~/Generated/Body.g.cs diff --git a/Jolt/Generated/Body.g.cs.meta b/Jolt~/Generated/Body.g.cs.meta similarity index 100% rename from Jolt/Generated/Body.g.cs.meta rename to Jolt~/Generated/Body.g.cs.meta diff --git a/Jolt/Generated/BodyActivationListener.g.cs b/Jolt~/Generated/BodyActivationListener.g.cs similarity index 100% rename from Jolt/Generated/BodyActivationListener.g.cs rename to Jolt~/Generated/BodyActivationListener.g.cs diff --git a/Jolt/Generated/BodyActivationListener.g.cs.meta b/Jolt~/Generated/BodyActivationListener.g.cs.meta similarity index 100% rename from Jolt/Generated/BodyActivationListener.g.cs.meta rename to Jolt~/Generated/BodyActivationListener.g.cs.meta diff --git a/Jolt/Generated/BodyCreationSettings.g.cs b/Jolt~/Generated/BodyCreationSettings.g.cs similarity index 100% rename from Jolt/Generated/BodyCreationSettings.g.cs rename to Jolt~/Generated/BodyCreationSettings.g.cs diff --git a/Jolt/Generated/BodyCreationSettings.g.cs.meta b/Jolt~/Generated/BodyCreationSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/BodyCreationSettings.g.cs.meta rename to Jolt~/Generated/BodyCreationSettings.g.cs.meta diff --git a/Jolt/Generated/BodyFilter.g.cs b/Jolt~/Generated/BodyFilter.g.cs similarity index 100% rename from Jolt/Generated/BodyFilter.g.cs rename to Jolt~/Generated/BodyFilter.g.cs diff --git a/Jolt/Generated/BodyFilter.g.cs.meta b/Jolt~/Generated/BodyFilter.g.cs.meta similarity index 100% rename from Jolt/Generated/BodyFilter.g.cs.meta rename to Jolt~/Generated/BodyFilter.g.cs.meta diff --git a/Jolt/Generated/BodyInterface.g.cs b/Jolt~/Generated/BodyInterface.g.cs similarity index 100% rename from Jolt/Generated/BodyInterface.g.cs rename to Jolt~/Generated/BodyInterface.g.cs diff --git a/Jolt/Generated/BodyInterface.g.cs.meta b/Jolt~/Generated/BodyInterface.g.cs.meta similarity index 100% rename from Jolt/Generated/BodyInterface.g.cs.meta rename to Jolt~/Generated/BodyInterface.g.cs.meta diff --git a/Jolt/Generated/BodyLockInterface.g.cs b/Jolt~/Generated/BodyLockInterface.g.cs similarity index 100% rename from Jolt/Generated/BodyLockInterface.g.cs rename to Jolt~/Generated/BodyLockInterface.g.cs diff --git a/Jolt/Generated/BodyLockInterface.g.cs.meta b/Jolt~/Generated/BodyLockInterface.g.cs.meta similarity index 100% rename from Jolt/Generated/BodyLockInterface.g.cs.meta rename to Jolt~/Generated/BodyLockInterface.g.cs.meta diff --git a/Jolt/Generated/BoxShape.g.cs b/Jolt~/Generated/BoxShape.g.cs similarity index 100% rename from Jolt/Generated/BoxShape.g.cs rename to Jolt~/Generated/BoxShape.g.cs diff --git a/Jolt/Generated/BoxShape.g.cs.meta b/Jolt~/Generated/BoxShape.g.cs.meta similarity index 100% rename from Jolt/Generated/BoxShape.g.cs.meta rename to Jolt~/Generated/BoxShape.g.cs.meta diff --git a/Jolt/Generated/BoxShapeSettings.g.cs b/Jolt~/Generated/BoxShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/BoxShapeSettings.g.cs rename to Jolt~/Generated/BoxShapeSettings.g.cs diff --git a/Jolt/Generated/BoxShapeSettings.g.cs.meta b/Jolt~/Generated/BoxShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/BoxShapeSettings.g.cs.meta rename to Jolt~/Generated/BoxShapeSettings.g.cs.meta diff --git a/Jolt/Generated/BroadPhaseLayerFilter.g.cs b/Jolt~/Generated/BroadPhaseLayerFilter.g.cs similarity index 100% rename from Jolt/Generated/BroadPhaseLayerFilter.g.cs rename to Jolt~/Generated/BroadPhaseLayerFilter.g.cs diff --git a/Jolt/Generated/BroadPhaseLayerFilter.g.cs.meta b/Jolt~/Generated/BroadPhaseLayerFilter.g.cs.meta similarity index 100% rename from Jolt/Generated/BroadPhaseLayerFilter.g.cs.meta rename to Jolt~/Generated/BroadPhaseLayerFilter.g.cs.meta diff --git a/Jolt/Generated/BroadPhaseLayerInterfaceMask.g.cs b/Jolt~/Generated/BroadPhaseLayerInterfaceMask.g.cs similarity index 100% rename from Jolt/Generated/BroadPhaseLayerInterfaceMask.g.cs rename to Jolt~/Generated/BroadPhaseLayerInterfaceMask.g.cs diff --git a/Jolt/Generated/BroadPhaseLayerInterfaceMask.g.cs.meta b/Jolt~/Generated/BroadPhaseLayerInterfaceMask.g.cs.meta similarity index 100% rename from Jolt/Generated/BroadPhaseLayerInterfaceMask.g.cs.meta rename to Jolt~/Generated/BroadPhaseLayerInterfaceMask.g.cs.meta diff --git a/Jolt/Generated/BroadPhaseLayerInterfaceTable.g.cs b/Jolt~/Generated/BroadPhaseLayerInterfaceTable.g.cs similarity index 100% rename from Jolt/Generated/BroadPhaseLayerInterfaceTable.g.cs rename to Jolt~/Generated/BroadPhaseLayerInterfaceTable.g.cs diff --git a/Jolt/Generated/BroadPhaseLayerInterfaceTable.g.cs.meta b/Jolt~/Generated/BroadPhaseLayerInterfaceTable.g.cs.meta similarity index 100% rename from Jolt/Generated/BroadPhaseLayerInterfaceTable.g.cs.meta rename to Jolt~/Generated/BroadPhaseLayerInterfaceTable.g.cs.meta diff --git a/Jolt/Generated/BroadPhaseQuery.g.cs b/Jolt~/Generated/BroadPhaseQuery.g.cs similarity index 100% rename from Jolt/Generated/BroadPhaseQuery.g.cs rename to Jolt~/Generated/BroadPhaseQuery.g.cs diff --git a/Jolt/Generated/BroadPhaseQuery.g.cs.meta b/Jolt~/Generated/BroadPhaseQuery.g.cs.meta similarity index 100% rename from Jolt/Generated/BroadPhaseQuery.g.cs.meta rename to Jolt~/Generated/BroadPhaseQuery.g.cs.meta diff --git a/Jolt/Generated/CapsuleShape.g.cs b/Jolt~/Generated/CapsuleShape.g.cs similarity index 100% rename from Jolt/Generated/CapsuleShape.g.cs rename to Jolt~/Generated/CapsuleShape.g.cs diff --git a/Jolt/Generated/CapsuleShape.g.cs.meta b/Jolt~/Generated/CapsuleShape.g.cs.meta similarity index 100% rename from Jolt/Generated/CapsuleShape.g.cs.meta rename to Jolt~/Generated/CapsuleShape.g.cs.meta diff --git a/Jolt/Generated/CapsuleShapeSettings.g.cs b/Jolt~/Generated/CapsuleShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/CapsuleShapeSettings.g.cs rename to Jolt~/Generated/CapsuleShapeSettings.g.cs diff --git a/Jolt/Generated/CapsuleShapeSettings.g.cs.meta b/Jolt~/Generated/CapsuleShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/CapsuleShapeSettings.g.cs.meta rename to Jolt~/Generated/CapsuleShapeSettings.g.cs.meta diff --git a/Jolt/Generated/CompoundShapeSettings.g.cs b/Jolt~/Generated/CompoundShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/CompoundShapeSettings.g.cs rename to Jolt~/Generated/CompoundShapeSettings.g.cs diff --git a/Jolt/Generated/CompoundShapeSettings.g.cs.meta b/Jolt~/Generated/CompoundShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/CompoundShapeSettings.g.cs.meta rename to Jolt~/Generated/CompoundShapeSettings.g.cs.meta diff --git a/Jolt/Generated/ConeConstraint.g.cs b/Jolt~/Generated/ConeConstraint.g.cs similarity index 100% rename from Jolt/Generated/ConeConstraint.g.cs rename to Jolt~/Generated/ConeConstraint.g.cs diff --git a/Jolt/Generated/ConeConstraint.g.cs.meta b/Jolt~/Generated/ConeConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/ConeConstraint.g.cs.meta rename to Jolt~/Generated/ConeConstraint.g.cs.meta diff --git a/Jolt/Generated/Constraint.g.cs b/Jolt~/Generated/Constraint.g.cs similarity index 100% rename from Jolt/Generated/Constraint.g.cs rename to Jolt~/Generated/Constraint.g.cs diff --git a/Jolt/Generated/Constraint.g.cs.meta b/Jolt~/Generated/Constraint.g.cs.meta similarity index 100% rename from Jolt/Generated/Constraint.g.cs.meta rename to Jolt~/Generated/Constraint.g.cs.meta diff --git a/Jolt/Generated/ContactListener.g.cs b/Jolt~/Generated/ContactListener.g.cs similarity index 100% rename from Jolt/Generated/ContactListener.g.cs rename to Jolt~/Generated/ContactListener.g.cs diff --git a/Jolt/Generated/ContactListener.g.cs.meta b/Jolt~/Generated/ContactListener.g.cs.meta similarity index 100% rename from Jolt/Generated/ContactListener.g.cs.meta rename to Jolt~/Generated/ContactListener.g.cs.meta diff --git a/Jolt/Generated/ConvexHullShape.g.cs b/Jolt~/Generated/ConvexHullShape.g.cs similarity index 100% rename from Jolt/Generated/ConvexHullShape.g.cs rename to Jolt~/Generated/ConvexHullShape.g.cs diff --git a/Jolt/Generated/ConvexHullShape.g.cs.meta b/Jolt~/Generated/ConvexHullShape.g.cs.meta similarity index 100% rename from Jolt/Generated/ConvexHullShape.g.cs.meta rename to Jolt~/Generated/ConvexHullShape.g.cs.meta diff --git a/Jolt/Generated/ConvexHullShapeSettings.g.cs b/Jolt~/Generated/ConvexHullShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/ConvexHullShapeSettings.g.cs rename to Jolt~/Generated/ConvexHullShapeSettings.g.cs diff --git a/Jolt/Generated/ConvexHullShapeSettings.g.cs.meta b/Jolt~/Generated/ConvexHullShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/ConvexHullShapeSettings.g.cs.meta rename to Jolt~/Generated/ConvexHullShapeSettings.g.cs.meta diff --git a/Jolt/Generated/ConvexShape.g.cs b/Jolt~/Generated/ConvexShape.g.cs similarity index 100% rename from Jolt/Generated/ConvexShape.g.cs rename to Jolt~/Generated/ConvexShape.g.cs diff --git a/Jolt/Generated/ConvexShape.g.cs.meta b/Jolt~/Generated/ConvexShape.g.cs.meta similarity index 100% rename from Jolt/Generated/ConvexShape.g.cs.meta rename to Jolt~/Generated/ConvexShape.g.cs.meta diff --git a/Jolt/Generated/CylinderShape.g.cs b/Jolt~/Generated/CylinderShape.g.cs similarity index 100% rename from Jolt/Generated/CylinderShape.g.cs rename to Jolt~/Generated/CylinderShape.g.cs diff --git a/Jolt/Generated/CylinderShape.g.cs.meta b/Jolt~/Generated/CylinderShape.g.cs.meta similarity index 100% rename from Jolt/Generated/CylinderShape.g.cs.meta rename to Jolt~/Generated/CylinderShape.g.cs.meta diff --git a/Jolt/Generated/CylinderShapeSettings.g.cs b/Jolt~/Generated/CylinderShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/CylinderShapeSettings.g.cs rename to Jolt~/Generated/CylinderShapeSettings.g.cs diff --git a/Jolt/Generated/CylinderShapeSettings.g.cs.meta b/Jolt~/Generated/CylinderShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/CylinderShapeSettings.g.cs.meta rename to Jolt~/Generated/CylinderShapeSettings.g.cs.meta diff --git a/Jolt/Generated/DistanceConstraint.g.cs b/Jolt~/Generated/DistanceConstraint.g.cs similarity index 100% rename from Jolt/Generated/DistanceConstraint.g.cs rename to Jolt~/Generated/DistanceConstraint.g.cs diff --git a/Jolt/Generated/DistanceConstraint.g.cs.meta b/Jolt~/Generated/DistanceConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/DistanceConstraint.g.cs.meta rename to Jolt~/Generated/DistanceConstraint.g.cs.meta diff --git a/Jolt/Generated/FixedConstraint.g.cs b/Jolt~/Generated/FixedConstraint.g.cs similarity index 100% rename from Jolt/Generated/FixedConstraint.g.cs rename to Jolt~/Generated/FixedConstraint.g.cs diff --git a/Jolt/Generated/FixedConstraint.g.cs.meta b/Jolt~/Generated/FixedConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/FixedConstraint.g.cs.meta rename to Jolt~/Generated/FixedConstraint.g.cs.meta diff --git a/Jolt/Generated/HingeConstraint.g.cs b/Jolt~/Generated/HingeConstraint.g.cs similarity index 100% rename from Jolt/Generated/HingeConstraint.g.cs rename to Jolt~/Generated/HingeConstraint.g.cs diff --git a/Jolt/Generated/HingeConstraint.g.cs.meta b/Jolt~/Generated/HingeConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/HingeConstraint.g.cs.meta rename to Jolt~/Generated/HingeConstraint.g.cs.meta diff --git a/Jolt/Generated/JobSystem.g.cs b/Jolt~/Generated/JobSystem.g.cs similarity index 100% rename from Jolt/Generated/JobSystem.g.cs rename to Jolt~/Generated/JobSystem.g.cs diff --git a/Jolt/Generated/JobSystem.g.cs.meta b/Jolt~/Generated/JobSystem.g.cs.meta similarity index 100% rename from Jolt/Generated/JobSystem.g.cs.meta rename to Jolt~/Generated/JobSystem.g.cs.meta diff --git a/Jolt/Generated/MeshShape.g.cs b/Jolt~/Generated/MeshShape.g.cs similarity index 100% rename from Jolt/Generated/MeshShape.g.cs rename to Jolt~/Generated/MeshShape.g.cs diff --git a/Jolt/Generated/MeshShape.g.cs.meta b/Jolt~/Generated/MeshShape.g.cs.meta similarity index 100% rename from Jolt/Generated/MeshShape.g.cs.meta rename to Jolt~/Generated/MeshShape.g.cs.meta diff --git a/Jolt/Generated/MeshShapeSettings.g.cs b/Jolt~/Generated/MeshShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/MeshShapeSettings.g.cs rename to Jolt~/Generated/MeshShapeSettings.g.cs diff --git a/Jolt/Generated/MeshShapeSettings.g.cs.meta b/Jolt~/Generated/MeshShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/MeshShapeSettings.g.cs.meta rename to Jolt~/Generated/MeshShapeSettings.g.cs.meta diff --git a/Jolt/Generated/MotionProperties.g.cs b/Jolt~/Generated/MotionProperties.g.cs similarity index 100% rename from Jolt/Generated/MotionProperties.g.cs rename to Jolt~/Generated/MotionProperties.g.cs diff --git a/Jolt/Generated/MotionProperties.g.cs.meta b/Jolt~/Generated/MotionProperties.g.cs.meta similarity index 100% rename from Jolt/Generated/MotionProperties.g.cs.meta rename to Jolt~/Generated/MotionProperties.g.cs.meta diff --git a/Jolt/Generated/MutableCompoundShapeSettings.g.cs b/Jolt~/Generated/MutableCompoundShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/MutableCompoundShapeSettings.g.cs rename to Jolt~/Generated/MutableCompoundShapeSettings.g.cs diff --git a/Jolt/Generated/MutableCompoundShapeSettings.g.cs.meta b/Jolt~/Generated/MutableCompoundShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/MutableCompoundShapeSettings.g.cs.meta rename to Jolt~/Generated/MutableCompoundShapeSettings.g.cs.meta diff --git a/Jolt/Generated/NarrowPhaseQuery.g.cs b/Jolt~/Generated/NarrowPhaseQuery.g.cs similarity index 100% rename from Jolt/Generated/NarrowPhaseQuery.g.cs rename to Jolt~/Generated/NarrowPhaseQuery.g.cs diff --git a/Jolt/Generated/NarrowPhaseQuery.g.cs.meta b/Jolt~/Generated/NarrowPhaseQuery.g.cs.meta similarity index 100% rename from Jolt/Generated/NarrowPhaseQuery.g.cs.meta rename to Jolt~/Generated/NarrowPhaseQuery.g.cs.meta diff --git a/Jolt/Generated/ObjectLayerFilter.g.cs b/Jolt~/Generated/ObjectLayerFilter.g.cs similarity index 100% rename from Jolt/Generated/ObjectLayerFilter.g.cs rename to Jolt~/Generated/ObjectLayerFilter.g.cs diff --git a/Jolt/Generated/ObjectLayerFilter.g.cs.meta b/Jolt~/Generated/ObjectLayerFilter.g.cs.meta similarity index 100% rename from Jolt/Generated/ObjectLayerFilter.g.cs.meta rename to Jolt~/Generated/ObjectLayerFilter.g.cs.meta diff --git a/Jolt/Generated/ObjectLayerPairFilterMask.g.cs b/Jolt~/Generated/ObjectLayerPairFilterMask.g.cs similarity index 100% rename from Jolt/Generated/ObjectLayerPairFilterMask.g.cs rename to Jolt~/Generated/ObjectLayerPairFilterMask.g.cs diff --git a/Jolt/Generated/ObjectLayerPairFilterMask.g.cs.meta b/Jolt~/Generated/ObjectLayerPairFilterMask.g.cs.meta similarity index 100% rename from Jolt/Generated/ObjectLayerPairFilterMask.g.cs.meta rename to Jolt~/Generated/ObjectLayerPairFilterMask.g.cs.meta diff --git a/Jolt/Generated/PhysicsMaterial.g.cs b/Jolt~/Generated/PhysicsMaterial.g.cs similarity index 100% rename from Jolt/Generated/PhysicsMaterial.g.cs rename to Jolt~/Generated/PhysicsMaterial.g.cs diff --git a/Jolt/Generated/PhysicsMaterial.g.cs.meta b/Jolt~/Generated/PhysicsMaterial.g.cs.meta similarity index 100% rename from Jolt/Generated/PhysicsMaterial.g.cs.meta rename to Jolt~/Generated/PhysicsMaterial.g.cs.meta diff --git a/Jolt/Generated/PhysicsSystem.g.cs b/Jolt~/Generated/PhysicsSystem.g.cs similarity index 100% rename from Jolt/Generated/PhysicsSystem.g.cs rename to Jolt~/Generated/PhysicsSystem.g.cs diff --git a/Jolt/Generated/PhysicsSystem.g.cs.meta b/Jolt~/Generated/PhysicsSystem.g.cs.meta similarity index 100% rename from Jolt/Generated/PhysicsSystem.g.cs.meta rename to Jolt~/Generated/PhysicsSystem.g.cs.meta diff --git a/Jolt/Generated/PlaneShape.g.cs b/Jolt~/Generated/PlaneShape.g.cs similarity index 100% rename from Jolt/Generated/PlaneShape.g.cs rename to Jolt~/Generated/PlaneShape.g.cs diff --git a/Jolt/Generated/PlaneShape.g.cs.meta b/Jolt~/Generated/PlaneShape.g.cs.meta similarity index 100% rename from Jolt/Generated/PlaneShape.g.cs.meta rename to Jolt~/Generated/PlaneShape.g.cs.meta diff --git a/Jolt/Generated/PlaneShapeSettings.g.cs b/Jolt~/Generated/PlaneShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/PlaneShapeSettings.g.cs rename to Jolt~/Generated/PlaneShapeSettings.g.cs diff --git a/Jolt/Generated/PlaneShapeSettings.g.cs.meta b/Jolt~/Generated/PlaneShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/PlaneShapeSettings.g.cs.meta rename to Jolt~/Generated/PlaneShapeSettings.g.cs.meta diff --git a/Jolt/Generated/PointConstraint.g.cs b/Jolt~/Generated/PointConstraint.g.cs similarity index 100% rename from Jolt/Generated/PointConstraint.g.cs rename to Jolt~/Generated/PointConstraint.g.cs diff --git a/Jolt/Generated/PointConstraint.g.cs.meta b/Jolt~/Generated/PointConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/PointConstraint.g.cs.meta rename to Jolt~/Generated/PointConstraint.g.cs.meta diff --git a/Jolt/Generated/Shape.g.cs b/Jolt~/Generated/Shape.g.cs similarity index 100% rename from Jolt/Generated/Shape.g.cs rename to Jolt~/Generated/Shape.g.cs diff --git a/Jolt/Generated/Shape.g.cs.meta b/Jolt~/Generated/Shape.g.cs.meta similarity index 100% rename from Jolt/Generated/Shape.g.cs.meta rename to Jolt~/Generated/Shape.g.cs.meta diff --git a/Jolt/Generated/ShapeFilter.g.cs b/Jolt~/Generated/ShapeFilter.g.cs similarity index 100% rename from Jolt/Generated/ShapeFilter.g.cs rename to Jolt~/Generated/ShapeFilter.g.cs diff --git a/Jolt/Generated/ShapeFilter.g.cs.meta b/Jolt~/Generated/ShapeFilter.g.cs.meta similarity index 100% rename from Jolt/Generated/ShapeFilter.g.cs.meta rename to Jolt~/Generated/ShapeFilter.g.cs.meta diff --git a/Jolt/Generated/ShapeSettings.g.cs b/Jolt~/Generated/ShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/ShapeSettings.g.cs rename to Jolt~/Generated/ShapeSettings.g.cs diff --git a/Jolt/Generated/ShapeSettings.g.cs.meta b/Jolt~/Generated/ShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/ShapeSettings.g.cs.meta rename to Jolt~/Generated/ShapeSettings.g.cs.meta diff --git a/Jolt/Generated/SixDOFConstraint.g.cs b/Jolt~/Generated/SixDOFConstraint.g.cs similarity index 100% rename from Jolt/Generated/SixDOFConstraint.g.cs rename to Jolt~/Generated/SixDOFConstraint.g.cs diff --git a/Jolt/Generated/SixDOFConstraint.g.cs.meta b/Jolt~/Generated/SixDOFConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/SixDOFConstraint.g.cs.meta rename to Jolt~/Generated/SixDOFConstraint.g.cs.meta diff --git a/Jolt/Generated/SliderConstraint.g.cs b/Jolt~/Generated/SliderConstraint.g.cs similarity index 100% rename from Jolt/Generated/SliderConstraint.g.cs rename to Jolt~/Generated/SliderConstraint.g.cs diff --git a/Jolt/Generated/SliderConstraint.g.cs.meta b/Jolt~/Generated/SliderConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/SliderConstraint.g.cs.meta rename to Jolt~/Generated/SliderConstraint.g.cs.meta diff --git a/Jolt/Generated/SoftBodyCreationSettings.g.cs b/Jolt~/Generated/SoftBodyCreationSettings.g.cs similarity index 100% rename from Jolt/Generated/SoftBodyCreationSettings.g.cs rename to Jolt~/Generated/SoftBodyCreationSettings.g.cs diff --git a/Jolt/Generated/SoftBodyCreationSettings.g.cs.meta b/Jolt~/Generated/SoftBodyCreationSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/SoftBodyCreationSettings.g.cs.meta rename to Jolt~/Generated/SoftBodyCreationSettings.g.cs.meta diff --git a/Jolt/Generated/SphereShape.g.cs b/Jolt~/Generated/SphereShape.g.cs similarity index 100% rename from Jolt/Generated/SphereShape.g.cs rename to Jolt~/Generated/SphereShape.g.cs diff --git a/Jolt/Generated/SphereShape.g.cs.meta b/Jolt~/Generated/SphereShape.g.cs.meta similarity index 100% rename from Jolt/Generated/SphereShape.g.cs.meta rename to Jolt~/Generated/SphereShape.g.cs.meta diff --git a/Jolt/Generated/SphereShapeSettings.g.cs b/Jolt~/Generated/SphereShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/SphereShapeSettings.g.cs rename to Jolt~/Generated/SphereShapeSettings.g.cs diff --git a/Jolt/Generated/SphereShapeSettings.g.cs.meta b/Jolt~/Generated/SphereShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/SphereShapeSettings.g.cs.meta rename to Jolt~/Generated/SphereShapeSettings.g.cs.meta diff --git a/Jolt/Generated/StaticCompoundShapeSettings.g.cs b/Jolt~/Generated/StaticCompoundShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/StaticCompoundShapeSettings.g.cs rename to Jolt~/Generated/StaticCompoundShapeSettings.g.cs diff --git a/Jolt/Generated/StaticCompoundShapeSettings.g.cs.meta b/Jolt~/Generated/StaticCompoundShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/StaticCompoundShapeSettings.g.cs.meta rename to Jolt~/Generated/StaticCompoundShapeSettings.g.cs.meta diff --git a/Jolt/Generated/SwingTwistConstraint.g.cs b/Jolt~/Generated/SwingTwistConstraint.g.cs similarity index 100% rename from Jolt/Generated/SwingTwistConstraint.g.cs rename to Jolt~/Generated/SwingTwistConstraint.g.cs diff --git a/Jolt/Generated/SwingTwistConstraint.g.cs.meta b/Jolt~/Generated/SwingTwistConstraint.g.cs.meta similarity index 100% rename from Jolt/Generated/SwingTwistConstraint.g.cs.meta rename to Jolt~/Generated/SwingTwistConstraint.g.cs.meta diff --git a/Jolt/Generated/TaperedCapsuleShape.g.cs b/Jolt~/Generated/TaperedCapsuleShape.g.cs similarity index 100% rename from Jolt/Generated/TaperedCapsuleShape.g.cs rename to Jolt~/Generated/TaperedCapsuleShape.g.cs diff --git a/Jolt/Generated/TaperedCapsuleShape.g.cs.meta b/Jolt~/Generated/TaperedCapsuleShape.g.cs.meta similarity index 100% rename from Jolt/Generated/TaperedCapsuleShape.g.cs.meta rename to Jolt~/Generated/TaperedCapsuleShape.g.cs.meta diff --git a/Jolt/Generated/TaperedCapsuleShapeSettings.g.cs b/Jolt~/Generated/TaperedCapsuleShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/TaperedCapsuleShapeSettings.g.cs rename to Jolt~/Generated/TaperedCapsuleShapeSettings.g.cs diff --git a/Jolt/Generated/TaperedCapsuleShapeSettings.g.cs.meta b/Jolt~/Generated/TaperedCapsuleShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/TaperedCapsuleShapeSettings.g.cs.meta rename to Jolt~/Generated/TaperedCapsuleShapeSettings.g.cs.meta diff --git a/Jolt/Generated/TriangleShape.g.cs b/Jolt~/Generated/TriangleShape.g.cs similarity index 100% rename from Jolt/Generated/TriangleShape.g.cs rename to Jolt~/Generated/TriangleShape.g.cs diff --git a/Jolt/Generated/TriangleShape.g.cs.meta b/Jolt~/Generated/TriangleShape.g.cs.meta similarity index 100% rename from Jolt/Generated/TriangleShape.g.cs.meta rename to Jolt~/Generated/TriangleShape.g.cs.meta diff --git a/Jolt/Generated/TriangleShapeSettings.g.cs b/Jolt~/Generated/TriangleShapeSettings.g.cs similarity index 100% rename from Jolt/Generated/TriangleShapeSettings.g.cs rename to Jolt~/Generated/TriangleShapeSettings.g.cs diff --git a/Jolt/Generated/TriangleShapeSettings.g.cs.meta b/Jolt~/Generated/TriangleShapeSettings.g.cs.meta similarity index 100% rename from Jolt/Generated/TriangleShapeSettings.g.cs.meta rename to Jolt~/Generated/TriangleShapeSettings.g.cs.meta diff --git a/Jolt~/Jolt.asmdef b/Jolt~/Jolt.asmdef new file mode 100644 index 0000000..c083b4b --- /dev/null +++ b/Jolt~/Jolt.asmdef @@ -0,0 +1,20 @@ +{ + "name": "Jolt", + "rootNamespace": "", + "references": [ + "GUID:11387d2655e74408a69cb1837fae80c7", + "GUID:2665a8d13d1b3f18800f46e256720795", + "GUID:e0cd26848372d4e5c891c569017e11f1", + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:aaad8d8e3f2841b3b3230cf4e63699fe" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Jolt.Tests/Jolt.Tests.asmdef.meta b/Jolt~/Jolt.asmdef.meta similarity index 76% rename from Jolt.Tests/Jolt.Tests.asmdef.meta rename to Jolt~/Jolt.asmdef.meta index 365fd86..5906520 100644 --- a/Jolt.Tests/Jolt.Tests.asmdef.meta +++ b/Jolt~/Jolt.asmdef.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 795cd987791b6af4f975e25e794dc219 +guid: a27d84b966358f640a9a96cddf1d0136 AssemblyDefinitionImporter: externalObjects: {} userData: diff --git a/Jolt/Jolt.cs b/Jolt~/Jolt.cs similarity index 100% rename from Jolt/Jolt.cs rename to Jolt~/Jolt.cs diff --git a/Jolt/Jolt.cs.meta b/Jolt~/Jolt.cs.meta similarity index 100% rename from Jolt/Jolt.cs.meta rename to Jolt~/Jolt.cs.meta diff --git a/Jolt~/Mathematics.meta b/Jolt~/Mathematics.meta new file mode 100644 index 0000000..b7e4660 --- /dev/null +++ b/Jolt~/Mathematics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dc62984bf0bd2864e99dd5c047f41ed2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Jolt~/Mathematics/rmatrix4x4.cs b/Jolt~/Mathematics/rmatrix4x4.cs new file mode 100644 index 0000000..684eb7b --- /dev/null +++ b/Jolt~/Mathematics/rmatrix4x4.cs @@ -0,0 +1,47 @@ +using System.Runtime.InteropServices; +using Unity.Mathematics; + +namespace Jolt +{ + /// + /// A 4x4 matrix with optional double precision on the last column. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct rmatrix4x4 + { + public float4 c0; + public float4 c1; + public float4 c2; + +#if !JOLT_DOUBLE_PRECISION + public float4 c3; +#else + public double4 c3; +#endif + +#if !JOLT_DOUBLE_PRECISION + public static unsafe implicit operator float4x4(rmatrix4x4 mat) + { + return *(float4x4*)&mat; + } + + public static unsafe implicit operator rmatrix4x4(float4x4 mat) + { + return *(rmatrix4x4*)&mat; + } +#else + /// + /// Create a float4x4 from the rmatrix4x4. + /// + /// + /// Because double precision is enabled, this conversion loses precision on the translation column. + /// + public float4x4 IntoFloat4x4() + { + return new float4x4(c0, c1, c2, new float4(c3)); + } + + // TODO implement additional math helpers for double precision mode +#endif + } +} diff --git a/Jolt~/Mathematics/rmatrix4x4.cs.meta b/Jolt~/Mathematics/rmatrix4x4.cs.meta new file mode 100644 index 0000000..e98dcaf --- /dev/null +++ b/Jolt~/Mathematics/rmatrix4x4.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4ae305ec8bb1497493b568d186950dc5 +timeCreated: 1740937612 \ No newline at end of file diff --git a/Jolt~/Mathematics/rvec3.cs b/Jolt~/Mathematics/rvec3.cs new file mode 100644 index 0000000..d3d2ecd --- /dev/null +++ b/Jolt~/Mathematics/rvec3.cs @@ -0,0 +1,80 @@ +using System.Runtime.InteropServices; +using Unity.Mathematics; + +namespace Jolt +{ + /// + /// A 3 vector with optional double precision. + /// + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct rvec3 + { + public static rvec3 zero => new rvec3(); + +#if !JOLT_DOUBLE_PRECISION + + public float x; + public float y; + public float z; + + public rvec3(float x, float y, float z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public rvec3(float3 value) + { + x = value.x; + y = value.y; + z = value.z; + } + + public static unsafe implicit operator float3(rvec3 vec) + { + return *((float3*) &vec); + } + + public static unsafe implicit operator rvec3(float3 vec) + { + return *((rvec3*) &vec); + } + + public static rvec3 one => new rvec3(1f, 1f, 1f); + +#else + + public double x; + public double y; + public double z; + + public rvec3(double x, double y, double z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public rvec3(double3 value) + { + x = value.x; + y = value.y; + z = value.z; + } + + public static unsafe implicit operator double3(rvec3 vec) + { + return *((double3*) &vec); + } + + public static unsafe implicit operator rvec3(double3 vec) + { + return *((rvec3*) &vec); + } + + public static rvec3 one => new rvec3(1.0, 1.0, 1.0); + +#endif + } +} diff --git a/Jolt/Bindings/UnsafeBindings.g.cs.meta b/Jolt~/Mathematics/rvec3.cs.meta similarity index 83% rename from Jolt/Bindings/UnsafeBindings.g.cs.meta rename to Jolt~/Mathematics/rvec3.cs.meta index 7a1d939..517a3f2 100644 --- a/Jolt/Bindings/UnsafeBindings.g.cs.meta +++ b/Jolt~/Mathematics/rvec3.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 38be7efd132262e4b89c7655eca2e8c0 +guid: 8e6e4f11d0db41aea790bd6437f4d56c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Jolt/Native.meta b/Jolt~/Native.meta similarity index 100% rename from Jolt/Native.meta rename to Jolt~/Native.meta diff --git a/Jolt/Native/NativeBool.cs b/Jolt~/Native/NativeBool.cs similarity index 100% rename from Jolt/Native/NativeBool.cs rename to Jolt~/Native/NativeBool.cs diff --git a/Jolt/Native/NativeBool.cs.meta b/Jolt~/Native/NativeBool.cs.meta similarity index 100% rename from Jolt/Native/NativeBool.cs.meta rename to Jolt~/Native/NativeBool.cs.meta diff --git a/Jolt/Native/NativeHandle.cs b/Jolt~/Native/NativeHandle.cs similarity index 100% rename from Jolt/Native/NativeHandle.cs rename to Jolt~/Native/NativeHandle.cs diff --git a/Jolt/Native/NativeHandle.cs.meta b/Jolt~/Native/NativeHandle.cs.meta similarity index 100% rename from Jolt/Native/NativeHandle.cs.meta rename to Jolt~/Native/NativeHandle.cs.meta diff --git a/Jolt/Native/NativeSafetyHandle.cs b/Jolt~/Native/NativeSafetyHandle.cs similarity index 100% rename from Jolt/Native/NativeSafetyHandle.cs rename to Jolt~/Native/NativeSafetyHandle.cs diff --git a/Jolt/Native/NativeSafetyHandle.cs.meta b/Jolt~/Native/NativeSafetyHandle.cs.meta similarity index 100% rename from Jolt/Native/NativeSafetyHandle.cs.meta rename to Jolt~/Native/NativeSafetyHandle.cs.meta diff --git a/Jolt/Native/NativeTypeNameAttribute.cs b/Jolt~/Native/NativeTypeNameAttribute.cs similarity index 100% rename from Jolt/Native/NativeTypeNameAttribute.cs rename to Jolt~/Native/NativeTypeNameAttribute.cs diff --git a/Jolt/Native/NativeTypeNameAttribute.cs.meta b/Jolt~/Native/NativeTypeNameAttribute.cs.meta similarity index 100% rename from Jolt/Native/NativeTypeNameAttribute.cs.meta rename to Jolt~/Native/NativeTypeNameAttribute.cs.meta diff --git a/Jolt/Types.meta b/Jolt~/Types.meta similarity index 100% rename from Jolt/Types.meta rename to Jolt~/Types.meta diff --git a/Jolt/Types/AABox.cs b/Jolt~/Types/AABox.cs similarity index 100% rename from Jolt/Types/AABox.cs rename to Jolt~/Types/AABox.cs diff --git a/Jolt/Types/AABox.cs.meta b/Jolt~/Types/AABox.cs.meta similarity index 100% rename from Jolt/Types/AABox.cs.meta rename to Jolt~/Types/AABox.cs.meta diff --git a/Jolt/Types/Activation.cs b/Jolt~/Types/Activation.cs similarity index 100% rename from Jolt/Types/Activation.cs rename to Jolt~/Types/Activation.cs diff --git a/Jolt/Types/Activation.cs.meta b/Jolt~/Types/Activation.cs.meta similarity index 100% rename from Jolt/Types/Activation.cs.meta rename to Jolt~/Types/Activation.cs.meta diff --git a/Jolt/Types/ActiveEdgeMode.cs b/Jolt~/Types/ActiveEdgeMode.cs similarity index 100% rename from Jolt/Types/ActiveEdgeMode.cs rename to Jolt~/Types/ActiveEdgeMode.cs diff --git a/Jolt/Types/ActiveEdgeMode.cs.meta b/Jolt~/Types/ActiveEdgeMode.cs.meta similarity index 100% rename from Jolt/Types/ActiveEdgeMode.cs.meta rename to Jolt~/Types/ActiveEdgeMode.cs.meta diff --git a/Jolt/Types/AllowedDOFs.cs b/Jolt~/Types/AllowedDOFs.cs similarity index 100% rename from Jolt/Types/AllowedDOFs.cs rename to Jolt~/Types/AllowedDOFs.cs diff --git a/Jolt/Types/AllowedDOFs.cs.meta b/Jolt~/Types/AllowedDOFs.cs.meta similarity index 100% rename from Jolt/Types/AllowedDOFs.cs.meta rename to Jolt~/Types/AllowedDOFs.cs.meta diff --git a/Jolt/Types/BackFaceMode.cs b/Jolt~/Types/BackFaceMode.cs similarity index 100% rename from Jolt/Types/BackFaceMode.cs rename to Jolt~/Types/BackFaceMode.cs diff --git a/Jolt/Types/BackFaceMode.cs.meta b/Jolt~/Types/BackFaceMode.cs.meta similarity index 100% rename from Jolt/Types/BackFaceMode.cs.meta rename to Jolt~/Types/BackFaceMode.cs.meta diff --git a/Jolt/Types/Body.cs b/Jolt~/Types/Body.cs similarity index 100% rename from Jolt/Types/Body.cs rename to Jolt~/Types/Body.cs diff --git a/Jolt/Types/Body.cs.meta b/Jolt~/Types/Body.cs.meta similarity index 100% rename from Jolt/Types/Body.cs.meta rename to Jolt~/Types/Body.cs.meta diff --git a/Jolt/Types/BodyActivationListener.cs b/Jolt~/Types/BodyActivationListener.cs similarity index 100% rename from Jolt/Types/BodyActivationListener.cs rename to Jolt~/Types/BodyActivationListener.cs diff --git a/Jolt/Types/BodyActivationListener.cs.meta b/Jolt~/Types/BodyActivationListener.cs.meta similarity index 100% rename from Jolt/Types/BodyActivationListener.cs.meta rename to Jolt~/Types/BodyActivationListener.cs.meta diff --git a/Jolt/Types/BodyCreationSettings.cs b/Jolt~/Types/BodyCreationSettings.cs similarity index 100% rename from Jolt/Types/BodyCreationSettings.cs rename to Jolt~/Types/BodyCreationSettings.cs diff --git a/Jolt/Types/BodyCreationSettings.cs.meta b/Jolt~/Types/BodyCreationSettings.cs.meta similarity index 100% rename from Jolt/Types/BodyCreationSettings.cs.meta rename to Jolt~/Types/BodyCreationSettings.cs.meta diff --git a/Jolt/Types/BodyFilter.cs b/Jolt~/Types/BodyFilter.cs similarity index 100% rename from Jolt/Types/BodyFilter.cs rename to Jolt~/Types/BodyFilter.cs diff --git a/Jolt/Types/BodyFilter.cs.meta b/Jolt~/Types/BodyFilter.cs.meta similarity index 100% rename from Jolt/Types/BodyFilter.cs.meta rename to Jolt~/Types/BodyFilter.cs.meta diff --git a/Jolt/Types/BodyID.cs b/Jolt~/Types/BodyID.cs similarity index 100% rename from Jolt/Types/BodyID.cs rename to Jolt~/Types/BodyID.cs diff --git a/Jolt/Types/BodyID.cs.meta b/Jolt~/Types/BodyID.cs.meta similarity index 100% rename from Jolt/Types/BodyID.cs.meta rename to Jolt~/Types/BodyID.cs.meta diff --git a/Jolt/Types/BodyInterface.cs b/Jolt~/Types/BodyInterface.cs similarity index 100% rename from Jolt/Types/BodyInterface.cs rename to Jolt~/Types/BodyInterface.cs diff --git a/Jolt/Types/BodyInterface.cs.meta b/Jolt~/Types/BodyInterface.cs.meta similarity index 100% rename from Jolt/Types/BodyInterface.cs.meta rename to Jolt~/Types/BodyInterface.cs.meta diff --git a/Jolt/Types/BodyLockInterface.cs b/Jolt~/Types/BodyLockInterface.cs similarity index 100% rename from Jolt/Types/BodyLockInterface.cs rename to Jolt~/Types/BodyLockInterface.cs diff --git a/Jolt/Types/BodyLockInterface.cs.meta b/Jolt~/Types/BodyLockInterface.cs.meta similarity index 100% rename from Jolt/Types/BodyLockInterface.cs.meta rename to Jolt~/Types/BodyLockInterface.cs.meta diff --git a/Jolt/Types/BodyType.cs b/Jolt~/Types/BodyType.cs similarity index 100% rename from Jolt/Types/BodyType.cs rename to Jolt~/Types/BodyType.cs diff --git a/Jolt/Types/BodyType.cs.meta b/Jolt~/Types/BodyType.cs.meta similarity index 100% rename from Jolt/Types/BodyType.cs.meta rename to Jolt~/Types/BodyType.cs.meta diff --git a/Jolt/Types/BoxShape.cs b/Jolt~/Types/BoxShape.cs similarity index 100% rename from Jolt/Types/BoxShape.cs rename to Jolt~/Types/BoxShape.cs diff --git a/Jolt/Types/BoxShape.cs.meta b/Jolt~/Types/BoxShape.cs.meta similarity index 100% rename from Jolt/Types/BoxShape.cs.meta rename to Jolt~/Types/BoxShape.cs.meta diff --git a/Jolt/Types/BoxShapeSettings.cs b/Jolt~/Types/BoxShapeSettings.cs similarity index 100% rename from Jolt/Types/BoxShapeSettings.cs rename to Jolt~/Types/BoxShapeSettings.cs diff --git a/Jolt/Types/BoxShapeSettings.cs.meta b/Jolt~/Types/BoxShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/BoxShapeSettings.cs.meta rename to Jolt~/Types/BoxShapeSettings.cs.meta diff --git a/Jolt/Types/BroadPhaseCastResult.cs b/Jolt~/Types/BroadPhaseCastResult.cs similarity index 100% rename from Jolt/Types/BroadPhaseCastResult.cs rename to Jolt~/Types/BroadPhaseCastResult.cs diff --git a/Jolt/Types/BroadPhaseCastResult.cs.meta b/Jolt~/Types/BroadPhaseCastResult.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseCastResult.cs.meta rename to Jolt~/Types/BroadPhaseCastResult.cs.meta diff --git a/Jolt/Types/BroadPhaseLayer.cs b/Jolt~/Types/BroadPhaseLayer.cs similarity index 100% rename from Jolt/Types/BroadPhaseLayer.cs rename to Jolt~/Types/BroadPhaseLayer.cs diff --git a/Jolt/Types/BroadPhaseLayer.cs.meta b/Jolt~/Types/BroadPhaseLayer.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseLayer.cs.meta rename to Jolt~/Types/BroadPhaseLayer.cs.meta diff --git a/Jolt/Types/BroadPhaseLayerFilter.cs b/Jolt~/Types/BroadPhaseLayerFilter.cs similarity index 100% rename from Jolt/Types/BroadPhaseLayerFilter.cs rename to Jolt~/Types/BroadPhaseLayerFilter.cs diff --git a/Jolt/Types/BroadPhaseLayerFilter.cs.meta b/Jolt~/Types/BroadPhaseLayerFilter.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseLayerFilter.cs.meta rename to Jolt~/Types/BroadPhaseLayerFilter.cs.meta diff --git a/Jolt/Types/BroadPhaseLayerInterface.cs b/Jolt~/Types/BroadPhaseLayerInterface.cs similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterface.cs rename to Jolt~/Types/BroadPhaseLayerInterface.cs diff --git a/Jolt/Types/BroadPhaseLayerInterface.cs.meta b/Jolt~/Types/BroadPhaseLayerInterface.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterface.cs.meta rename to Jolt~/Types/BroadPhaseLayerInterface.cs.meta diff --git a/Jolt/Types/BroadPhaseLayerInterfaceMask.cs b/Jolt~/Types/BroadPhaseLayerInterfaceMask.cs similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterfaceMask.cs rename to Jolt~/Types/BroadPhaseLayerInterfaceMask.cs diff --git a/Jolt/Types/BroadPhaseLayerInterfaceMask.cs.meta b/Jolt~/Types/BroadPhaseLayerInterfaceMask.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterfaceMask.cs.meta rename to Jolt~/Types/BroadPhaseLayerInterfaceMask.cs.meta diff --git a/Jolt/Types/BroadPhaseLayerInterfaceTable.cs b/Jolt~/Types/BroadPhaseLayerInterfaceTable.cs similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterfaceTable.cs rename to Jolt~/Types/BroadPhaseLayerInterfaceTable.cs diff --git a/Jolt/Types/BroadPhaseLayerInterfaceTable.cs.meta b/Jolt~/Types/BroadPhaseLayerInterfaceTable.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseLayerInterfaceTable.cs.meta rename to Jolt~/Types/BroadPhaseLayerInterfaceTable.cs.meta diff --git a/Jolt/Types/BroadPhaseQuery.cs b/Jolt~/Types/BroadPhaseQuery.cs similarity index 100% rename from Jolt/Types/BroadPhaseQuery.cs rename to Jolt~/Types/BroadPhaseQuery.cs diff --git a/Jolt/Types/BroadPhaseQuery.cs.meta b/Jolt~/Types/BroadPhaseQuery.cs.meta similarity index 100% rename from Jolt/Types/BroadPhaseQuery.cs.meta rename to Jolt~/Types/BroadPhaseQuery.cs.meta diff --git a/Jolt/Types/CapsuleShape.cs b/Jolt~/Types/CapsuleShape.cs similarity index 100% rename from Jolt/Types/CapsuleShape.cs rename to Jolt~/Types/CapsuleShape.cs diff --git a/Jolt/Types/CapsuleShape.cs.meta b/Jolt~/Types/CapsuleShape.cs.meta similarity index 100% rename from Jolt/Types/CapsuleShape.cs.meta rename to Jolt~/Types/CapsuleShape.cs.meta diff --git a/Jolt/Types/CapsuleShapeSettings.cs b/Jolt~/Types/CapsuleShapeSettings.cs similarity index 100% rename from Jolt/Types/CapsuleShapeSettings.cs rename to Jolt~/Types/CapsuleShapeSettings.cs diff --git a/Jolt/Types/CapsuleShapeSettings.cs.meta b/Jolt~/Types/CapsuleShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/CapsuleShapeSettings.cs.meta rename to Jolt~/Types/CapsuleShapeSettings.cs.meta diff --git a/Jolt/Types/CollectFacesMode.cs b/Jolt~/Types/CollectFacesMode.cs similarity index 100% rename from Jolt/Types/CollectFacesMode.cs rename to Jolt~/Types/CollectFacesMode.cs diff --git a/Jolt/Types/CollectFacesMode.cs.meta b/Jolt~/Types/CollectFacesMode.cs.meta similarity index 100% rename from Jolt/Types/CollectFacesMode.cs.meta rename to Jolt~/Types/CollectFacesMode.cs.meta diff --git a/Jolt/Types/CollidePointResult.cs b/Jolt~/Types/CollidePointResult.cs similarity index 100% rename from Jolt/Types/CollidePointResult.cs rename to Jolt~/Types/CollidePointResult.cs diff --git a/Jolt/Types/CollidePointResult.cs.meta b/Jolt~/Types/CollidePointResult.cs.meta similarity index 100% rename from Jolt/Types/CollidePointResult.cs.meta rename to Jolt~/Types/CollidePointResult.cs.meta diff --git a/Jolt/Types/CollideSettings.cs b/Jolt~/Types/CollideSettings.cs similarity index 100% rename from Jolt/Types/CollideSettings.cs rename to Jolt~/Types/CollideSettings.cs diff --git a/Jolt/Types/CollideSettings.cs.meta b/Jolt~/Types/CollideSettings.cs.meta similarity index 100% rename from Jolt/Types/CollideSettings.cs.meta rename to Jolt~/Types/CollideSettings.cs.meta diff --git a/Jolt/Types/CollideShapeResult.cs b/Jolt~/Types/CollideShapeResult.cs similarity index 100% rename from Jolt/Types/CollideShapeResult.cs rename to Jolt~/Types/CollideShapeResult.cs diff --git a/Jolt/Types/CollideShapeResult.cs.meta b/Jolt~/Types/CollideShapeResult.cs.meta similarity index 100% rename from Jolt/Types/CollideShapeResult.cs.meta rename to Jolt~/Types/CollideShapeResult.cs.meta diff --git a/Jolt/Types/CollideShapeSettings.cs b/Jolt~/Types/CollideShapeSettings.cs similarity index 100% rename from Jolt/Types/CollideShapeSettings.cs rename to Jolt~/Types/CollideShapeSettings.cs diff --git a/Jolt/Types/CollideShapeSettings.cs.meta b/Jolt~/Types/CollideShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/CollideShapeSettings.cs.meta rename to Jolt~/Types/CollideShapeSettings.cs.meta diff --git a/Jolt/Types/CollisionCollectorType.cs b/Jolt~/Types/CollisionCollectorType.cs similarity index 100% rename from Jolt/Types/CollisionCollectorType.cs rename to Jolt~/Types/CollisionCollectorType.cs diff --git a/Jolt/Types/CollisionCollectorType.cs.meta b/Jolt~/Types/CollisionCollectorType.cs.meta similarity index 100% rename from Jolt/Types/CollisionCollectorType.cs.meta rename to Jolt~/Types/CollisionCollectorType.cs.meta diff --git a/Jolt/Types/CompoundShapeSettings.cs b/Jolt~/Types/CompoundShapeSettings.cs similarity index 100% rename from Jolt/Types/CompoundShapeSettings.cs rename to Jolt~/Types/CompoundShapeSettings.cs diff --git a/Jolt/Types/CompoundShapeSettings.cs.meta b/Jolt~/Types/CompoundShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/CompoundShapeSettings.cs.meta rename to Jolt~/Types/CompoundShapeSettings.cs.meta diff --git a/Jolt/Types/ConeConstraint.cs b/Jolt~/Types/ConeConstraint.cs similarity index 100% rename from Jolt/Types/ConeConstraint.cs rename to Jolt~/Types/ConeConstraint.cs diff --git a/Jolt/Types/ConeConstraint.cs.meta b/Jolt~/Types/ConeConstraint.cs.meta similarity index 100% rename from Jolt/Types/ConeConstraint.cs.meta rename to Jolt~/Types/ConeConstraint.cs.meta diff --git a/Jolt/Types/ConeConstraintSettings.cs b/Jolt~/Types/ConeConstraintSettings.cs similarity index 100% rename from Jolt/Types/ConeConstraintSettings.cs rename to Jolt~/Types/ConeConstraintSettings.cs diff --git a/Jolt/Types/ConeConstraintSettings.cs.meta b/Jolt~/Types/ConeConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/ConeConstraintSettings.cs.meta rename to Jolt~/Types/ConeConstraintSettings.cs.meta diff --git a/Jolt/Types/Constraint.cs b/Jolt~/Types/Constraint.cs similarity index 100% rename from Jolt/Types/Constraint.cs rename to Jolt~/Types/Constraint.cs diff --git a/Jolt/Types/Constraint.cs.meta b/Jolt~/Types/Constraint.cs.meta similarity index 100% rename from Jolt/Types/Constraint.cs.meta rename to Jolt~/Types/Constraint.cs.meta diff --git a/Jolt/Types/ConstraintSettings.cs b/Jolt~/Types/ConstraintSettings.cs similarity index 100% rename from Jolt/Types/ConstraintSettings.cs rename to Jolt~/Types/ConstraintSettings.cs diff --git a/Jolt/Types/ConstraintSettings.cs.meta b/Jolt~/Types/ConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/ConstraintSettings.cs.meta rename to Jolt~/Types/ConstraintSettings.cs.meta diff --git a/Jolt/Types/ConstraintSpace.cs b/Jolt~/Types/ConstraintSpace.cs similarity index 100% rename from Jolt/Types/ConstraintSpace.cs rename to Jolt~/Types/ConstraintSpace.cs diff --git a/Jolt/Types/ConstraintSpace.cs.meta b/Jolt~/Types/ConstraintSpace.cs.meta similarity index 100% rename from Jolt/Types/ConstraintSpace.cs.meta rename to Jolt~/Types/ConstraintSpace.cs.meta diff --git a/Jolt/Types/ConstraintSubType.cs b/Jolt~/Types/ConstraintSubType.cs similarity index 100% rename from Jolt/Types/ConstraintSubType.cs rename to Jolt~/Types/ConstraintSubType.cs diff --git a/Jolt/Types/ConstraintSubType.cs.meta b/Jolt~/Types/ConstraintSubType.cs.meta similarity index 100% rename from Jolt/Types/ConstraintSubType.cs.meta rename to Jolt~/Types/ConstraintSubType.cs.meta diff --git a/Jolt/Types/ConstraintType.cs b/Jolt~/Types/ConstraintType.cs similarity index 100% rename from Jolt/Types/ConstraintType.cs rename to Jolt~/Types/ConstraintType.cs diff --git a/Jolt/Types/ConstraintType.cs.meta b/Jolt~/Types/ConstraintType.cs.meta similarity index 100% rename from Jolt/Types/ConstraintType.cs.meta rename to Jolt~/Types/ConstraintType.cs.meta diff --git a/Jolt/Types/ContactListener.cs b/Jolt~/Types/ContactListener.cs similarity index 100% rename from Jolt/Types/ContactListener.cs rename to Jolt~/Types/ContactListener.cs diff --git a/Jolt/Types/ContactListener.cs.meta b/Jolt~/Types/ContactListener.cs.meta similarity index 100% rename from Jolt/Types/ContactListener.cs.meta rename to Jolt~/Types/ContactListener.cs.meta diff --git a/Jolt/Types/ConvexHullShape.cs b/Jolt~/Types/ConvexHullShape.cs similarity index 100% rename from Jolt/Types/ConvexHullShape.cs rename to Jolt~/Types/ConvexHullShape.cs diff --git a/Jolt/Types/ConvexHullShape.cs.meta b/Jolt~/Types/ConvexHullShape.cs.meta similarity index 100% rename from Jolt/Types/ConvexHullShape.cs.meta rename to Jolt~/Types/ConvexHullShape.cs.meta diff --git a/Jolt/Types/ConvexHullShapeSettings.cs b/Jolt~/Types/ConvexHullShapeSettings.cs similarity index 100% rename from Jolt/Types/ConvexHullShapeSettings.cs rename to Jolt~/Types/ConvexHullShapeSettings.cs diff --git a/Jolt/Types/ConvexHullShapeSettings.cs.meta b/Jolt~/Types/ConvexHullShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/ConvexHullShapeSettings.cs.meta rename to Jolt~/Types/ConvexHullShapeSettings.cs.meta diff --git a/Jolt/Types/ConvexShape.cs b/Jolt~/Types/ConvexShape.cs similarity index 100% rename from Jolt/Types/ConvexShape.cs rename to Jolt~/Types/ConvexShape.cs diff --git a/Jolt/Types/ConvexShape.cs.meta b/Jolt~/Types/ConvexShape.cs.meta similarity index 100% rename from Jolt/Types/ConvexShape.cs.meta rename to Jolt~/Types/ConvexShape.cs.meta diff --git a/Jolt/Types/CylinderShape.cs b/Jolt~/Types/CylinderShape.cs similarity index 100% rename from Jolt/Types/CylinderShape.cs rename to Jolt~/Types/CylinderShape.cs diff --git a/Jolt/Types/CylinderShape.cs.meta b/Jolt~/Types/CylinderShape.cs.meta similarity index 100% rename from Jolt/Types/CylinderShape.cs.meta rename to Jolt~/Types/CylinderShape.cs.meta diff --git a/Jolt/Types/CylinderShapeSettings.cs b/Jolt~/Types/CylinderShapeSettings.cs similarity index 100% rename from Jolt/Types/CylinderShapeSettings.cs rename to Jolt~/Types/CylinderShapeSettings.cs diff --git a/Jolt/Types/CylinderShapeSettings.cs.meta b/Jolt~/Types/CylinderShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/CylinderShapeSettings.cs.meta rename to Jolt~/Types/CylinderShapeSettings.cs.meta diff --git a/Jolt/Types/DistanceConstraint.cs b/Jolt~/Types/DistanceConstraint.cs similarity index 100% rename from Jolt/Types/DistanceConstraint.cs rename to Jolt~/Types/DistanceConstraint.cs diff --git a/Jolt/Types/DistanceConstraint.cs.meta b/Jolt~/Types/DistanceConstraint.cs.meta similarity index 100% rename from Jolt/Types/DistanceConstraint.cs.meta rename to Jolt~/Types/DistanceConstraint.cs.meta diff --git a/Jolt/Types/DistanceConstraintSettings.cs b/Jolt~/Types/DistanceConstraintSettings.cs similarity index 100% rename from Jolt/Types/DistanceConstraintSettings.cs rename to Jolt~/Types/DistanceConstraintSettings.cs diff --git a/Jolt/Types/DistanceConstraintSettings.cs.meta b/Jolt~/Types/DistanceConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/DistanceConstraintSettings.cs.meta rename to Jolt~/Types/DistanceConstraintSettings.cs.meta diff --git a/Jolt/Types/FixedConstraint.cs b/Jolt~/Types/FixedConstraint.cs similarity index 100% rename from Jolt/Types/FixedConstraint.cs rename to Jolt~/Types/FixedConstraint.cs diff --git a/Jolt/Types/FixedConstraint.cs.meta b/Jolt~/Types/FixedConstraint.cs.meta similarity index 100% rename from Jolt/Types/FixedConstraint.cs.meta rename to Jolt~/Types/FixedConstraint.cs.meta diff --git a/Jolt/Types/FixedConstraintSettings.cs b/Jolt~/Types/FixedConstraintSettings.cs similarity index 100% rename from Jolt/Types/FixedConstraintSettings.cs rename to Jolt~/Types/FixedConstraintSettings.cs diff --git a/Jolt/Types/FixedConstraintSettings.cs.meta b/Jolt~/Types/FixedConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/FixedConstraintSettings.cs.meta rename to Jolt~/Types/FixedConstraintSettings.cs.meta diff --git a/Jolt/Types/GearConstraintSettings.cs b/Jolt~/Types/GearConstraintSettings.cs similarity index 100% rename from Jolt/Types/GearConstraintSettings.cs rename to Jolt~/Types/GearConstraintSettings.cs diff --git a/Jolt/Types/GearConstraintSettings.cs.meta b/Jolt~/Types/GearConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/GearConstraintSettings.cs.meta rename to Jolt~/Types/GearConstraintSettings.cs.meta diff --git a/Jolt/Types/GroundState.cs b/Jolt~/Types/GroundState.cs similarity index 100% rename from Jolt/Types/GroundState.cs rename to Jolt~/Types/GroundState.cs diff --git a/Jolt/Types/GroundState.cs.meta b/Jolt~/Types/GroundState.cs.meta similarity index 100% rename from Jolt/Types/GroundState.cs.meta rename to Jolt~/Types/GroundState.cs.meta diff --git a/Jolt/Types/HingeConstraint.cs b/Jolt~/Types/HingeConstraint.cs similarity index 100% rename from Jolt/Types/HingeConstraint.cs rename to Jolt~/Types/HingeConstraint.cs diff --git a/Jolt/Types/HingeConstraint.cs.meta b/Jolt~/Types/HingeConstraint.cs.meta similarity index 100% rename from Jolt/Types/HingeConstraint.cs.meta rename to Jolt~/Types/HingeConstraint.cs.meta diff --git a/Jolt/Types/HingeConstraintSettings.cs b/Jolt~/Types/HingeConstraintSettings.cs similarity index 100% rename from Jolt/Types/HingeConstraintSettings.cs rename to Jolt~/Types/HingeConstraintSettings.cs diff --git a/Jolt/Types/HingeConstraintSettings.cs.meta b/Jolt~/Types/HingeConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/HingeConstraintSettings.cs.meta rename to Jolt~/Types/HingeConstraintSettings.cs.meta diff --git a/Jolt/Types/IBodyActivationListener.cs b/Jolt~/Types/IBodyActivationListener.cs similarity index 100% rename from Jolt/Types/IBodyActivationListener.cs rename to Jolt~/Types/IBodyActivationListener.cs diff --git a/Jolt/Types/IBodyActivationListener.cs.meta b/Jolt~/Types/IBodyActivationListener.cs.meta similarity index 100% rename from Jolt/Types/IBodyActivationListener.cs.meta rename to Jolt~/Types/IBodyActivationListener.cs.meta diff --git a/Jolt/Types/IContactListeners.cs b/Jolt~/Types/IContactListeners.cs similarity index 100% rename from Jolt/Types/IContactListeners.cs rename to Jolt~/Types/IContactListeners.cs diff --git a/Jolt/Types/IContactListeners.cs.meta b/Jolt~/Types/IContactListeners.cs.meta similarity index 100% rename from Jolt/Types/IContactListeners.cs.meta rename to Jolt~/Types/IContactListeners.cs.meta diff --git a/Jolt/Types/IndexedTriangle.cs b/Jolt~/Types/IndexedTriangle.cs similarity index 100% rename from Jolt/Types/IndexedTriangle.cs rename to Jolt~/Types/IndexedTriangle.cs diff --git a/Jolt/Types/IndexedTriangle.cs.meta b/Jolt~/Types/IndexedTriangle.cs.meta similarity index 100% rename from Jolt/Types/IndexedTriangle.cs.meta rename to Jolt~/Types/IndexedTriangle.cs.meta diff --git a/Jolt/Types/IndexedTriangleNoMaterial.cs b/Jolt~/Types/IndexedTriangleNoMaterial.cs similarity index 100% rename from Jolt/Types/IndexedTriangleNoMaterial.cs rename to Jolt~/Types/IndexedTriangleNoMaterial.cs diff --git a/Jolt/Types/IndexedTriangleNoMaterial.cs.meta b/Jolt~/Types/IndexedTriangleNoMaterial.cs.meta similarity index 100% rename from Jolt/Types/IndexedTriangleNoMaterial.cs.meta rename to Jolt~/Types/IndexedTriangleNoMaterial.cs.meta diff --git a/Jolt/Types/JobSystem.cs b/Jolt~/Types/JobSystem.cs similarity index 100% rename from Jolt/Types/JobSystem.cs rename to Jolt~/Types/JobSystem.cs diff --git a/Jolt/Types/JobSystem.cs.meta b/Jolt~/Types/JobSystem.cs.meta similarity index 100% rename from Jolt/Types/JobSystem.cs.meta rename to Jolt~/Types/JobSystem.cs.meta diff --git a/Jolt/Types/JobSystemConfig.cs b/Jolt~/Types/JobSystemConfig.cs similarity index 100% rename from Jolt/Types/JobSystemConfig.cs rename to Jolt~/Types/JobSystemConfig.cs diff --git a/Jolt/Types/JobSystemConfig.cs.meta b/Jolt~/Types/JobSystemConfig.cs.meta similarity index 100% rename from Jolt/Types/JobSystemConfig.cs.meta rename to Jolt~/Types/JobSystemConfig.cs.meta diff --git a/Jolt/Types/MassProperties.cs b/Jolt~/Types/MassProperties.cs similarity index 100% rename from Jolt/Types/MassProperties.cs rename to Jolt~/Types/MassProperties.cs diff --git a/Jolt/Types/MassProperties.cs.meta b/Jolt~/Types/MassProperties.cs.meta similarity index 100% rename from Jolt/Types/MassProperties.cs.meta rename to Jolt~/Types/MassProperties.cs.meta diff --git a/Jolt/Types/MeshShape.cs b/Jolt~/Types/MeshShape.cs similarity index 100% rename from Jolt/Types/MeshShape.cs rename to Jolt~/Types/MeshShape.cs diff --git a/Jolt/Types/MeshShape.cs.meta b/Jolt~/Types/MeshShape.cs.meta similarity index 100% rename from Jolt/Types/MeshShape.cs.meta rename to Jolt~/Types/MeshShape.cs.meta diff --git a/Jolt/Types/MeshShapeSettings.cs b/Jolt~/Types/MeshShapeSettings.cs similarity index 100% rename from Jolt/Types/MeshShapeSettings.cs rename to Jolt~/Types/MeshShapeSettings.cs diff --git a/Jolt/Types/MeshShapeSettings.cs.meta b/Jolt~/Types/MeshShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/MeshShapeSettings.cs.meta rename to Jolt~/Types/MeshShapeSettings.cs.meta diff --git a/Jolt/Types/MotionProperties.cs b/Jolt~/Types/MotionProperties.cs similarity index 100% rename from Jolt/Types/MotionProperties.cs rename to Jolt~/Types/MotionProperties.cs diff --git a/Jolt/Types/MotionProperties.cs.meta b/Jolt~/Types/MotionProperties.cs.meta similarity index 100% rename from Jolt/Types/MotionProperties.cs.meta rename to Jolt~/Types/MotionProperties.cs.meta diff --git a/Jolt/Types/MotionQuality.cs b/Jolt~/Types/MotionQuality.cs similarity index 100% rename from Jolt/Types/MotionQuality.cs rename to Jolt~/Types/MotionQuality.cs diff --git a/Jolt/Types/MotionQuality.cs.meta b/Jolt~/Types/MotionQuality.cs.meta similarity index 100% rename from Jolt/Types/MotionQuality.cs.meta rename to Jolt~/Types/MotionQuality.cs.meta diff --git a/Jolt/Types/MotionType.cs b/Jolt~/Types/MotionType.cs similarity index 100% rename from Jolt/Types/MotionType.cs rename to Jolt~/Types/MotionType.cs diff --git a/Jolt/Types/MotionType.cs.meta b/Jolt~/Types/MotionType.cs.meta similarity index 100% rename from Jolt/Types/MotionType.cs.meta rename to Jolt~/Types/MotionType.cs.meta diff --git a/Jolt/Types/MotorSettings.cs b/Jolt~/Types/MotorSettings.cs similarity index 100% rename from Jolt/Types/MotorSettings.cs rename to Jolt~/Types/MotorSettings.cs diff --git a/Jolt/Types/MotorSettings.cs.meta b/Jolt~/Types/MotorSettings.cs.meta similarity index 100% rename from Jolt/Types/MotorSettings.cs.meta rename to Jolt~/Types/MotorSettings.cs.meta diff --git a/Jolt/Types/MutableCompoundShapeSettings.cs b/Jolt~/Types/MutableCompoundShapeSettings.cs similarity index 100% rename from Jolt/Types/MutableCompoundShapeSettings.cs rename to Jolt~/Types/MutableCompoundShapeSettings.cs diff --git a/Jolt/Types/MutableCompoundShapeSettings.cs.meta b/Jolt~/Types/MutableCompoundShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/MutableCompoundShapeSettings.cs.meta rename to Jolt~/Types/MutableCompoundShapeSettings.cs.meta diff --git a/Jolt/Types/NarrowPhaseQuery.cs b/Jolt~/Types/NarrowPhaseQuery.cs similarity index 100% rename from Jolt/Types/NarrowPhaseQuery.cs rename to Jolt~/Types/NarrowPhaseQuery.cs diff --git a/Jolt/Types/NarrowPhaseQuery.cs.meta b/Jolt~/Types/NarrowPhaseQuery.cs.meta similarity index 100% rename from Jolt/Types/NarrowPhaseQuery.cs.meta rename to Jolt~/Types/NarrowPhaseQuery.cs.meta diff --git a/Jolt/Types/ObjectLayer.cs b/Jolt~/Types/ObjectLayer.cs similarity index 100% rename from Jolt/Types/ObjectLayer.cs rename to Jolt~/Types/ObjectLayer.cs diff --git a/Jolt/Types/ObjectLayer.cs.meta b/Jolt~/Types/ObjectLayer.cs.meta similarity index 100% rename from Jolt/Types/ObjectLayer.cs.meta rename to Jolt~/Types/ObjectLayer.cs.meta diff --git a/Jolt/Types/ObjectLayerFilter.cs b/Jolt~/Types/ObjectLayerFilter.cs similarity index 100% rename from Jolt/Types/ObjectLayerFilter.cs rename to Jolt~/Types/ObjectLayerFilter.cs diff --git a/Jolt/Types/ObjectLayerFilter.cs.meta b/Jolt~/Types/ObjectLayerFilter.cs.meta similarity index 100% rename from Jolt/Types/ObjectLayerFilter.cs.meta rename to Jolt~/Types/ObjectLayerFilter.cs.meta diff --git a/Jolt/Types/ObjectLayerPairFilter.cs b/Jolt~/Types/ObjectLayerPairFilter.cs similarity index 100% rename from Jolt/Types/ObjectLayerPairFilter.cs rename to Jolt~/Types/ObjectLayerPairFilter.cs diff --git a/Jolt/Types/ObjectLayerPairFilter.cs.meta b/Jolt~/Types/ObjectLayerPairFilter.cs.meta similarity index 100% rename from Jolt/Types/ObjectLayerPairFilter.cs.meta rename to Jolt~/Types/ObjectLayerPairFilter.cs.meta diff --git a/Jolt/Types/ObjectLayerPairFilterMask.cs b/Jolt~/Types/ObjectLayerPairFilterMask.cs similarity index 100% rename from Jolt/Types/ObjectLayerPairFilterMask.cs rename to Jolt~/Types/ObjectLayerPairFilterMask.cs diff --git a/Jolt/Types/ObjectLayerPairFilterMask.cs.meta b/Jolt~/Types/ObjectLayerPairFilterMask.cs.meta similarity index 100% rename from Jolt/Types/ObjectLayerPairFilterMask.cs.meta rename to Jolt~/Types/ObjectLayerPairFilterMask.cs.meta diff --git a/Jolt/Types/ObjectLayerPairFilterTable.cs b/Jolt~/Types/ObjectLayerPairFilterTable.cs similarity index 100% rename from Jolt/Types/ObjectLayerPairFilterTable.cs rename to Jolt~/Types/ObjectLayerPairFilterTable.cs diff --git a/Jolt/Types/ObjectLayerPairFilterTable.cs.meta b/Jolt~/Types/ObjectLayerPairFilterTable.cs.meta similarity index 100% rename from Jolt/Types/ObjectLayerPairFilterTable.cs.meta rename to Jolt~/Types/ObjectLayerPairFilterTable.cs.meta diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilter.cs b/Jolt~/Types/ObjectVsBroadPhaseLayerFilter.cs similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilter.cs rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilter.cs diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilter.cs.meta b/Jolt~/Types/ObjectVsBroadPhaseLayerFilter.cs.meta similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilter.cs.meta rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilter.cs.meta diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilterMask.cs b/Jolt~/Types/ObjectVsBroadPhaseLayerFilterMask.cs similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilterMask.cs rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilterMask.cs diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilterMask.cs.meta b/Jolt~/Types/ObjectVsBroadPhaseLayerFilterMask.cs.meta similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilterMask.cs.meta rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilterMask.cs.meta diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilterTable.cs b/Jolt~/Types/ObjectVsBroadPhaseLayerFilterTable.cs similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilterTable.cs rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilterTable.cs diff --git a/Jolt/Types/ObjectVsBroadPhaseLayerFilterTable.cs.meta b/Jolt~/Types/ObjectVsBroadPhaseLayerFilterTable.cs.meta similarity index 100% rename from Jolt/Types/ObjectVsBroadPhaseLayerFilterTable.cs.meta rename to Jolt~/Types/ObjectVsBroadPhaseLayerFilterTable.cs.meta diff --git a/Jolt/Types/OverrideMassProperties.cs b/Jolt~/Types/OverrideMassProperties.cs similarity index 100% rename from Jolt/Types/OverrideMassProperties.cs rename to Jolt~/Types/OverrideMassProperties.cs diff --git a/Jolt/Types/OverrideMassProperties.cs.meta b/Jolt~/Types/OverrideMassProperties.cs.meta similarity index 100% rename from Jolt/Types/OverrideMassProperties.cs.meta rename to Jolt~/Types/OverrideMassProperties.cs.meta diff --git a/Jolt/Types/PhysicsMaterial.cs b/Jolt~/Types/PhysicsMaterial.cs similarity index 100% rename from Jolt/Types/PhysicsMaterial.cs rename to Jolt~/Types/PhysicsMaterial.cs diff --git a/Jolt/Types/PhysicsMaterial.cs.meta b/Jolt~/Types/PhysicsMaterial.cs.meta similarity index 100% rename from Jolt/Types/PhysicsMaterial.cs.meta rename to Jolt~/Types/PhysicsMaterial.cs.meta diff --git a/Jolt/Types/PhysicsSettings.cs b/Jolt~/Types/PhysicsSettings.cs similarity index 100% rename from Jolt/Types/PhysicsSettings.cs rename to Jolt~/Types/PhysicsSettings.cs diff --git a/Jolt/Types/PhysicsSettings.cs.meta b/Jolt~/Types/PhysicsSettings.cs.meta similarity index 100% rename from Jolt/Types/PhysicsSettings.cs.meta rename to Jolt~/Types/PhysicsSettings.cs.meta diff --git a/Jolt/Types/PhysicsSystem.cs b/Jolt~/Types/PhysicsSystem.cs similarity index 100% rename from Jolt/Types/PhysicsSystem.cs rename to Jolt~/Types/PhysicsSystem.cs diff --git a/Jolt/Types/PhysicsSystem.cs.meta b/Jolt~/Types/PhysicsSystem.cs.meta similarity index 100% rename from Jolt/Types/PhysicsSystem.cs.meta rename to Jolt~/Types/PhysicsSystem.cs.meta diff --git a/Jolt/Types/PhysicsSystemSettings.cs b/Jolt~/Types/PhysicsSystemSettings.cs similarity index 100% rename from Jolt/Types/PhysicsSystemSettings.cs rename to Jolt~/Types/PhysicsSystemSettings.cs diff --git a/Jolt/Types/PhysicsSystemSettings.cs.meta b/Jolt~/Types/PhysicsSystemSettings.cs.meta similarity index 100% rename from Jolt/Types/PhysicsSystemSettings.cs.meta rename to Jolt~/Types/PhysicsSystemSettings.cs.meta diff --git a/Jolt/Types/PhysicsUpdateError.cs b/Jolt~/Types/PhysicsUpdateError.cs similarity index 100% rename from Jolt/Types/PhysicsUpdateError.cs rename to Jolt~/Types/PhysicsUpdateError.cs diff --git a/Jolt/Types/PhysicsUpdateError.cs.meta b/Jolt~/Types/PhysicsUpdateError.cs.meta similarity index 100% rename from Jolt/Types/PhysicsUpdateError.cs.meta rename to Jolt~/Types/PhysicsUpdateError.cs.meta diff --git a/Jolt/Types/Plane.cs b/Jolt~/Types/Plane.cs similarity index 100% rename from Jolt/Types/Plane.cs rename to Jolt~/Types/Plane.cs diff --git a/Jolt/Types/Plane.cs.meta b/Jolt~/Types/Plane.cs.meta similarity index 100% rename from Jolt/Types/Plane.cs.meta rename to Jolt~/Types/Plane.cs.meta diff --git a/Jolt/Types/PlaneShape.cs b/Jolt~/Types/PlaneShape.cs similarity index 100% rename from Jolt/Types/PlaneShape.cs rename to Jolt~/Types/PlaneShape.cs diff --git a/Jolt/Types/PlaneShape.cs.meta b/Jolt~/Types/PlaneShape.cs.meta similarity index 100% rename from Jolt/Types/PlaneShape.cs.meta rename to Jolt~/Types/PlaneShape.cs.meta diff --git a/Jolt/Types/PlaneShapeSettings.cs b/Jolt~/Types/PlaneShapeSettings.cs similarity index 100% rename from Jolt/Types/PlaneShapeSettings.cs rename to Jolt~/Types/PlaneShapeSettings.cs diff --git a/Jolt/Types/PlaneShapeSettings.cs.meta b/Jolt~/Types/PlaneShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/PlaneShapeSettings.cs.meta rename to Jolt~/Types/PlaneShapeSettings.cs.meta diff --git a/Jolt/Types/PointConstraint.cs b/Jolt~/Types/PointConstraint.cs similarity index 100% rename from Jolt/Types/PointConstraint.cs rename to Jolt~/Types/PointConstraint.cs diff --git a/Jolt/Types/PointConstraint.cs.meta b/Jolt~/Types/PointConstraint.cs.meta similarity index 100% rename from Jolt/Types/PointConstraint.cs.meta rename to Jolt~/Types/PointConstraint.cs.meta diff --git a/Jolt/Types/PointConstraintSettings.cs b/Jolt~/Types/PointConstraintSettings.cs similarity index 100% rename from Jolt/Types/PointConstraintSettings.cs rename to Jolt~/Types/PointConstraintSettings.cs diff --git a/Jolt/Types/PointConstraintSettings.cs.meta b/Jolt~/Types/PointConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/PointConstraintSettings.cs.meta rename to Jolt~/Types/PointConstraintSettings.cs.meta diff --git a/Jolt/Types/RayCastResult.cs b/Jolt~/Types/RayCastResult.cs similarity index 100% rename from Jolt/Types/RayCastResult.cs rename to Jolt~/Types/RayCastResult.cs diff --git a/Jolt/Types/RayCastResult.cs.meta b/Jolt~/Types/RayCastResult.cs.meta similarity index 100% rename from Jolt/Types/RayCastResult.cs.meta rename to Jolt~/Types/RayCastResult.cs.meta diff --git a/Jolt/Types/RayCastSettings.cs b/Jolt~/Types/RayCastSettings.cs similarity index 100% rename from Jolt/Types/RayCastSettings.cs rename to Jolt~/Types/RayCastSettings.cs diff --git a/Jolt/Types/RayCastSettings.cs.meta b/Jolt~/Types/RayCastSettings.cs.meta similarity index 100% rename from Jolt/Types/RayCastSettings.cs.meta rename to Jolt~/Types/RayCastSettings.cs.meta diff --git a/Jolt/Types/Shape.cs b/Jolt~/Types/Shape.cs similarity index 100% rename from Jolt/Types/Shape.cs rename to Jolt~/Types/Shape.cs diff --git a/Jolt/Types/Shape.cs.meta b/Jolt~/Types/Shape.cs.meta similarity index 100% rename from Jolt/Types/Shape.cs.meta rename to Jolt~/Types/Shape.cs.meta diff --git a/Jolt/Types/ShapeCastResult.cs b/Jolt~/Types/ShapeCastResult.cs similarity index 100% rename from Jolt/Types/ShapeCastResult.cs rename to Jolt~/Types/ShapeCastResult.cs diff --git a/Jolt/Types/ShapeCastResult.cs.meta b/Jolt~/Types/ShapeCastResult.cs.meta similarity index 100% rename from Jolt/Types/ShapeCastResult.cs.meta rename to Jolt~/Types/ShapeCastResult.cs.meta diff --git a/Jolt/Types/ShapeCastSettings.cs b/Jolt~/Types/ShapeCastSettings.cs similarity index 100% rename from Jolt/Types/ShapeCastSettings.cs rename to Jolt~/Types/ShapeCastSettings.cs diff --git a/Jolt/Types/ShapeCastSettings.cs.meta b/Jolt~/Types/ShapeCastSettings.cs.meta similarity index 100% rename from Jolt/Types/ShapeCastSettings.cs.meta rename to Jolt~/Types/ShapeCastSettings.cs.meta diff --git a/Jolt/Types/ShapeColor.cs b/Jolt~/Types/ShapeColor.cs similarity index 100% rename from Jolt/Types/ShapeColor.cs rename to Jolt~/Types/ShapeColor.cs diff --git a/Jolt/Types/ShapeColor.cs.meta b/Jolt~/Types/ShapeColor.cs.meta similarity index 100% rename from Jolt/Types/ShapeColor.cs.meta rename to Jolt~/Types/ShapeColor.cs.meta diff --git a/Jolt/Types/ShapeFilter.cs b/Jolt~/Types/ShapeFilter.cs similarity index 100% rename from Jolt/Types/ShapeFilter.cs rename to Jolt~/Types/ShapeFilter.cs diff --git a/Jolt/Types/ShapeFilter.cs.meta b/Jolt~/Types/ShapeFilter.cs.meta similarity index 100% rename from Jolt/Types/ShapeFilter.cs.meta rename to Jolt~/Types/ShapeFilter.cs.meta diff --git a/Jolt/Types/ShapeSettings.cs b/Jolt~/Types/ShapeSettings.cs similarity index 100% rename from Jolt/Types/ShapeSettings.cs rename to Jolt~/Types/ShapeSettings.cs diff --git a/Jolt/Types/ShapeSettings.cs.meta b/Jolt~/Types/ShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/ShapeSettings.cs.meta rename to Jolt~/Types/ShapeSettings.cs.meta diff --git a/Jolt/Types/ShapeSubType.cs b/Jolt~/Types/ShapeSubType.cs similarity index 100% rename from Jolt/Types/ShapeSubType.cs rename to Jolt~/Types/ShapeSubType.cs diff --git a/Jolt/Types/ShapeSubType.cs.meta b/Jolt~/Types/ShapeSubType.cs.meta similarity index 100% rename from Jolt/Types/ShapeSubType.cs.meta rename to Jolt~/Types/ShapeSubType.cs.meta diff --git a/Jolt/Types/ShapeType.cs b/Jolt~/Types/ShapeType.cs similarity index 100% rename from Jolt/Types/ShapeType.cs rename to Jolt~/Types/ShapeType.cs diff --git a/Jolt/Types/ShapeType.cs.meta b/Jolt~/Types/ShapeType.cs.meta similarity index 100% rename from Jolt/Types/ShapeType.cs.meta rename to Jolt~/Types/ShapeType.cs.meta diff --git a/Jolt/Types/SixDOFConstraint.cs b/Jolt~/Types/SixDOFConstraint.cs similarity index 100% rename from Jolt/Types/SixDOFConstraint.cs rename to Jolt~/Types/SixDOFConstraint.cs diff --git a/Jolt/Types/SixDOFConstraint.cs.meta b/Jolt~/Types/SixDOFConstraint.cs.meta similarity index 100% rename from Jolt/Types/SixDOFConstraint.cs.meta rename to Jolt~/Types/SixDOFConstraint.cs.meta diff --git a/Jolt/Types/SixDOFConstraintAxis.cs b/Jolt~/Types/SixDOFConstraintAxis.cs similarity index 100% rename from Jolt/Types/SixDOFConstraintAxis.cs rename to Jolt~/Types/SixDOFConstraintAxis.cs diff --git a/Jolt/Types/SixDOFConstraintAxis.cs.meta b/Jolt~/Types/SixDOFConstraintAxis.cs.meta similarity index 100% rename from Jolt/Types/SixDOFConstraintAxis.cs.meta rename to Jolt~/Types/SixDOFConstraintAxis.cs.meta diff --git a/Jolt/Types/SixDOFConstraintSettings.cs b/Jolt~/Types/SixDOFConstraintSettings.cs similarity index 100% rename from Jolt/Types/SixDOFConstraintSettings.cs rename to Jolt~/Types/SixDOFConstraintSettings.cs diff --git a/Jolt/Types/SixDOFConstraintSettings.cs.meta b/Jolt~/Types/SixDOFConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/SixDOFConstraintSettings.cs.meta rename to Jolt~/Types/SixDOFConstraintSettings.cs.meta diff --git a/Jolt/Types/SliderConstraint.cs b/Jolt~/Types/SliderConstraint.cs similarity index 100% rename from Jolt/Types/SliderConstraint.cs rename to Jolt~/Types/SliderConstraint.cs diff --git a/Jolt/Types/SliderConstraint.cs.meta b/Jolt~/Types/SliderConstraint.cs.meta similarity index 100% rename from Jolt/Types/SliderConstraint.cs.meta rename to Jolt~/Types/SliderConstraint.cs.meta diff --git a/Jolt/Types/SliderConstraintSettings.cs b/Jolt~/Types/SliderConstraintSettings.cs similarity index 100% rename from Jolt/Types/SliderConstraintSettings.cs rename to Jolt~/Types/SliderConstraintSettings.cs diff --git a/Jolt/Types/SliderConstraintSettings.cs.meta b/Jolt~/Types/SliderConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/SliderConstraintSettings.cs.meta rename to Jolt~/Types/SliderConstraintSettings.cs.meta diff --git a/Jolt/Types/SoftBodyConstraintColor.cs b/Jolt~/Types/SoftBodyConstraintColor.cs similarity index 100% rename from Jolt/Types/SoftBodyConstraintColor.cs rename to Jolt~/Types/SoftBodyConstraintColor.cs diff --git a/Jolt/Types/SoftBodyConstraintColor.cs.meta b/Jolt~/Types/SoftBodyConstraintColor.cs.meta similarity index 100% rename from Jolt/Types/SoftBodyConstraintColor.cs.meta rename to Jolt~/Types/SoftBodyConstraintColor.cs.meta diff --git a/Jolt/Types/SoftBodyCreationSettings.cs b/Jolt~/Types/SoftBodyCreationSettings.cs similarity index 100% rename from Jolt/Types/SoftBodyCreationSettings.cs rename to Jolt~/Types/SoftBodyCreationSettings.cs diff --git a/Jolt/Types/SoftBodyCreationSettings.cs.meta b/Jolt~/Types/SoftBodyCreationSettings.cs.meta similarity index 100% rename from Jolt/Types/SoftBodyCreationSettings.cs.meta rename to Jolt~/Types/SoftBodyCreationSettings.cs.meta diff --git a/Jolt/Types/SphereShape.cs b/Jolt~/Types/SphereShape.cs similarity index 100% rename from Jolt/Types/SphereShape.cs rename to Jolt~/Types/SphereShape.cs diff --git a/Jolt/Types/SphereShape.cs.meta b/Jolt~/Types/SphereShape.cs.meta similarity index 100% rename from Jolt/Types/SphereShape.cs.meta rename to Jolt~/Types/SphereShape.cs.meta diff --git a/Jolt/Types/SphereShapeSettings.cs b/Jolt~/Types/SphereShapeSettings.cs similarity index 100% rename from Jolt/Types/SphereShapeSettings.cs rename to Jolt~/Types/SphereShapeSettings.cs diff --git a/Jolt/Types/SphereShapeSettings.cs.meta b/Jolt~/Types/SphereShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/SphereShapeSettings.cs.meta rename to Jolt~/Types/SphereShapeSettings.cs.meta diff --git a/Jolt/Types/SpringMode.cs b/Jolt~/Types/SpringMode.cs similarity index 100% rename from Jolt/Types/SpringMode.cs rename to Jolt~/Types/SpringMode.cs diff --git a/Jolt/Types/SpringMode.cs.meta b/Jolt~/Types/SpringMode.cs.meta similarity index 100% rename from Jolt/Types/SpringMode.cs.meta rename to Jolt~/Types/SpringMode.cs.meta diff --git a/Jolt/Types/SpringSettings.cs b/Jolt~/Types/SpringSettings.cs similarity index 100% rename from Jolt/Types/SpringSettings.cs rename to Jolt~/Types/SpringSettings.cs diff --git a/Jolt/Types/SpringSettings.cs.meta b/Jolt~/Types/SpringSettings.cs.meta similarity index 100% rename from Jolt/Types/SpringSettings.cs.meta rename to Jolt~/Types/SpringSettings.cs.meta diff --git a/Jolt/Types/StaticCompoundShapeSettings.cs b/Jolt~/Types/StaticCompoundShapeSettings.cs similarity index 100% rename from Jolt/Types/StaticCompoundShapeSettings.cs rename to Jolt~/Types/StaticCompoundShapeSettings.cs diff --git a/Jolt/Types/StaticCompoundShapeSettings.cs.meta b/Jolt~/Types/StaticCompoundShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/StaticCompoundShapeSettings.cs.meta rename to Jolt~/Types/StaticCompoundShapeSettings.cs.meta diff --git a/Jolt/Types/SubShapeID.cs b/Jolt~/Types/SubShapeID.cs similarity index 100% rename from Jolt/Types/SubShapeID.cs rename to Jolt~/Types/SubShapeID.cs diff --git a/Jolt/Types/SubShapeID.cs.meta b/Jolt~/Types/SubShapeID.cs.meta similarity index 100% rename from Jolt/Types/SubShapeID.cs.meta rename to Jolt~/Types/SubShapeID.cs.meta diff --git a/Jolt/Types/SubShapeIDPair.cs b/Jolt~/Types/SubShapeIDPair.cs similarity index 100% rename from Jolt/Types/SubShapeIDPair.cs rename to Jolt~/Types/SubShapeIDPair.cs diff --git a/Jolt/Types/SubShapeIDPair.cs.meta b/Jolt~/Types/SubShapeIDPair.cs.meta similarity index 100% rename from Jolt/Types/SubShapeIDPair.cs.meta rename to Jolt~/Types/SubShapeIDPair.cs.meta diff --git a/Jolt/Types/SwingTwistConstraint.cs b/Jolt~/Types/SwingTwistConstraint.cs similarity index 100% rename from Jolt/Types/SwingTwistConstraint.cs rename to Jolt~/Types/SwingTwistConstraint.cs diff --git a/Jolt/Types/SwingTwistConstraint.cs.meta b/Jolt~/Types/SwingTwistConstraint.cs.meta similarity index 100% rename from Jolt/Types/SwingTwistConstraint.cs.meta rename to Jolt~/Types/SwingTwistConstraint.cs.meta diff --git a/Jolt/Types/SwingTwistConstraintSettings.cs b/Jolt~/Types/SwingTwistConstraintSettings.cs similarity index 100% rename from Jolt/Types/SwingTwistConstraintSettings.cs rename to Jolt~/Types/SwingTwistConstraintSettings.cs diff --git a/Jolt/Types/SwingTwistConstraintSettings.cs.meta b/Jolt~/Types/SwingTwistConstraintSettings.cs.meta similarity index 100% rename from Jolt/Types/SwingTwistConstraintSettings.cs.meta rename to Jolt~/Types/SwingTwistConstraintSettings.cs.meta diff --git a/Jolt/Types/SwingType.cs b/Jolt~/Types/SwingType.cs similarity index 100% rename from Jolt/Types/SwingType.cs rename to Jolt~/Types/SwingType.cs diff --git a/Jolt/Types/SwingType.cs.meta b/Jolt~/Types/SwingType.cs.meta similarity index 100% rename from Jolt/Types/SwingType.cs.meta rename to Jolt~/Types/SwingType.cs.meta diff --git a/Jolt/Types/TaperedCapsuleShape.cs b/Jolt~/Types/TaperedCapsuleShape.cs similarity index 100% rename from Jolt/Types/TaperedCapsuleShape.cs rename to Jolt~/Types/TaperedCapsuleShape.cs diff --git a/Jolt/Types/TaperedCapsuleShape.cs.meta b/Jolt~/Types/TaperedCapsuleShape.cs.meta similarity index 100% rename from Jolt/Types/TaperedCapsuleShape.cs.meta rename to Jolt~/Types/TaperedCapsuleShape.cs.meta diff --git a/Jolt/Types/TaperedCapsuleShapeSettings.cs b/Jolt~/Types/TaperedCapsuleShapeSettings.cs similarity index 100% rename from Jolt/Types/TaperedCapsuleShapeSettings.cs rename to Jolt~/Types/TaperedCapsuleShapeSettings.cs diff --git a/Jolt/Types/TaperedCapsuleShapeSettings.cs.meta b/Jolt~/Types/TaperedCapsuleShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/TaperedCapsuleShapeSettings.cs.meta rename to Jolt~/Types/TaperedCapsuleShapeSettings.cs.meta diff --git a/Jolt/Types/Triangle.cs b/Jolt~/Types/Triangle.cs similarity index 100% rename from Jolt/Types/Triangle.cs rename to Jolt~/Types/Triangle.cs diff --git a/Jolt/Types/Triangle.cs.meta b/Jolt~/Types/Triangle.cs.meta similarity index 100% rename from Jolt/Types/Triangle.cs.meta rename to Jolt~/Types/Triangle.cs.meta diff --git a/Jolt/Types/TriangleShape.cs b/Jolt~/Types/TriangleShape.cs similarity index 100% rename from Jolt/Types/TriangleShape.cs rename to Jolt~/Types/TriangleShape.cs diff --git a/Jolt/Types/TriangleShape.cs.meta b/Jolt~/Types/TriangleShape.cs.meta similarity index 100% rename from Jolt/Types/TriangleShape.cs.meta rename to Jolt~/Types/TriangleShape.cs.meta diff --git a/Jolt/Types/TriangleShapeSettings.cs b/Jolt~/Types/TriangleShapeSettings.cs similarity index 100% rename from Jolt/Types/TriangleShapeSettings.cs rename to Jolt~/Types/TriangleShapeSettings.cs diff --git a/Jolt/Types/TriangleShapeSettings.cs.meta b/Jolt~/Types/TriangleShapeSettings.cs.meta similarity index 100% rename from Jolt/Types/TriangleShapeSettings.cs.meta rename to Jolt~/Types/TriangleShapeSettings.cs.meta diff --git a/Jolt/Types/ValidateResult.cs b/Jolt~/Types/ValidateResult.cs similarity index 100% rename from Jolt/Types/ValidateResult.cs rename to Jolt~/Types/ValidateResult.cs diff --git a/Jolt/Types/ValidateResult.cs.meta b/Jolt~/Types/ValidateResult.cs.meta similarity index 100% rename from Jolt/Types/ValidateResult.cs.meta rename to Jolt~/Types/ValidateResult.cs.meta diff --git a/package.json b/package.json index eef4a6f..3539901 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "com.seep.jolt", + "name": "mooooooi.jolt-physics", "displayName": "Jolt Physics", "description": "Unity compatible bindings for the Jolt physics library", "version": "0.6.0", From 0d67f69b422ca3cd6c4f864e708fbff0ebf301ed Mon Sep 17 00:00:00 2001 From: mooooooi Date: Wed, 3 Sep 2025 02:17:18 +0800 Subject: [PATCH 04/18] temp --- .../Jolt.SourceGenerator.Tests.csproj | 25 + .../Jolt.SourceGenerator.Tests/UnitTest1.cs | 33 + .../UnsafeBindings.txt | 5491 +++++++++++++++++ .../Jolt.SourceGenerator.Tests/Utility.cs | 74 + .../Jolt.SourceGenerator.sln | 8 +- .../Jolt.SourceGenerator.sln.DotSettings.user | 6 + .../Jolt.SourceGenerator.csproj | 8 +- .../Jolt.SourceGenerator/JoltGenerator.cs | 232 + .../SourceCodeHelper.cs | 0 .../Jolt/Jolt.SourceGenerator.dll | Bin 0 -> 14848 bytes .../Jolt/Jolt.SourceGenerator.pdb | Bin 0 -> 11684 bytes Jolt.SourceGenerator~/JoltGenerator.cs | 141 - Jolt/Jolt.SourceGenerator.dll | Bin 13824 -> 15360 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 11368 -> 11716 bytes 14 files changed, 5875 insertions(+), 143 deletions(-) create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Jolt.SourceGenerator.Tests.csproj create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnitTest1.cs create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnsafeBindings.txt create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Utility.cs create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator.sln.DotSettings.user rename Jolt.SourceGenerator~/{ => Jolt.SourceGenerator}/Jolt.SourceGenerator.csproj (85%) create mode 100644 Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs rename Jolt.SourceGenerator~/{ => Jolt.SourceGenerator}/SourceCodeHelper.cs (100%) create mode 100644 Jolt.SourceGenerator~/Jolt/Jolt.SourceGenerator.dll create mode 100644 Jolt.SourceGenerator~/Jolt/Jolt.SourceGenerator.pdb delete mode 100644 Jolt.SourceGenerator~/JoltGenerator.cs diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Jolt.SourceGenerator.Tests.csproj b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Jolt.SourceGenerator.Tests.csproj new file mode 100644 index 0000000..13ba074 --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Jolt.SourceGenerator.Tests.csproj @@ -0,0 +1,25 @@ + + + + net9.0 + latest + enable + enable + false + + + + + + + + + + + + + + + + + diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnitTest1.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnitTest1.cs new file mode 100644 index 0000000..e6d06d4 --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnitTest1.cs @@ -0,0 +1,33 @@ +using Microsoft.CodeAnalysis; +using Xunit; +using Xunit.Abstractions; + +namespace Jolt.SourceGenerator.Tests; + +public class Tests(ITestOutputHelper outputHelper) +{ + private ITestOutputHelper m_OutputHelper = outputHelper; + [Fact] + public void Test1() + { + (string, IncrementalStepRunReason Unchanged)[] validations = + [ + ("TypeMeta", IncrementalStepRunReason.Unchanged) + ]; + + var (driver, _) = Utility.CreateDriver( + File.ReadAllText("../../../UnsafeBindings.txt"), "Jolt"/*, validations*/); + + // 检查缓存 + var ret = driver.GetRunResult(); + var generateRet = ret.Results.Single(); + + Assert.Null(generateRet.Exception); + + m_OutputHelper.WriteLine("----------------Source----------------"); + foreach (var source in generateRet.GeneratedSources) + { + m_OutputHelper.WriteLine(source.SourceText.ToString()); + } + } +} diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnsafeBindings.txt b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnsafeBindings.txt new file mode 100644 index 0000000..e358e66 --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/UnsafeBindings.txt @@ -0,0 +1,5491 @@ +using System; +using System.Runtime.InteropServices; +using Unity.Mathematics; + +namespace Unity.Mathematics +{ + public struct float3 {} + public struct float4x4 {} +} + +namespace Jolt +{ + public class NativeTypeNameAttribute : Attribute + { + public readonly string Value; + + public NativeTypeNameAttribute(string value) + { + Value = value; + } + } + + public partial struct JPH_BroadPhaseLayerInterface + { + } + + public partial struct JPH_ObjectVsBroadPhaseLayerFilter + { + } + + public partial struct JPH_ObjectLayerPairFilter + { + } + + public partial struct JPH_BroadPhaseLayerFilter + { + } + + public partial struct JPH_ObjectLayerFilter + { + } + + public partial struct JPH_BodyFilter + { + } + + public partial struct JPH_ShapeFilter + { + } + + public partial struct JPH_SimShapeFilter + { + } + + public partial struct JPH_PhysicsStepListener + { + } + + public partial struct JPH_PhysicsSystem + { + } + + public partial struct JPH_PhysicsMaterial + { + } + + public partial struct JPH_ShapeSettings + { + } + + public partial struct JPH_ConvexShapeSettings + { + } + + public partial struct JPH_SphereShapeSettings + { + } + + public partial struct JPH_BoxShapeSettings + { + } + + public partial struct JPH_PlaneShapeSettings + { + } + + public partial struct JPH_TriangleShapeSettings + { + } + + public partial struct JPH_CapsuleShapeSettings + { + } + + public partial struct JPH_TaperedCapsuleShapeSettings + { + } + + public partial struct JPH_CylinderShapeSettings + { + } + + public partial struct JPH_TaperedCylinderShapeSettings + { + } + + public partial struct JPH_ConvexHullShapeSettings + { + } + + public partial struct JPH_CompoundShapeSettings + { + } + + public partial struct JPH_StaticCompoundShapeSettings + { + } + + public partial struct JPH_MutableCompoundShapeSettings + { + } + + public partial struct JPH_MeshShapeSettings + { + } + + public partial struct JPH_HeightFieldShapeSettings + { + } + + public partial struct JPH_RotatedTranslatedShapeSettings + { + } + + public partial struct JPH_ScaledShapeSettings + { + } + + public partial struct JPH_OffsetCenterOfMassShapeSettings + { + } + + public partial struct JPH_EmptyShapeSettings + { + } + + public partial struct JPH_Shape + { + } + + public partial struct JPH_ConvexShape + { + } + + public partial struct JPH_SphereShape + { + } + + public partial struct JPH_BoxShape + { + } + + public partial struct JPH_PlaneShape + { + } + + public partial struct JPH_CapsuleShape + { + } + + public partial struct JPH_CylinderShape + { + } + + public partial struct JPH_TaperedCylinderShape + { + } + + public partial struct JPH_TriangleShape + { + } + + public partial struct JPH_TaperedCapsuleShape + { + } + + public partial struct JPH_ConvexHullShape + { + } + + public partial struct JPH_CompoundShape + { + } + + public partial struct JPH_StaticCompoundShape + { + } + + public partial struct JPH_MutableCompoundShape + { + } + + public partial struct JPH_MeshShape + { + } + + public partial struct JPH_HeightFieldShape + { + } + + public partial struct JPH_DecoratedShape + { + } + + public partial struct JPH_RotatedTranslatedShape + { + } + + public partial struct JPH_ScaledShape + { + } + + public partial struct JPH_OffsetCenterOfMassShape + { + } + + public partial struct JPH_EmptyShape + { + } + + public partial struct JPH_BodyCreationSettings + { + } + + public partial struct JPH_SoftBodyCreationSettings + { + } + + public partial struct JPH_BodyInterface + { + } + + public partial struct JPH_BodyLockInterface + { + } + + public partial struct JPH_BroadPhaseQuery + { + } + + public partial struct JPH_NarrowPhaseQuery + { + } + + public partial struct JPH_MotionProperties + { + } + + public partial struct JPH_Body + { + } + + public partial struct JPH_ContactListener + { + } + + public partial struct JPH_ContactManifold + { + } + + public partial struct JPH_ContactSettings + { + } + + public partial struct JPH_GroupFilter + { + } + + public partial struct JPH_GroupFilterTable + { + } + + [NativeTypeName("unsigned int")] + public enum JPH_PhysicsUpdateError : uint + { + None = 0, + ManifoldCacheFull = 1 << 0, + BodyPairCacheFull = 1 << 1, + ContactConstraintsFull = 1 << 2, + _JPH_PhysicsUpdateError_Count, + _JPH_PhysicsUpdateError_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BodyType : uint + { + Rigid = 0, + Soft = 1, + _JPH_BodyType_Count, + _JPH_BodyType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotionType : uint + { + Static = 0, + Kinematic = 1, + Dynamic = 2, + _JPH_MotionType_Count, + _JPH_MotionType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_Activation : uint + { + Activate = 0, + DontActivate = 1, + _JPH_Activation_Count, + _JPH_Activation_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ValidateResult : uint + { + AcceptAllContactsForThisBodyPair = 0, + AcceptContact = 1, + RejectContact = 2, + RejectAllContactsForThisBodyPair = 3, + _JPH_ValidateResult_Count, + _JPH_ValidateResult_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ShapeType : uint + { + Convex = 0, + Compound = 1, + Decorated = 2, + Mesh = 3, + HeightField = 4, + SoftBody = 5, + User1 = 6, + User2 = 7, + User3 = 8, + User4 = 9, + _JPH_ShapeType_Count, + _JPH_ShapeType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ShapeSubType : uint + { + Sphere = 0, + Box = 1, + Triangle = 2, + Capsule = 3, + TaperedCapsule = 4, + Cylinder = 5, + ConvexHull = 6, + StaticCompound = 7, + MutableCompound = 8, + RotatedTranslated = 9, + Scaled = 10, + OffsetCenterOfMass = 11, + Mesh = 12, + HeightField = 13, + SoftBody = 14, + _JPH_ShapeSubType_Count, + _JPH_ShapeSubType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintType : uint + { + Constraint = 0, + TwoBodyConstraint = 1, + _JPH_ConstraintType_Count, + _JPH_ConstraintType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSubType : uint + { + Fixed = 0, + Point = 1, + Hinge = 2, + Slider = 3, + Distance = 4, + Cone = 5, + SwingTwist = 6, + SixDOF = 7, + Path = 8, + Vehicle = 9, + RackAndPinion = 10, + Gear = 11, + Pulley = 12, + User1 = 13, + User2 = 14, + User3 = 15, + User4 = 16, + _JPH_ConstraintSubType_Count, + _JPH_ConstraintSubType_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ConstraintSpace : uint + { + LocalToBodyCOM = 0, + WorldSpace = 1, + _JPH_ConstraintSpace_Count, + _JPH_ConstraintSpace_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotionQuality : uint + { + Discrete = 0, + LinearCast = 1, + _JPH_MotionQuality_Count, + _JPH_MotionQuality_Force32 = 0x7fffffff, + } + + [NativeTypeName("unsigned int")] + public enum JPH_OverrideMassProperties : uint + { + CalculateMassAndInertia, + CalculateInertia, + MassAndInertiaProvided, + _JPH_JPH_OverrideMassProperties_Count, + _JPH_JPH_OverrideMassProperties_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_GroundState : uint + { + OnGround = 0, + OnSteepGround = 1, + NotSupported = 2, + InAir = 3, + _JPH_GroundState_Count, + _JPH_GroundState_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BackFaceMode : uint + { + IgnoreBackFaces, + CollideWithBackFaces, + _JPH_BackFaceMode_Count, + _JPH_BackFaceMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_ActiveEdgeMode : uint + { + CollideOnlyWithActive, + CollideWithAll, + _JPH_ActiveEdgeMode_Count, + _JPH_ActiveEdgeMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_CollectFacesMode : uint + { + CollectFaces, + NoFaces, + _JPH_CollectFacesMode_Count, + _JPH_CollectFacesMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_MotorState : uint + { + Off = 0, + Velocity = 1, + Position = 2, + _JPH_MotorState_Count, + _JPH_MotorState_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_CollisionCollectorType : uint + { + AllHit = 0, + AllHitSorted = 1, + ClosestHit = 2, + AnyHit = 3, + _JPH_CollisionCollectorType_Count, + _JPH_CollisionCollectorType_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SwingType : uint + { + Cone, + Pyramid, + _JPH_SwingType_Count, + _JPH_SwingType_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SpringMode : uint + { + FrequencyAndDamping = 0, + StiffnessAndDamping = 1, + _JPH_SpringMode_Count, + _JPH_SpringMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_SoftBodyConstraintColor : uint + { + ConstraintType, + ConstraintGroup, + ConstraintOrder, + _JPH_SoftBodyConstraintColor_Count, + _JPH_SoftBodyConstraintColor_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_BodyManager_ShapeColor : uint + { + InstanceColor, + ShapeTypeColor, + MotionTypeColor, + SleepColor, + IslandColor, + MaterialColor, + _JPH_BodyManager_ShapeColor_Count, + _JPH_BodyManager_ShapeColor_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_CastShadow : uint + { + On = 0, + Off = 1, + _JPH_DebugRenderer_CastShadow_Count, + _JPH_DebugRenderer_CastShadow_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_DebugRenderer_DrawMode : uint + { + Solid = 0, + Wireframe = 1, + _JPH_DebugRenderer_DrawMode_Count, + _JPH_DebugRenderer_DrawMode_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_Mesh_Shape_BuildQuality : uint + { + FavorRuntimePerformance = 0, + FavorBuildSpeed = 1, + _JPH_Mesh_Shape_BuildQuality_Count, + _JPH_Mesh_Shape_BuildQuality_Force32 = 0x7FFFFFFF, + } + + [NativeTypeName("unsigned int")] + public enum JPH_TransmissionMode : uint + { + Auto = 0, + Manual = 1, + _JPH_TransmissionMode_Count, + _JPH_TransmissionMode_Force32 = 0x7FFFFFFF, + } + + public partial struct JPH_Plane + { + [NativeTypeName("JPH_Vec3")] + public float3 normal; + + public float distance; + } + + public partial struct JPH_AABox + { + [NativeTypeName("JPH_Vec3")] + public float3 min; + + [NativeTypeName("JPH_Vec3")] + public float3 max; + } + + public partial struct JPH_Triangle + { + [NativeTypeName("JPH_Vec3")] + public float3 v1; + + [NativeTypeName("JPH_Vec3")] + public float3 v2; + + [NativeTypeName("JPH_Vec3")] + public float3 v3; + + [NativeTypeName("uint32_t")] + public uint materialIndex; + } + + public partial struct JPH_IndexedTriangleNoMaterial + { + [NativeTypeName("uint32_t")] + public uint i1; + + [NativeTypeName("uint32_t")] + public uint i2; + + [NativeTypeName("uint32_t")] + public uint i3; + } + + public partial struct JPH_IndexedTriangle + { + [NativeTypeName("uint32_t")] + public uint i1; + + [NativeTypeName("uint32_t")] + public uint i2; + + [NativeTypeName("uint32_t")] + public uint i3; + + [NativeTypeName("uint32_t")] + public uint materialIndex; + + [NativeTypeName("uint32_t")] + public uint userData; + } + + public partial struct JPH_MassProperties + { + public float mass; + + [NativeTypeName("JPH_Matrix4x4")] + public float4x4 inertia; + } + + public partial struct JPH_CollideSettingsBase + { + public JPH_ActiveEdgeMode activeEdgeMode; + + public JPH_CollectFacesMode collectFacesMode; + + public float collisionTolerance; + + public float penetrationTolerance; + + [NativeTypeName("JPH_Vec3")] + public float3 activeEdgeMovementDirection; + } + + public partial struct JPH_CollideShapeSettings + { + public JPH_CollideSettingsBase @base; + + public float maxSeparationDistance; + + public JPH_BackFaceMode backFaceMode; + } + + public partial struct JPH_ShapeCastSettings + { + public JPH_CollideSettingsBase @base; + + public JPH_BackFaceMode backFaceModeTriangles; + + public JPH_BackFaceMode backFaceModeConvex; + + [NativeTypeName("bool")] + public byte useShrunkenShapeAndConvexRadius; + + [NativeTypeName("bool")] + public byte returnDeepestPoint; + } + + public partial struct JPH_RayCastSettings + { + public JPH_BackFaceMode backFaceModeTriangles; + + public JPH_BackFaceMode backFaceModeConvex; + + [NativeTypeName("bool")] + public byte treatConvexAsSolid; + } + + public partial struct JPH_SpringSettings + { + public JPH_SpringMode mode; + + public float frequencyOrStiffness; + + public float damping; + } + + public partial struct JPH_MotorSettings + { + public JPH_SpringSettings springSettings; + + public float minForceLimit; + + public float maxForceLimit; + + public float minTorqueLimit; + + public float maxTorqueLimit; + } + + public partial struct JPH_SubShapeIDPair + { + [NativeTypeName("JPH_BodyID")] + public uint Body1ID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_BodyID")] + public uint Body2ID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public partial struct JPH_BroadPhaseCastResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + public float fraction; + } + + public partial struct JPH_RayCastResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + public float fraction; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public partial struct JPH_CollidePointResult + { + [NativeTypeName("JPH_BodyID")] + public uint bodyID; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + } + + public unsafe partial struct JPH_CollideShapeResult + { + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; + + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; + + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; + + public float penetrationDepth; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; + + [NativeTypeName("uint32_t")] + public uint shape1FaceCount; + + [NativeTypeName("JPH_Vec3 *")] + public float3* shape1Faces; + + [NativeTypeName("uint32_t")] + public uint shape2FaceCount; + + [NativeTypeName("JPH_Vec3 *")] + public float3* shape2Faces; + } + + public partial struct JPH_ShapeCastResult + { + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn1; + + [NativeTypeName("JPH_Vec3")] + public float3 contactPointOn2; + + [NativeTypeName("JPH_Vec3")] + public float3 penetrationAxis; + + public float penetrationDepth; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID1; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeID2; + + [NativeTypeName("JPH_BodyID")] + public uint bodyID2; + + public float fraction; + + [NativeTypeName("bool")] + public byte isBackFaceHit; + } + + public partial struct JPH_DrawSettings + { + [NativeTypeName("bool")] + public byte drawGetSupportFunction; + + [NativeTypeName("bool")] + public byte drawSupportDirection; + + [NativeTypeName("bool")] + public byte drawGetSupportingFace; + + [NativeTypeName("bool")] + public byte drawShape; + + [NativeTypeName("bool")] + public byte drawShapeWireframe; + + public JPH_BodyManager_ShapeColor drawShapeColor; + + [NativeTypeName("bool")] + public byte drawBoundingBox; + + [NativeTypeName("bool")] + public byte drawCenterOfMassTransform; + + [NativeTypeName("bool")] + public byte drawWorldTransform; + + [NativeTypeName("bool")] + public byte drawVelocity; + + [NativeTypeName("bool")] + public byte drawMassAndInertia; + + [NativeTypeName("bool")] + public byte drawSleepStats; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertices; + + [NativeTypeName("bool")] + public byte drawSoftBodyVertexVelocities; + + [NativeTypeName("bool")] + public byte drawSoftBodyEdgeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyBendConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyVolumeConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodySkinConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyLRAConstraints; + + [NativeTypeName("bool")] + public byte drawSoftBodyPredictedBounds; + + public JPH_SoftBodyConstraintColor drawSoftBodyConstraintColor; + } + + public partial struct JPH_SupportingFace + { + [NativeTypeName("uint32_t")] + public uint count; + + [NativeTypeName("JPH_Vec3[32]")] + public _vertices_e__FixedBuffer vertices; + + public partial struct _vertices_e__FixedBuffer + { + public float3 e0; + public float3 e1; + public float3 e2; + public float3 e3; + public float3 e4; + public float3 e5; + public float3 e6; + public float3 e7; + public float3 e8; + public float3 e9; + public float3 e10; + public float3 e11; + public float3 e12; + public float3 e13; + public float3 e14; + public float3 e15; + public float3 e16; + public float3 e17; + public float3 e18; + public float3 e19; + public float3 e20; + public float3 e21; + public float3 e22; + public float3 e23; + public float3 e24; + public float3 e25; + public float3 e26; + public float3 e27; + public float3 e28; + public float3 e29; + public float3 e30; + public float3 e31; + + public unsafe ref float3 this[int index] + { + get + { + fixed (float3* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + } + + public unsafe partial struct JPH_CollisionGroup + { + [NativeTypeName("const JPH_GroupFilter *")] + public JPH_GroupFilter* groupFilter; + + [NativeTypeName("JPH_CollisionGroupID")] + public uint groupID; + + [NativeTypeName("JPH_CollisionSubGroupID")] + public uint subGroupID; + } + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastRayResultCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_RayCastBodyResultCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeBodyResultCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollidePointResultCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CollideShapeResultCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_CastShapeResultCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastRayCollectorCallback(void* context, [NativeTypeName("const JPH_RayCastResult *")] JPH_RayCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_RayCastBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BroadPhaseCastResult *")] JPH_BroadPhaseCastResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeBodyCollectorCallback(void* context, [NativeTypeName("const JPH_BodyID")] uint result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollidePointCollectorCallback(void* context, [NativeTypeName("const JPH_CollidePointResult *")] JPH_CollidePointResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CollideShapeCollectorCallback(void* context, [NativeTypeName("const JPH_CollideShapeResult *")] JPH_CollideShapeResult* result); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate float JPH_CastShapeCollectorCallback(void* context, [NativeTypeName("const JPH_ShapeCastResult *")] JPH_ShapeCastResult* result); + + public partial struct JPH_CollisionEstimationResultImpulse + { + public float contactImpulse; + + public float frictionImpulse1; + + public float frictionImpulse2; + } + + public unsafe partial struct JPH_CollisionEstimationResult + { + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity1; + + [NativeTypeName("JPH_Vec3")] + public float3 angularVelocity1; + + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity2; + + [NativeTypeName("JPH_Vec3")] + public float3 angularVelocity2; + + [NativeTypeName("JPH_Vec3")] + public float3 tangent1; + + [NativeTypeName("JPH_Vec3")] + public float3 tangent2; + + [NativeTypeName("uint32_t")] + public uint impulseCount; + + public JPH_CollisionEstimationResultImpulse* impulses; + } + + public partial struct JPH_BodyActivationListener + { + } + + public partial struct JPH_BodyDrawFilter + { + } + + public partial struct JPH_SharedMutex + { + } + + public partial struct JPH_DebugRenderer + { + } + + public partial struct JPH_Constraint + { + } + + public partial struct JPH_TwoBodyConstraint + { + } + + public partial struct JPH_FixedConstraint + { + } + + public partial struct JPH_DistanceConstraint + { + } + + public partial struct JPH_PointConstraint + { + } + + public partial struct JPH_HingeConstraint + { + } + + public partial struct JPH_SliderConstraint + { + } + + public partial struct JPH_ConeConstraint + { + } + + public partial struct JPH_SwingTwistConstraint + { + } + + public partial struct JPH_SixDOFConstraint + { + } + + public partial struct JPH_GearConstraint + { + } + + public partial struct JPH_CharacterBase + { + } + + public partial struct JPH_Character + { + } + + public partial struct JPH_CharacterVirtual + { + } + + public partial struct JPH_CharacterContactListener + { + } + + public partial struct JPH_CharacterVsCharacterCollision + { + } + + public partial struct JPH_Skeleton + { + } + + public partial struct JPH_RagdollSettings + { + } + + public partial struct JPH_Ragdoll + { + } + + public partial struct JPH_ConstraintSettings + { + [NativeTypeName("bool")] + public byte enabled; + + [NativeTypeName("uint32_t")] + public uint constraintPriority; + + [NativeTypeName("uint32_t")] + public uint numVelocityStepsOverride; + + [NativeTypeName("uint32_t")] + public uint numPositionStepsOverride; + + public float drawConstraintSize; + + [NativeTypeName("uint64_t")] + public ulong userData; + } + + public partial struct JPH_FixedConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("bool")] + public byte autoDetectPoint; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY2; + } + + public partial struct JPH_DistanceConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + public float minDistance; + + public float maxDistance; + + public JPH_SpringSettings limitsSpringSettings; + } + + public partial struct JPH_PointConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + } + + public partial struct JPH_HingeConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis2; + + public float limitsMin; + + public float limitsMax; + + public JPH_SpringSettings limitsSpringSettings; + + public float maxFrictionTorque; + + public JPH_MotorSettings motorSettings; + } + + public partial struct JPH_SliderConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("bool")] + public byte autoDetectPoint; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 sliderAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 sliderAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 normalAxis2; + + public float limitsMin; + + public float limitsMax; + + public JPH_SpringSettings limitsSpringSettings; + + public float maxFrictionForce; + + public JPH_MotorSettings motorSettings; + } + + public partial struct JPH_ConeConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point1; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 point2; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis2; + + public float halfConeAngle; + } + + public partial struct JPH_SwingTwistConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position1; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 planeAxis1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position2; + + [NativeTypeName("JPH_Vec3")] + public float3 twistAxis2; + + [NativeTypeName("JPH_Vec3")] + public float3 planeAxis2; + + public JPH_SwingType swingType; + + public float normalHalfConeAngle; + + public float planeHalfConeAngle; + + public float twistMinAngle; + + public float twistMaxAngle; + + public float maxFrictionTorque; + + public JPH_MotorSettings swingMotorSettings; + + public JPH_MotorSettings twistMotorSettings; + } + + public unsafe partial struct JPH_SixDOFConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX1; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY1; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisX2; + + [NativeTypeName("JPH_Vec3")] + public float3 axisY2; + + [NativeTypeName("float[6]")] + public fixed float maxFriction[6]; + + public JPH_SwingType swingType; + + [NativeTypeName("float[6]")] + public fixed float limitMin[6]; + + [NativeTypeName("float[6]")] + public fixed float limitMax[6]; + + [NativeTypeName("JPH_SpringSettings[3]")] + public _limitsSpringSettings_e__FixedBuffer limitsSpringSettings; + + [NativeTypeName("JPH_MotorSettings[6]")] + public _motorSettings_e__FixedBuffer motorSettings; + + public partial struct _limitsSpringSettings_e__FixedBuffer + { + public JPH_SpringSettings e0; + public JPH_SpringSettings e1; + public JPH_SpringSettings e2; + + public unsafe ref JPH_SpringSettings this[int index] + { + get + { + fixed (JPH_SpringSettings* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + + public partial struct _motorSettings_e__FixedBuffer + { + public JPH_MotorSettings e0; + public JPH_MotorSettings e1; + public JPH_MotorSettings e2; + public JPH_MotorSettings e3; + public JPH_MotorSettings e4; + public JPH_MotorSettings e5; + + public unsafe ref JPH_MotorSettings this[int index] + { + get + { + fixed (JPH_MotorSettings* pThis = &e0) + { + return ref pThis[index]; + } + } + } + } + } + + public partial struct JPH_GearConstraintSettings + { + public JPH_ConstraintSettings @base; + + public JPH_ConstraintSpace space; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis1; + + [NativeTypeName("JPH_Vec3")] + public float3 hingeAxis2; + + public float ratio; + } + + public unsafe partial struct JPH_BodyLockRead + { + [NativeTypeName("const JPH_BodyLockInterface *")] + public JPH_BodyLockInterface* lockInterface; + + public JPH_SharedMutex* mutex; + + [NativeTypeName("const JPH_Body *")] + public JPH_Body* body; + } + + public unsafe partial struct JPH_BodyLockWrite + { + [NativeTypeName("const JPH_BodyLockInterface *")] + public JPH_BodyLockInterface* lockInterface; + + public JPH_SharedMutex* mutex; + + public JPH_Body* body; + } + + public partial struct JPH_BodyLockMultiRead + { + } + + public partial struct JPH_BodyLockMultiWrite + { + } + + public partial struct JPH_ExtendedUpdateSettings + { + [NativeTypeName("JPH_Vec3")] + public float3 stickToFloorStepDown; + + [NativeTypeName("JPH_Vec3")] + public float3 walkStairsStepUp; + + public float walkStairsMinStepForward; + + public float walkStairsStepForwardTest; + + public float walkStairsCosAngleForwardContact; + + [NativeTypeName("JPH_Vec3")] + public float3 walkStairsStepDownExtra; + } + + public unsafe partial struct JPH_CharacterBaseSettings + { + [NativeTypeName("JPH_Vec3")] + public float3 up; + + public JPH_Plane supportingVolume; + + public float maxSlopeAngle; + + [NativeTypeName("bool")] + public byte enhancedInternalEdgeRemoval; + + [NativeTypeName("const JPH_Shape *")] + public JPH_Shape* shape; + } + + public partial struct JPH_CharacterSettings + { + public JPH_CharacterBaseSettings @base; + + [NativeTypeName("JPH_ObjectLayer")] + public uint layer; + + public float mass; + + public float friction; + + public float gravityFactor; + + public JPH_AllowedDOFs allowedDOFs; + } + + public unsafe partial struct JPH_CharacterVirtualSettings + { + public JPH_CharacterBaseSettings @base; + + [NativeTypeName("JPH_CharacterID")] + public uint ID; + + public float mass; + + public float maxStrength; + + [NativeTypeName("JPH_Vec3")] + public float3 shapeOffset; + + public JPH_BackFaceMode backFaceMode; + + public float predictiveContactDistance; + + [NativeTypeName("uint32_t")] + public uint maxCollisionIterations; + + [NativeTypeName("uint32_t")] + public uint maxConstraintIterations; + + public float minTimeRemaining; + + public float collisionTolerance; + + public float characterPadding; + + [NativeTypeName("uint32_t")] + public uint maxNumHits; + + public float hitReductionCosMaxAngle; + + public float penetrationRecoverySpeed; + + [NativeTypeName("const JPH_Shape *")] + public JPH_Shape* innerBodyShape; + + [NativeTypeName("JPH_BodyID")] + public uint innerBodyIDOverride; + + [NativeTypeName("JPH_ObjectLayer")] + public uint innerBodyLayer; + } + + public partial struct JPH_CharacterContactSettings + { + [NativeTypeName("bool")] + public byte canPushCharacter; + + [NativeTypeName("bool")] + public byte canReceiveImpulses; + } + + public unsafe partial struct JPH_CharacterVirtualContact + { + [NativeTypeName("uint64_t")] + public ulong hash; + + [NativeTypeName("JPH_BodyID")] + public uint bodyB; + + [NativeTypeName("JPH_CharacterID")] + public uint characterIDB; + + [NativeTypeName("JPH_SubShapeID")] + public uint subShapeIDB; + + [NativeTypeName("JPH_RVec3")] + public rvec3 position; + + [NativeTypeName("JPH_Vec3")] + public float3 linearVelocity; + + [NativeTypeName("JPH_Vec3")] + public float3 contactNormal; + + [NativeTypeName("JPH_Vec3")] + public float3 surfaceNormal; + + public float distance; + + public float fraction; + + public JPH_MotionType motionTypeB; + + [NativeTypeName("bool")] + public byte isSensorB; + + [NativeTypeName("const JPH_CharacterVirtual *")] + public JPH_CharacterVirtual* characterB; + + [NativeTypeName("uint64_t")] + public ulong userData; + + [NativeTypeName("const JPH_PhysicsMaterial *")] + public JPH_PhysicsMaterial* material; + + [NativeTypeName("bool")] + public byte hadCollision; + + [NativeTypeName("bool")] + public byte wasDiscarded; + + [NativeTypeName("bool")] + public byte canPushCharacter; + } + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_TraceFunc([NativeTypeName("const char *")] sbyte* message); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate bool JPH_AssertFailureFunc([NativeTypeName("const char *")] sbyte* expression, [NativeTypeName("const char *")] sbyte* message, [NativeTypeName("const char *")] sbyte* file, [NativeTypeName("uint32_t")] uint line); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_JobFunction(void* arg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_QueueJobCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void* arg); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public unsafe delegate void JPH_QueueJobsCallback(void* context, [NativeTypeName("JPH_JobFunction *")] IntPtr job, void** args, [NativeTypeName("uint32_t")] uint count); + + public partial struct JobSystemThreadPoolConfig + { + [NativeTypeName("uint32_t")] + public uint maxJobs; + + [NativeTypeName("uint32_t")] + public uint maxBarriers; + + [NativeTypeName("int32_t")] + public int numThreads; + } + + public unsafe partial struct JPH_JobSystemConfig + { + public void* context; + + [NativeTypeName("JPH_QueueJobCallback *")] + public IntPtr queueJob; + + [NativeTypeName("JPH_QueueJobsCallback *")] + public IntPtr queueJobs; + + [NativeTypeName("uint32_t")] + public uint maxConcurrency; + + [NativeTypeName("uint32_t")] + public uint maxBarriers; + } + + public partial struct JPH_JobSystem + { + } + + public unsafe partial struct JPH_PhysicsSystemSettings + { + [NativeTypeName("uint32_t")] + public uint maxBodies; + + [NativeTypeName("uint32_t")] + public uint numBodyMutexes; + + [NativeTypeName("uint32_t")] + public uint maxBodyPairs; + + [NativeTypeName("uint32_t")] + public uint maxContactConstraints; + + [NativeTypeName("uint32_t")] + public uint _padding; + + public JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface; + + public JPH_ObjectLayerPairFilter* objectLayerPairFilter; + + public JPH_ObjectVsBroadPhaseLayerFilter* objectVsBroadPhaseLayerFilter; + } + + public partial struct JPH_PhysicsSettings + { + public int maxInFlightBodyPairs; + + public int stepListenersBatchSize; + + public int stepListenerBatchesPerJob; + + public float baumgarte; + + public float speculativeContactDistance; + + public float penetrationSlop; + + public float linearCastThreshold; + + public float linearCastMaxPenetration; + + public float manifoldTolerance; + + public float maxPenetrationDistance; + + public float bodyPairCacheMaxDeltaPositionSq; + + public float bodyPairCacheCosMaxDeltaRotationDiv2; + + public float contactNormalCosMaxDeltaRotation; + + public float contactPointPreserveLambdaMaxDistSq; + + [NativeTypeName("uint32_t")] + public uint numVelocitySteps; + + [NativeTypeName("uint32_t")] + public uint numPositionSteps; + + public float minVelocityForRestitution; + + public float timeBeforeSleep; + + public float pointVelocitySleepThreshold; + + [NativeTypeName("bool")] + public byte deterministicSimulation; + + [NativeTypeName("bool")] + public byte constraintWarmStart; + + [NativeTypeName("bool")] + public byte useBodyPairContactCache; + + [NativeTypeName("bool")] + public byte useManifoldReduction; + + [NativeTypeName("bool")] + public byte useLargeIslandSplitter; + + [NativeTypeName("bool")] + public byte allowSleeping; + + [NativeTypeName("bool")] + public byte checkActiveEdges; + } + + public unsafe partial struct JPH_PhysicsStepListenerContext + { + public float deltaTime; + + [NativeTypeName("JPH_Bool")] + public uint isFirstStep; + + [NativeTypeName("JPH_Bool")] + public uint isLastStep; + + public JPH_PhysicsSystem* physicsSystem; + } + + public partial struct JPH_PhysicsStepListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_PhysicsStepListenerContext *)")] + public IntPtr OnStep; + } + + public partial struct JPH_BroadPhaseLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BroadPhaseLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ObjectLayerFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_ObjectLayer)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_BodyFilter_Procs + { + [NativeTypeName("bool (*)(void *, JPH_BodyID)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldCollideLocked; + } + + public partial struct JPH_ShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + + [NativeTypeName("bool (*)(void *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide2; + } + + public partial struct JPH_SimShapeFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *, const JPH_Body *, const JPH_Shape *, const JPH_SubShapeID *)")] + public IntPtr ShouldCollide; + } + + public partial struct JPH_ContactListener_Procs + { + [NativeTypeName("JPH_ValidateResult (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_RVec3 *, const JPH_CollideShapeResult *)")] + public IntPtr OnContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_Body *, const JPH_Body *, const JPH_ContactManifold *, JPH_ContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_SubShapeIDPair *)")] + public IntPtr OnContactRemoved; + } + + public partial struct JPH_BodyActivationListener_Procs + { + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyActivated; + + [NativeTypeName("void (*)(void *, JPH_BodyID, uint64_t)")] + public IntPtr OnBodyDeactivated; + } + + public partial struct JPH_BodyDrawFilter_Procs + { + [NativeTypeName("bool (*)(void *, const JPH_Body *)")] + public IntPtr ShouldDraw; + } + + public partial struct JPH_CharacterContactListener_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_Body *, JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnAdjustBodyVelocity; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactValidate; + + [NativeTypeName("bool (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactValidate; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID)")] + public IntPtr OnContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactAdded; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, JPH_CharacterContactSettings *)")] + public IntPtr OnCharacterContactPersisted; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterID, const JPH_SubShapeID)")] + public IntPtr OnCharacterContactRemoved; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_BodyID, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnContactSolve; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_CharacterVirtual *, const JPH_SubShapeID, const JPH_RVec3 *, const JPH_Vec3 *, const JPH_Vec3 *, const JPH_PhysicsMaterial *, const JPH_Vec3 *, JPH_Vec3 *)")] + public IntPtr OnCharacterContactSolve; + } + + public partial struct JPH_CharacterVsCharacterCollision_Procs + { + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_CollideShapeSettings *, const JPH_RVec3 *)")] + public IntPtr CollideCharacter; + + [NativeTypeName("void (*)(void *, const JPH_CharacterVirtual *, const JPH_RMatrix4x4 *, const JPH_Vec3 *, const JPH_ShapeCastSettings *, const JPH_RVec3 *)")] + public IntPtr CastCharacter; + } + + public partial struct JPH_DebugRenderer_Procs + { + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color)")] + public IntPtr DrawLine; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const JPH_RVec3 *, const JPH_RVec3 *, JPH_Color, JPH_DebugRenderer_CastShadow)")] + public IntPtr DrawTriangle; + + [NativeTypeName("void (*)(void *, const JPH_RVec3 *, const char *, JPH_Color, float)")] + public IntPtr DrawText3D; + } + + public unsafe partial struct JPH_SkeletonJoint + { + [NativeTypeName("const char *")] + public sbyte* name; + + [NativeTypeName("const char *")] + public sbyte* parentName; + + public int parentJointIndex; + } + + public partial struct JPH_WheelSettings + { + } + + public partial struct JPH_WheelSettingsWV + { + } + + public partial struct JPH_WheelSettingsTV + { + } + + public partial struct JPH_Wheel + { + } + + public partial struct JPH_WheelWV + { + } + + public partial struct JPH_WheelTV + { + } + + public partial struct JPH_VehicleTransmissionSettings + { + } + + public partial struct JPH_VehicleCollisionTester + { + } + + public partial struct JPH_VehicleCollisionTesterRay + { + } + + public partial struct JPH_VehicleCollisionTesterCastSphere + { + } + + public partial struct JPH_VehicleCollisionTesterCastCylinder + { + } + + public partial struct JPH_VehicleConstraint + { + } + + public partial struct JPH_VehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleControllerSettings + { + } + + public partial struct JPH_MotorcycleControllerSettings + { + } + + public partial struct JPH_TrackedVehicleControllerSettings + { + } + + public partial struct JPH_WheeledVehicleController + { + } + + public partial struct JPH_MotorcycleController + { + } + + public partial struct JPH_TrackedVehicleController + { + } + + public partial struct JPH_VehicleController + { + } + + public partial struct JPH_VehicleAntiRollBar + { + public int leftWheel; + + public int rightWheel; + + public float stiffness; + } + + public unsafe partial struct JPH_VehicleConstraintSettings + { + public JPH_ConstraintSettings @base; + + [NativeTypeName("JPH_Vec3")] + public float3 up; + + [NativeTypeName("JPH_Vec3")] + public float3 forward; + + public float maxPitchRollAngle; + + [NativeTypeName("uint32_t")] + public uint wheelsCount; + + public JPH_WheelSettings** wheels; + + [NativeTypeName("uint32_t")] + public uint antiRollBarsCount; + + [NativeTypeName("const JPH_VehicleAntiRollBar *")] + public JPH_VehicleAntiRollBar* antiRollBars; + + public JPH_VehicleControllerSettings* controller; + } + + public partial struct JPH_VehicleEngineSettings + { + public float maxTorque; + + public float minRPM; + + public float maxRPM; + + public float inertia; + + public float angularDamping; + } + + public partial struct JPH_VehicleDifferentialSettings + { + public int leftWheel; + + public int rightWheel; + + public float differentialRatio; + + public float leftRightSplit; + + public float limitedSlipRatio; + + public float engineTorqueRatio; + } + + public static unsafe partial class UnsafeBindings + { + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemThreadPool_Create([NativeTypeName("const JobSystemThreadPoolConfig *")] JobSystemThreadPoolConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_JobSystem* JPH_JobSystemCallback_Create([NativeTypeName("const JPH_JobSystemConfig *")] JPH_JobSystemConfig* config); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_JobSystem_Destroy(JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Init(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shutdown(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetTraceHandler([NativeTypeName("JPH_TraceFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SetAssertFailureHandler([NativeTypeName("JPH_AssertFailureFunc")] IntPtr handler); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollideShapeResult_FreeMembers(JPH_CollideShapeResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollisionEstimationResult_FreeMembers(JPH_CollisionEstimationResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceMask_Create([NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceMask_ConfigureLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer, [NativeTypeName("uint32_t")] uint groupsToInclude, [NativeTypeName("uint32_t")] uint groupsToExclude); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerInterface* JPH_BroadPhaseLayerInterfaceTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerInterfaceTable_MapObjectToBroadPhaseLayer(JPH_BroadPhaseLayerInterface* bpInterface, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer, [NativeTypeName("JPH_BroadPhaseLayer")] byte broadPhaseLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterMask_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetObjectLayer([NativeTypeName("uint32_t")] uint group, [NativeTypeName("uint32_t")] uint mask); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetGroup([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ObjectLayerPairFilterMask_GetMask([NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerPairFilter* JPH_ObjectLayerPairFilterTable_Create([NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_DisableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerPairFilterTable_EnableCollision(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_ObjectLayerPairFilterTable_ShouldCollide(JPH_ObjectLayerPairFilter* objectFilter, [NativeTypeName("JPH_ObjectLayer")] uint layer1, [NativeTypeName("JPH_ObjectLayer")] uint layer2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterMask_Create([NativeTypeName("const JPH_BroadPhaseLayerInterface *")] JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectVsBroadPhaseLayerFilter* JPH_ObjectVsBroadPhaseLayerFilterTable_Create(JPH_BroadPhaseLayerInterface* broadPhaseLayerInterface, [NativeTypeName("uint32_t")] uint numBroadPhaseLayers, JPH_ObjectLayerPairFilter* objectLayerPairFilter, [NativeTypeName("uint32_t")] uint numObjectLayers); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DrawSettings_InitDefault(JPH_DrawSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsSystem* JPH_PhysicsSystem_Create([NativeTypeName("const JPH_PhysicsSystemSettings *")] JPH_PhysicsSystemSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_Destroy(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetPhysicsSettings(JPH_PhysicsSystem* system, JPH_PhysicsSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_OptimizeBroadPhase(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsUpdateError JPH_PhysicsSystem_Update(JPH_PhysicsSystem* system, float deltaTime, int collisionSteps, JPH_JobSystem* jobSystem); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterface(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyInterface* JPH_PhysicsSystem_GetBodyInterfaceNoLock(JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterface([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BodyLockInterface *")] + public static extern JPH_BodyLockInterface* JPH_PhysicsSystem_GetBodyLockInterfaceNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_BroadPhaseQuery *")] + public static extern JPH_BroadPhaseQuery* JPH_PhysicsSystem_GetBroadPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQuery([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_NarrowPhaseQuery *")] + public static extern JPH_NarrowPhaseQuery* JPH_PhysicsSystem_GetNarrowPhaseQueryNoLock([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetContactListener(JPH_PhysicsSystem* system, JPH_ContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetBodyActivationListener(JPH_PhysicsSystem* system, JPH_BodyActivationListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetSimShapeFilter(JPH_PhysicsSystem* system, JPH_SimShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_PhysicsSystem_WereBodiesInContact([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID")] uint body1, [NativeTypeName("JPH_BodyID")] uint body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumActiveBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, JPH_BodyType type); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetMaxBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsSystem_GetNumConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_SetGravity(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetGravity(JPH_PhysicsSystem* system, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraint(JPH_PhysicsSystem* system, JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveConstraints(JPH_PhysicsSystem* system, JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_AddStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_RemoveStepListener(JPH_PhysicsSystem* system, JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetBodies([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("JPH_BodyID *")] uint* ids, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_GetConstraints([NativeTypeName("const JPH_PhysicsSystem *")] JPH_PhysicsSystem* system, [NativeTypeName("const JPH_Constraint **")] JPH_Constraint** constraints, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawBodies(JPH_PhysicsSystem* system, [NativeTypeName("const JPH_DrawSettings *")] JPH_DrawSettings* settings, JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_BodyDrawFilter *")] JPH_BodyDrawFilter* bodyFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraints(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintLimits(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsSystem_DrawConstraintReferenceFrame(JPH_PhysicsSystem* system, JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_SetProcs([NativeTypeName("const JPH_PhysicsStepListener_Procs *")] JPH_PhysicsStepListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsStepListener* JPH_PhysicsStepListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsStepListener_Destroy(JPH_PhysicsStepListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quaternion_FromTo([NativeTypeName("const JPH_Vec3 *")] float3* from, [NativeTypeName("const JPH_Vec3 *")] float3* to, [NativeTypeName("JPH_Quat *")] quaternion* quat); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetAxisAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* outAxis, float* outAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetEulerAngles([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisX([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisY([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_RotateAxisZ([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Inversed([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetPerpendicular([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Quat_GetRotationAngle([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_FromEulerAngles([NativeTypeName("const JPH_Vec3 *")] float3* angles, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Add([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Subtract([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Multiply([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_MultiplyScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_DivideScalar([NativeTypeName("const JPH_Quat *")] quaternion* q, float scalar, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Dot([NativeTypeName("const JPH_Quat *")] quaternion* q1, [NativeTypeName("const JPH_Quat *")] quaternion* q2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Conjugated([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_GetSwingTwist([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("JPH_Quat *")] quaternion* outSwing, [NativeTypeName("JPH_Quat *")] quaternion* outTwist); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Lerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Slerp([NativeTypeName("const JPH_Quat *")] quaternion* from, [NativeTypeName("const JPH_Quat *")] quaternion* to, float fraction, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_Rotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Quat_InverseRotate([NativeTypeName("const JPH_Quat *")] quaternion* quat, [NativeTypeName("const JPH_Vec3 *")] float3* vec, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsClose([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNearZero([NativeTypeName("const JPH_Vec3 *")] float3* v, float maxDistSq); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNormalized([NativeTypeName("const JPH_Vec3 *")] float3* v, float tolerance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Vec3_IsNaN([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Negate([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalized([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Cross([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Abs([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_Length([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Vec3_LengthSquared([NativeTypeName("const JPH_Vec3 *")] float3* v); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DotProduct([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, float* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Normalize([NativeTypeName("const JPH_Vec3 *")] float3* v, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Add([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Subtract([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Multiply([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_MultiplyScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_Divide([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Vec3_DivideScalar([NativeTypeName("const JPH_Vec3 *")] float3* v, float scalar, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Add([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Subtract([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Multiply([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_MultiplyScalar([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, float scalar, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Zero([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Identity([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Rotation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Translation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_RotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_InverseRotationTranslation([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Vec3 *")] float3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Scale([NativeTypeName("JPH_Matrix4x4 *")] float4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Inversed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_Transposed([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* m, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Zero([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Identity([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Rotation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Translation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_RotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_InverseRotationTranslation([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_RVec3 *")] rvec3* translation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Scale([NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RMatrix4x4_Inversed([NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* m, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisX([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisY([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetAxisZ([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetTranslation([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Matrix4x4_GetQuaternion([NativeTypeName("const JPH_Matrix4x4 *")] float4x4* matrix, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsMaterial* JPH_PhysicsMaterial_Create([NativeTypeName("const char *")] sbyte* name, [NativeTypeName("uint32_t")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PhysicsMaterial_Destroy(JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const char *")] + public static extern sbyte* JPH_PhysicsMaterial_GetDebugName([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_PhysicsMaterial_GetDebugColor([NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilter_Destroy(JPH_GroupFilter* groupFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilter_CanCollide(JPH_GroupFilter* groupFilter, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group1, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GroupFilterTable* JPH_GroupFilterTable_Create([NativeTypeName("uint32_t")] uint numSubGroups); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_DisableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GroupFilterTable_EnableCollision(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_GroupFilterTable_IsCollisionEnabled(JPH_GroupFilterTable* table, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup1, [NativeTypeName("JPH_CollisionSubGroupID")] uint subGroup2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_Destroy(JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_ShapeSettings_GetUserData([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeSettings_SetUserData(JPH_ShapeSettings* settings, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_Destroy(JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeType JPH_Shape_GetType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeSubType JPH_Shape_GetSubType([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Shape_GetUserData([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_SetUserData(JPH_Shape* shape, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_MustBeStatic([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetCenterOfMass([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetLocalBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Shape_GetSubShapeIDBitsRecursive([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetWorldSpaceBounds([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("JPH_Vec3 *")] float3* scale, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetInnerRadius([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetMassProperties([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, JPH_MassProperties* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Shape_GetLeafShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_Shape_GetMaterial([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSurfaceNormal([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_GetSupportingFace([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform, JPH_SupportingFace* outVertices); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Shape_GetVolume([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_IsValidScale([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Shape_MakeScaleValid([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Shape* JPH_Shape_ScaleShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CastRay2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Shape_CollidePoint2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShapeSettings_GetDensity([NativeTypeName("const JPH_ConvexShapeSettings *")] JPH_ConvexShapeSettings* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShapeSettings_SetDensity(JPH_ConvexShapeSettings* shape, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConvexShape_GetDensity([NativeTypeName("const JPH_ConvexShape *")] JPH_ConvexShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexShape_SetDensity(JPH_ConvexShape* shape, float inDensity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShapeSettings* JPH_BoxShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShapeSettings_CreateShape([NativeTypeName("const JPH_BoxShapeSettings *")] JPH_BoxShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BoxShape* JPH_BoxShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* halfExtent, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BoxShape_GetHalfExtent([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BoxShape_GetConvexRadius([NativeTypeName("const JPH_BoxShape *")] JPH_BoxShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShapeSettings* JPH_SphereShapeSettings_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShapeSettings_CreateShape([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShapeSettings_GetRadius([NativeTypeName("const JPH_SphereShapeSettings *")] JPH_SphereShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SphereShapeSettings_SetRadius(JPH_SphereShapeSettings* settings, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SphereShape* JPH_SphereShape_Create(float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SphereShape_GetRadius([NativeTypeName("const JPH_SphereShape *")] JPH_SphereShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShapeSettings* JPH_PlaneShapeSettings_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShapeSettings_CreateShape([NativeTypeName("const JPH_PlaneShapeSettings *")] JPH_PlaneShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PlaneShape* JPH_PlaneShape_Create([NativeTypeName("const JPH_Plane *")] JPH_Plane* plane, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material, float halfExtent); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PlaneShape_GetPlane([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape, JPH_Plane* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_PlaneShape_GetHalfExtent([NativeTypeName("const JPH_PlaneShape *")] JPH_PlaneShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShapeSettings* JPH_TriangleShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShapeSettings_CreateShape([NativeTypeName("const JPH_TriangleShapeSettings *")] JPH_TriangleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TriangleShape* JPH_TriangleShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* v1, [NativeTypeName("const JPH_Vec3 *")] float3* v2, [NativeTypeName("const JPH_Vec3 *")] float3* v3, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TriangleShape_GetConvexRadius([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex1([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex2([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TriangleShape_GetVertex3([NativeTypeName("const JPH_TriangleShape *")] JPH_TriangleShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShapeSettings* JPH_CapsuleShapeSettings_Create(float halfHeightOfCylinder, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShapeSettings_CreateShape([NativeTypeName("const JPH_CapsuleShapeSettings *")] JPH_CapsuleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CapsuleShape* JPH_CapsuleShape_Create(float halfHeightOfCylinder, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetRadius([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CapsuleShape_GetHalfHeightOfCylinder([NativeTypeName("const JPH_CapsuleShape *")] JPH_CapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShapeSettings* JPH_CylinderShapeSettings_Create(float halfHeight, float radius, float convexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShapeSettings_CreateShape([NativeTypeName("const JPH_CylinderShapeSettings *")] JPH_CylinderShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CylinderShape* JPH_CylinderShape_Create(float halfHeight, float radius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetRadius([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CylinderShape_GetHalfHeight([NativeTypeName("const JPH_CylinderShape *")] JPH_CylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShapeSettings* JPH_TaperedCylinderShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius, float convexRadius, [NativeTypeName("const JPH_PhysicsMaterial *")] JPH_PhysicsMaterial* material); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCylinderShape* JPH_TaperedCylinderShapeSettings_CreateShape([NativeTypeName("const JPH_TaperedCylinderShapeSettings *")] JPH_TaperedCylinderShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetTopRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetConvexRadius([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCylinderShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCylinderShape *")] JPH_TaperedCylinderShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShapeSettings* JPH_ConvexHullShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* points, [NativeTypeName("uint32_t")] uint pointsCount, float maxConvexRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConvexHullShape* JPH_ConvexHullShapeSettings_CreateShape([NativeTypeName("const JPH_ConvexHullShapeSettings *")] JPH_ConvexHullShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumPoints([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConvexHullShape_GetPoint([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumFaces([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetNumVerticesInFace([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ConvexHullShape_GetFaceVertices([NativeTypeName("const JPH_ConvexHullShape *")] JPH_ConvexHullShape* shape, [NativeTypeName("uint32_t")] uint faceIndex, [NativeTypeName("uint32_t")] uint maxVertices, [NativeTypeName("uint32_t *")] uint* vertices); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create([NativeTypeName("const JPH_Triangle *")] JPH_Triangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShapeSettings* JPH_MeshShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* vertices, [NativeTypeName("uint32_t")] uint verticesCount, [NativeTypeName("const JPH_IndexedTriangle *")] JPH_IndexedTriangle* triangles, [NativeTypeName("uint32_t")] uint triangleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShapeSettings_GetMaxTrianglesPerLeaf([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetMaxTrianglesPerLeaf(JPH_MeshShapeSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MeshShapeSettings_GetActiveEdgeCosThresholdAngle([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetActiveEdgeCosThresholdAngle(JPH_MeshShapeSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MeshShapeSettings_GetPerTriangleUserData([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetPerTriangleUserData(JPH_MeshShapeSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Mesh_Shape_BuildQuality JPH_MeshShapeSettings_GetBuildQuality([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_SetBuildQuality(JPH_MeshShapeSettings* settings, JPH_Mesh_Shape_BuildQuality value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MeshShapeSettings_Sanitize(JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MeshShape* JPH_MeshShapeSettings_CreateShape([NativeTypeName("const JPH_MeshShapeSettings *")] JPH_MeshShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MeshShape_GetTriangleUserData([NativeTypeName("const JPH_MeshShape *")] JPH_MeshShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShapeSettings* JPH_HeightFieldShapeSettings_Create([NativeTypeName("const float *")] float* samples, [NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("uint32_t")] uint sampleCount); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HeightFieldShape* JPH_HeightFieldShapeSettings_CreateShape(JPH_HeightFieldShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HeightFieldShapeSettings_DetermineMinAndMaxSample([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float* pOutMinValue, float* pOutMaxValue, float* pOutQuantizationScale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShapeSettings_CalculateBitsPerSampleForError([NativeTypeName("const JPH_HeightFieldShapeSettings *")] JPH_HeightFieldShapeSettings* settings, float maxError); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetSampleCount([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_HeightFieldShape_GetBlockSize([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_HeightFieldShape_GetMaterial([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HeightFieldShape_GetPosition([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_IsNoCollision([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("uint32_t")] uint x, [NativeTypeName("uint32_t")] uint y); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HeightFieldShape_ProjectOntoSurface([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* localPosition, [NativeTypeName("JPH_Vec3 *")] float3* outSurfacePosition, [NativeTypeName("JPH_SubShapeID *")] uint* outSubShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HeightFieldShape_GetMinHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HeightFieldShape_GetMaxHeightValue([NativeTypeName("const JPH_HeightFieldShape *")] JPH_HeightFieldShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCapsuleShapeSettings* JPH_TaperedCapsuleShapeSettings_Create(float halfHeightOfTaperedCylinder, float topRadius, float bottomRadius); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TaperedCapsuleShape* JPH_TaperedCapsuleShapeSettings_CreateShape(JPH_TaperedCapsuleShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetTopRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetBottomRadius([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TaperedCapsuleShape_GetHalfHeight([NativeTypeName("const JPH_TaperedCapsuleShape *")] JPH_TaperedCapsuleShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShapeSettings_AddShape(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("uint32_t")] uint userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShapeSettings_AddShape2(JPH_CompoundShapeSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("uint32_t")] uint userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetNumSubShapes([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CompoundShape_GetSubShape([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Shape **")] JPH_Shape** subShape, [NativeTypeName("JPH_Vec3 *")] float3* positionCOM, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint32_t *")] uint* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CompoundShape_GetSubShapeIndexFromID([NativeTypeName("const JPH_CompoundShape *")] JPH_CompoundShape* shape, [NativeTypeName("JPH_SubShapeID")] uint id, [NativeTypeName("JPH_SubShapeID *")] uint* remainder); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_StaticCompoundShapeSettings* JPH_StaticCompoundShapeSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_StaticCompoundShape* JPH_StaticCompoundShape_Create([NativeTypeName("const JPH_StaticCompoundShapeSettings *")] JPH_StaticCompoundShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MutableCompoundShapeSettings* JPH_MutableCompoundShapeSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MutableCompoundShape* JPH_MutableCompoundShape_Create([NativeTypeName("const JPH_MutableCompoundShapeSettings *")] JPH_MutableCompoundShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_MutableCompoundShape_AddShape(JPH_MutableCompoundShape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* child, [NativeTypeName("uint32_t")] uint userData, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_RemoveShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_ModifyShape(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_ModifyShape2(JPH_MutableCompoundShape* shape, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* newShape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MutableCompoundShape_AdjustCenterOfMass(JPH_MutableCompoundShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_DecoratedShape_GetInnerShape([NativeTypeName("const JPH_DecoratedShape *")] JPH_DecoratedShape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShapeSettings* JPH_RotatedTranslatedShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShapeSettings_CreateShape([NativeTypeName("const JPH_RotatedTranslatedShapeSettings *")] JPH_RotatedTranslatedShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RotatedTranslatedShape* JPH_RotatedTranslatedShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RotatedTranslatedShape_GetPosition([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RotatedTranslatedShape_GetRotation([NativeTypeName("const JPH_RotatedTranslatedShape *")] JPH_RotatedTranslatedShape* shape, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShapeSettings* JPH_ScaledShapeSettings_Create2([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShape* JPH_ScaledShapeSettings_CreateShape([NativeTypeName("const JPH_ScaledShapeSettings *")] JPH_ScaledShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ScaledShape* JPH_ScaledShape_Create([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ScaledShape_GetScale([NativeTypeName("const JPH_ScaledShape *")] JPH_ScaledShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* shapeSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShapeSettings* JPH_OffsetCenterOfMassShapeSettings_Create2([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShapeSettings_CreateShape([NativeTypeName("const JPH_OffsetCenterOfMassShapeSettings *")] JPH_OffsetCenterOfMassShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OffsetCenterOfMassShape* JPH_OffsetCenterOfMassShape_Create([NativeTypeName("const JPH_Vec3 *")] float3* offset, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_OffsetCenterOfMassShape_GetOffset([NativeTypeName("const JPH_OffsetCenterOfMassShape *")] JPH_OffsetCenterOfMassShape* shape, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_EmptyShapeSettings* JPH_EmptyShapeSettings_Create([NativeTypeName("const JPH_Vec3 *")] float3* centerOfMass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_EmptyShape* JPH_EmptyShapeSettings_CreateShape([NativeTypeName("const JPH_EmptyShapeSettings *")] JPH_EmptyShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create2([NativeTypeName("const JPH_ShapeSettings *")] JPH_ShapeSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyCreationSettings* JPH_BodyCreationSettings_Create3([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_MotionType motionType, [NativeTypeName("JPH_ObjectLayer")] uint objectLayer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_Destroy(JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetPosition(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetRotation(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Quat *")] quaternion* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetLinearVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAngularVelocity(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_BodyCreationSettings_GetUserData([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetUserData(JPH_BodyCreationSettings* settings, [NativeTypeName("uint64_t")] ulong value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyCreationSettings_GetObjectLayer([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetObjectLayer(JPH_BodyCreationSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetCollisionGroup([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetCollisionGroup(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_BodyCreationSettings_GetMotionType([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMotionType(JPH_BodyCreationSettings* settings, JPH_MotionType value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_AllowedDOFs JPH_BodyCreationSettings_GetAllowedDOFs([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowedDOFs(JPH_BodyCreationSettings* settings, JPH_AllowedDOFs value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowDynamicOrKinematic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowDynamicOrKinematic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetIsSensor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetIsSensor(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetCollideKinematicVsNonDynamic(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetUseManifoldReduction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetUseManifoldReduction(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetApplyGyroscopicForce([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetApplyGyroscopicForce(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionQuality JPH_BodyCreationSettings_GetMotionQuality([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMotionQuality(JPH_BodyCreationSettings* settings, JPH_MotionQuality value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetEnhancedInternalEdgeRemoval(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyCreationSettings_GetAllowSleeping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAllowSleeping(JPH_BodyCreationSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetFriction([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetFriction(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetRestitution([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetRestitution(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetLinearDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetLinearDamping(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetAngularDamping([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetAngularDamping(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetMaxLinearVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMaxLinearVelocity(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetMaxAngularVelocity([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMaxAngularVelocity(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetGravityFactor([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetGravityFactor(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumVelocityStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetNumVelocityStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_BodyCreationSettings_GetNumPositionStepsOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetNumPositionStepsOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_OverrideMassProperties JPH_BodyCreationSettings_GetOverrideMassProperties([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetOverrideMassProperties(JPH_BodyCreationSettings* settings, JPH_OverrideMassProperties value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyCreationSettings_GetInertiaMultiplier([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetInertiaMultiplier(JPH_BodyCreationSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_GetMassPropertiesOverride([NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_MassProperties* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyCreationSettings_SetMassPropertiesOverride(JPH_BodyCreationSettings* settings, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SoftBodyCreationSettings* JPH_SoftBodyCreationSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SoftBodyCreationSettings_Destroy(JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_Destroy(JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConstraintType JPH_Constraint_GetType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConstraintSubType JPH_Constraint_GetSubType([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetConstraintPriority([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetConstraintPriority(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint priority); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumVelocityStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetNumVelocityStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Constraint_GetNumPositionStepsOverride([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetNumPositionStepsOverride(JPH_Constraint* constraint, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_GetEnabled([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetEnabled(JPH_Constraint* constraint, [NativeTypeName("bool")] byte enabled); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Constraint_GetUserData([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetUserData(JPH_Constraint* constraint, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_NotifyShapeChanged(JPH_Constraint* constraint, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* deltaCOM); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_ResetWarmStart(JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_IsActive([NativeTypeName("const JPH_Constraint *")] JPH_Constraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_SetupVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Constraint_WarmStartVelocityConstraint(JPH_Constraint* constraint, float warmStartImpulseRatio); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolveVelocityConstraint(JPH_Constraint* constraint, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Constraint_SolvePositionConstraint(JPH_Constraint* constraint, float deltaTime, float baumgarte); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody1([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_TwoBodyConstraint_GetBody2([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody1Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TwoBodyConstraint_GetConstraintToBody2Matrix([NativeTypeName("const JPH_TwoBodyConstraint *")] JPH_TwoBodyConstraint* constraint, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraintSettings_Init(JPH_FixedConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_FixedConstraint* JPH_FixedConstraint_Create([NativeTypeName("const JPH_FixedConstraintSettings *")] JPH_FixedConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetSettings([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, JPH_FixedConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_FixedConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_FixedConstraint *")] JPH_FixedConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraintSettings_Init(JPH_DistanceConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_DistanceConstraint* JPH_DistanceConstraint_Create([NativeTypeName("const JPH_DistanceConstraintSettings *")] JPH_DistanceConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_GetSettings([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint, JPH_DistanceConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_SetDistance(JPH_DistanceConstraint* constraint, float minDistance, float maxDistance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetMinDistance(JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetMaxDistance(JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_GetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DistanceConstraint_SetLimitsSpringSettings(JPH_DistanceConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_DistanceConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_DistanceConstraint *")] JPH_DistanceConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraintSettings_Init(JPH_PointConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PointConstraint* JPH_PointConstraint_Create([NativeTypeName("const JPH_PointConstraintSettings *")] JPH_PointConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetSettings([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, JPH_PointConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_SetPoint1(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_SetPoint2(JPH_PointConstraint* constraint, JPH_ConstraintSpace space, [NativeTypeName("JPH_RVec3 *")] rvec3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_PointConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_PointConstraint *")] JPH_PointConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraintSettings_Init(JPH_HingeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_HingeConstraint* JPH_HingeConstraint_Create([NativeTypeName("const JPH_HingeConstraintSettings *")] JPH_HingeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetSettings(JPH_HingeConstraint* constraint, JPH_HingeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpacePoint1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpacePoint2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceHingeAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis1([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLocalSpaceNormalAxis2([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetCurrentAngle(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMaxFrictionTorque(JPH_HingeConstraint* constraint, float frictionTorque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetMaxFrictionTorque(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetMotorSettings(JPH_HingeConstraint* constraint, JPH_MotorSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetMotorState(JPH_HingeConstraint* constraint, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_HingeConstraint_GetMotorState(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetTargetAngularVelocity(JPH_HingeConstraint* constraint, float angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTargetAngularVelocity(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetTargetAngle(JPH_HingeConstraint* constraint, float angle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTargetAngle(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetLimits(JPH_HingeConstraint* constraint, float inLimitsMin, float inLimitsMax); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetLimitsMin(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetLimitsMax(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_HingeConstraint_HasLimits(JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_SetLimitsSpringSettings(JPH_HingeConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_HingeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint, [NativeTypeName("float[2]")] float* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTotalLambdaRotationLimits([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_HingeConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_HingeConstraint *")] JPH_HingeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraintSettings_Init(JPH_SliderConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraintSettings_SetSliderAxis(JPH_SliderConstraintSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SliderConstraint* JPH_SliderConstraint_Create([NativeTypeName("const JPH_SliderConstraintSettings *")] JPH_SliderConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetSettings(JPH_SliderConstraint* constraint, JPH_SliderConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetCurrentPosition(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMaxFrictionForce(JPH_SliderConstraint* constraint, float frictionForce); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetMaxFrictionForce(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMotorSettings(JPH_SliderConstraint* constraint, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetMotorSettings([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, JPH_MotorSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetMotorState(JPH_SliderConstraint* constraint, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_SliderConstraint_GetMotorState(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetTargetVelocity(JPH_SliderConstraint* constraint, float velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTargetVelocity(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetTargetPosition(JPH_SliderConstraint* constraint, float position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTargetPosition(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetLimits(JPH_SliderConstraint* constraint, float inLimitsMin, float inLimitsMax); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetLimitsMin(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetLimitsMax(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SliderConstraint_HasLimits(JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_SetLimitsSpringSettings(JPH_SliderConstraint* constraint, JPH_SpringSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("float[2]")] float* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTotalLambdaPositionLimits([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SliderConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SliderConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SliderConstraint *")] JPH_SliderConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraintSettings_Init(JPH_ConeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ConeConstraint* JPH_ConeConstraint_Create([NativeTypeName("const JPH_ConeConstraintSettings *")] JPH_ConeConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_GetSettings(JPH_ConeConstraint* constraint, JPH_ConeConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_SetHalfConeAngle(JPH_ConeConstraint* constraint, float halfConeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConeConstraint_GetCosHalfConeAngle([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ConeConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ConeConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_ConeConstraint *")] JPH_ConeConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraintSettings_Init(JPH_SwingTwistConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SwingTwistConstraint* JPH_SwingTwistConstraint_Create([NativeTypeName("const JPH_SwingTwistConstraintSettings *")] JPH_SwingTwistConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetSettings(JPH_SwingTwistConstraint* constraint, JPH_SwingTwistConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetNormalHalfConeAngle(JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaTwist([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingY([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SwingTwistConstraint_GetTotalLambdaSwingZ([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SwingTwistConstraint_GetTotalLambdaMotor([NativeTypeName("const JPH_SwingTwistConstraint *")] JPH_SwingTwistConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_Init(JPH_SixDOFConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_MakeFreeAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_MakeFixedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraintSettings_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraintSettings_SetLimitedAxis(JPH_SixDOFConstraintSettings* settings, JPH_SixDOFConstraintAxis axis, float min, float max); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SixDOFConstraint* JPH_SixDOFConstraint_Create([NativeTypeName("const JPH_SixDOFConstraintSettings *")] JPH_SixDOFConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetLimitsMin(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetLimitsMax(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaPosition([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorTranslation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTotalLambdaMotorRotation([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTranslationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMin([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationLimitsMax([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFixedAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_SixDOFConstraint_IsFreeAxis([NativeTypeName("const JPH_SixDOFConstraint *")] JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* result, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetLimitsSpringSettings(JPH_SixDOFConstraint* constraint, JPH_SpringSettings* settings, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, float inFriction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_SixDOFConstraint_GetMaxFriction(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetRotationInConstraintSpace(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetMotorSettings(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis, JPH_MotorState state); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorState JPH_SixDOFConstraint_GetMotorState(JPH_SixDOFConstraint* constraint, JPH_SixDOFConstraintAxis axis); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inAngularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetAngularVelocityCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* inPosition); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetPositionCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_GetTargetOrientationCS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SixDOFConstraint_SetTargetOrientationBS(JPH_SixDOFConstraint* constraint, [NativeTypeName("JPH_Quat *")] quaternion* inOrientation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraintSettings_Init(JPH_GearConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GearConstraint* JPH_GearConstraint_Create([NativeTypeName("const JPH_GearConstraintSettings *")] JPH_GearConstraintSettings* settings, JPH_Body* body1, JPH_Body* body2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraint_GetSettings(JPH_GearConstraint* constraint, JPH_GearConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_GearConstraint_SetConstraints(JPH_GearConstraint* constraint, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear1, [NativeTypeName("const JPH_Constraint *")] JPH_Constraint* gear2); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_GearConstraint_GetTotalLambda([NativeTypeName("const JPH_GearConstraint *")] JPH_GearConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_BodyCreationSettings *")] JPH_BodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DestroyBodyWithoutID(JPH_BodyInterface* bodyInterface, JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID(JPH_BodyInterface* bodyInterface, JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_AssignBodyID2(JPH_BodyInterface* bodyInterface, JPH_Body* body, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_UnassignBodyID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithID(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyInterface_CreateSoftBodyWithoutID(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_BodyInterface_CreateAndAddSoftBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("const JPH_SoftBodyCreationSettings *")] JPH_SoftBodyCreationSettings* settings, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_RemoveBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_RemoveAndDestroyBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_IsActive(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_IsAdded(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyType JPH_BodyInterface_GetBodyType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCenterOfMassPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_BodyInterface_GetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetMotionType(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_MotionType motionType, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetRestitution([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetRestitution(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetFriction([NativeTypeName("const JPH_BodyInterface *")] JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetFriction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPosition(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionAndRotationWhenChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPositionAndRotation(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetPositionRotationAndVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetCollisionGroup(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* group); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_BodyInterface_GetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetShape(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_NotifyShapeChanged(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* previousCenterOfMass, [NativeTypeName("bool")] byte updateMassProperties, JPH_Activation activationMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_ActivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_DeactivateBody(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_BodyInterface_GetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetObjectLayer(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_ObjectLayer")] uint layer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetWorldTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetCenterOfMassTransform(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_MoveKinematic(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_ApplyBuoyancyImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddLinearVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddLinearAndAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetAngularVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetPointVelocity(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForce(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForce2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* torque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddForceAndTorque(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* force, [NativeTypeName("JPH_Vec3 *")] float3* torque); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddImpulse2(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* impulse, [NativeTypeName("JPH_RVec3 *")] rvec3* point); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_AddAngularImpulse(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Vec3 *")] float3* angularImpulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, JPH_MotionQuality quality); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionQuality JPH_BodyInterface_GetMotionQuality(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_GetInverseInertia(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_BodyInterface_GetGravityFactor(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BodyInterface_GetUseManifoldReduction(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_SetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("uint64_t")] ulong inUserData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_BodyInterface_GetUserData(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_BodyInterface_GetMaterial(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId, [NativeTypeName("JPH_SubShapeID")] uint subShapeID); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyInterface_InvalidateContactCache(JPH_BodyInterface* bodyInterface, [NativeTypeName("JPH_BodyID")] uint bodyId); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_LockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockRead* outLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_UnlockRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockRead* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_LockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("JPH_BodyID")] uint bodyID, JPH_BodyLockWrite* outLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockInterface_UnlockWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, JPH_BodyLockWrite* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyLockMultiRead* JPH_BodyLockInterface_LockMultiRead([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockMultiRead_Destroy(JPH_BodyLockMultiRead* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_BodyLockMultiRead_GetBody(JPH_BodyLockMultiRead* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyLockMultiWrite* JPH_BodyLockInterface_LockMultiWrite([NativeTypeName("const JPH_BodyLockInterface *")] JPH_BodyLockInterface* lockInterface, [NativeTypeName("const JPH_BodyID *")] uint* bodyIDs, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyLockMultiWrite_Destroy(JPH_BodyLockMultiWrite* ioLock); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_BodyLockMultiWrite_GetBody(JPH_BodyLockMultiWrite* ioLock, [NativeTypeName("uint32_t")] uint bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_AllowedDOFs JPH_MotionProperties_GetAllowedDOFs([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetLinearDamping(JPH_MotionProperties* properties, float damping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetLinearDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetAngularDamping(JPH_MotionProperties* properties, float damping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetAngularDamping([NativeTypeName("const JPH_MotionProperties *")] JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetMassProperties(JPH_MotionProperties* properties, JPH_AllowedDOFs allowedDOFs, [NativeTypeName("const JPH_MassProperties *")] JPH_MassProperties* massProperties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotionProperties_GetInverseMassUnchecked(JPH_MotionProperties* properties); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetInverseMass(JPH_MotionProperties* properties, float inverseMass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_GetInverseInertiaDiagonal(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_GetInertiaRotation(JPH_MotionProperties* properties, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_SetInverseInertia(JPH_MotionProperties* properties, [NativeTypeName("JPH_Vec3 *")] float3* diagonal, [NativeTypeName("JPH_Quat *")] quaternion* rot); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotionProperties_ScaleToMass(JPH_MotionProperties* properties, float mass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RayCast_GetPointOnRay([NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RRayCast_GetPointOnRay([NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, float fraction, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_DecomposePrincipalMomentsOfInertia(JPH_MassProperties* properties, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* rotation, [NativeTypeName("JPH_Vec3 *")] float3* diagonal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_ScaleToMass(JPH_MassProperties* properties, float mass); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MassProperties_GetEquivalentSolidBoxSize(float mass, [NativeTypeName("const JPH_Vec3 *")] float3* inertiaDiagonal, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CollideShapeSettings_Init(JPH_CollideShapeSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeCastSettings_Init(JPH_ShapeCastSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("JPH_RayCastBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CastRay2([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_RayCastBodyResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideAABox([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollideSphere([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* center, float radius, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_BroadPhaseQuery_CollidePoint([NativeTypeName("const JPH_BroadPhaseQuery *")] JPH_BroadPhaseQuery* query, [NativeTypeName("const JPH_Vec3 *")] float3* point, [NativeTypeName("JPH_CollideShapeBodyCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, JPH_RayCastResult* hit, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, [NativeTypeName("JPH_CastRayCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastRay3([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* origin, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_RayCastSettings *")] JPH_RayCastSettings* rayCastSettings, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastRayResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_CollidePointCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollidePoint2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollidePointResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CollideShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_Vec3 *")] float3* scale, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* centerOfMassTransform, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CollideShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_NarrowPhaseQuery_CastShape2([NativeTypeName("const JPH_NarrowPhaseQuery *")] JPH_NarrowPhaseQuery* query, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* worldTransform, [NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* settings, [NativeTypeName("JPH_RVec3 *")] rvec3* baseOffset, JPH_CollisionCollectorType collectorType, [NativeTypeName("JPH_CastShapeResultCallback *")] IntPtr callback, void* userData, JPH_BroadPhaseLayerFilter* broadPhaseLayerFilter, JPH_ObjectLayerFilter* objectLayerFilter, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Body_GetID([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyType JPH_Body_GetBodyType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsRigidBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSoftBody([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsActive([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsStatic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsKinematic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_CanBeKinematicOrDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetIsSensor(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsSensor([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetCollideKinematicVsNonDynamic(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetCollideKinematicVsNonDynamic([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetUseManifoldReduction(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReduction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetUseManifoldReductionWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetApplyGyroscopicForce(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetApplyGyroscopicForce([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetEnhancedInternalEdgeRemoval(JPH_Body* body, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemoval([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetEnhancedInternalEdgeRemovalWithBody([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("const JPH_Body *")] JPH_Body* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionType JPH_Body_GetMotionType([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetMotionType(JPH_Body* body, JPH_MotionType motionType); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BroadPhaseLayer")] + public static extern byte JPH_Body_GetBroadPhaseLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Body_GetObjectLayer([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCollisionGroup([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_CollisionGroup* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetCollisionGroup(JPH_Body* body, [NativeTypeName("const JPH_CollisionGroup *")] JPH_CollisionGroup* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_GetAllowSleeping(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAllowSleeping(JPH_Body* body, [NativeTypeName("bool")] byte allowSleeping); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetSleepTimer(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Body_GetFriction([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetFriction(JPH_Body* body, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Body_GetRestitution([NativeTypeName("const JPH_Body *")] JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetRestitution(JPH_Body* body, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetLinearVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetLinearVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetLinearVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAngularVelocity(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAngularVelocity(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetAngularVelocityClamped(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPointVelocityCOM(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* pointRelativeToCOM, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPointVelocity(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddForce(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddForceAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddTorque(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAccumulatedForce(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetAccumulatedTorque(JPH_Body* body, [NativeTypeName("JPH_Vec3 *")] float3* force); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetForce(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetTorque(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_ResetMotion(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetInverseInertia(JPH_Body* body, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddImpulseAtPosition(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* impulse, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_AddAngularImpulse(JPH_Body* body, [NativeTypeName("const JPH_Vec3 *")] float3* angularImpulse); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_MoveKinematic(JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* targetPosition, [NativeTypeName("JPH_Quat *")] quaternion* targetRotation, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_ApplyBuoyancyImpulse(JPH_Body* body, [NativeTypeName("const JPH_RVec3 *")] rvec3* surfacePosition, [NativeTypeName("const JPH_Vec3 *")] float3* surfaceNormal, float buoyancy, float linearDrag, float angularDrag, [NativeTypeName("const JPH_Vec3 *")] float3* fluidVelocity, [NativeTypeName("const JPH_Vec3 *")] float3* gravity, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsInBroadPhase(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Body_IsCollisionCacheInvalid(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_Body_GetShape(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetRotation([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_Quat *")] quaternion* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCenterOfMassPosition([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetInverseCenterOfMassTransform([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldSpaceBounds([NativeTypeName("const JPH_Body *")] JPH_Body* body, JPH_AABox* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_GetWorldSpaceSurfaceNormal([NativeTypeName("const JPH_Body *")] JPH_Body* body, [NativeTypeName("JPH_SubShapeID")] uint subShapeID, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionProperties* JPH_Body_GetMotionProperties(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotionProperties* JPH_Body_GetMotionPropertiesUnchecked(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Body_SetUserData(JPH_Body* body, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_Body_GetUserData(JPH_Body* body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Body* JPH_Body_GetFixedToWorldBody(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerFilter_SetProcs([NativeTypeName("const JPH_BroadPhaseLayerFilter_Procs *")] JPH_BroadPhaseLayerFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BroadPhaseLayerFilter* JPH_BroadPhaseLayerFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BroadPhaseLayerFilter_Destroy(JPH_BroadPhaseLayerFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerFilter_SetProcs([NativeTypeName("const JPH_ObjectLayerFilter_Procs *")] JPH_ObjectLayerFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ObjectLayerFilter* JPH_ObjectLayerFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ObjectLayerFilter_Destroy(JPH_ObjectLayerFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyFilter_SetProcs([NativeTypeName("const JPH_BodyFilter_Procs *")] JPH_BodyFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyFilter* JPH_BodyFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyFilter_Destroy(JPH_BodyFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_SetProcs([NativeTypeName("const JPH_ShapeFilter_Procs *")] JPH_ShapeFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ShapeFilter* JPH_ShapeFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_Destroy(JPH_ShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_ShapeFilter_GetBodyID2(JPH_ShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ShapeFilter_SetBodyID2(JPH_ShapeFilter* filter, [NativeTypeName("JPH_BodyID")] uint id); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SimShapeFilter_SetProcs([NativeTypeName("const JPH_SimShapeFilter_Procs *")] JPH_SimShapeFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_SimShapeFilter* JPH_SimShapeFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_SimShapeFilter_Destroy(JPH_SimShapeFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactListener_SetProcs([NativeTypeName("const JPH_ContactListener_Procs *")] JPH_ContactListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_ContactListener* JPH_ContactListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactListener_Destroy(JPH_ContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyActivationListener_SetProcs([NativeTypeName("const JPH_BodyActivationListener_Procs *")] JPH_BodyActivationListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyActivationListener* JPH_BodyActivationListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyActivationListener_Destroy(JPH_BodyActivationListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyDrawFilter_SetProcs([NativeTypeName("const JPH_BodyDrawFilter_Procs *")] JPH_BodyDrawFilter_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_BodyDrawFilter* JPH_BodyDrawFilter_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_BodyDrawFilter_Destroy(JPH_BodyDrawFilter* filter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceNormal([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactManifold_GetPenetrationDepth([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_ContactManifold_GetSubShapeID2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_ContactManifold_GetPointCount([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn1([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactManifold_GetWorldSpaceContactPointOn2([NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetFriction(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetFriction(JPH_ContactSettings* settings, float friction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetRestitution(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRestitution(JPH_ContactSettings* settings, float restitution); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvMassScale1(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvMassScale1(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvInertiaScale1(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvInertiaScale1(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvMassScale2(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvMassScale2(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_ContactSettings_GetInvInertiaScale2(JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetInvInertiaScale2(JPH_ContactSettings* settings, float scale); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_ContactSettings_GetIsSensor([NativeTypeName("const JPH_ContactSettings *")] JPH_ContactSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetIsSensor(JPH_ContactSettings* settings, [NativeTypeName("bool")] byte sensor); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_GetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRelativeLinearSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_GetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_ContactSettings_SetRelativeAngularSurfaceVelocity(JPH_ContactSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_Destroy(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterBase_GetCosMaxSlopeAngle(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_SetMaxSlopeAngle(JPH_CharacterBase* character, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetUp(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_SetUp(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSlopeTooSteep(JPH_CharacterBase* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Shape *")] + public static extern JPH_Shape* JPH_CharacterBase_GetShape(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_GroundState JPH_CharacterBase_GetGroundState(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterBase_IsSupported(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundPosition(JPH_CharacterBase* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundNormal(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* normal); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterBase_GetGroundVelocity(JPH_CharacterBase* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_PhysicsMaterial *")] + public static extern JPH_PhysicsMaterial* JPH_CharacterBase_GetGroundMaterial(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterBase_GetGroundBodyId(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_CharacterBase_GetGroundSubShapeId(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterBase_GetGroundUserData(JPH_CharacterBase* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterSettings_Init(JPH_CharacterSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Character* JPH_Character_Create([NativeTypeName("const JPH_CharacterSettings *")] JPH_CharacterSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddToPhysicsSystem(JPH_Character* character, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_RemoveFromPhysicsSystem(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_Activate(JPH_Character* character, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_PostSimulation(JPH_Character* character, float maxSeparationDistance, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLinearAndAngularVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* linearVelocity, [NativeTypeName("JPH_Vec3 *")] float3* angularVelocity, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetLinearVelocity(JPH_Character* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddLinearVelocity(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_AddImpulse(JPH_Character* character, [NativeTypeName("const JPH_Vec3 *")] float3* value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Character_GetBodyID([NativeTypeName("const JPH_Character *")] JPH_Character* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetPositionAndRotation(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetPositionAndRotation(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetPosition(JPH_Character* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetRotation(JPH_Character* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetRotation(JPH_Character* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetCenterOfMassPosition(JPH_Character* character, [NativeTypeName("JPH_RVec3 *")] rvec3* result, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_GetWorldTransform(JPH_Character* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_Character_GetLayer([NativeTypeName("const JPH_Character *")] JPH_Character* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetLayer(JPH_Character* character, [NativeTypeName("JPH_ObjectLayer")] uint value, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Character_SetShape(JPH_Character* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtualSettings_Init(JPH_CharacterVirtualSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVirtual* JPH_CharacterVirtual_Create([NativeTypeName("const JPH_CharacterVirtualSettings *")] JPH_CharacterVirtualSettings* settings, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("const JPH_Quat *")] quaternion* rotation, [NativeTypeName("uint64_t")] ulong userData, JPH_PhysicsSystem* system); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_CharacterID")] + public static extern uint JPH_CharacterVirtual_GetID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetListener(JPH_CharacterVirtual* character, JPH_CharacterContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetCharacterVsCharacterCollision(JPH_CharacterVirtual* character, JPH_CharacterVsCharacterCollision* characterVsCharacterCollision); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetLinearVelocity(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetPosition(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetPosition(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetRotation(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetRotation(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Quat *")] quaternion* rotation); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetWorldTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetCenterOfMassTransform(JPH_CharacterVirtual* character, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetMass(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMass(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetMaxStrength(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMaxStrength(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetPenetrationRecoverySpeed(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetPenetrationRecoverySpeed(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_GetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetEnhancedInternalEdgeRemoval(JPH_CharacterVirtual* character, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetCharacterPadding(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetMaxNumHits(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetMaxNumHits(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_CharacterVirtual_GetHitReductionCosMaxAngle(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetHitReductionCosMaxAngle(JPH_CharacterVirtual* character, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_GetMaxHitsExceeded(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetShapeOffset(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint64_t")] + public static extern ulong JPH_CharacterVirtual_GetUserData([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetUserData(JPH_CharacterVirtual* character, [NativeTypeName("uint64_t")] ulong value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_CharacterVirtual_GetInnerBodyID([NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_CancelVelocityTowardsSteepSlopes(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* desiredVelocity, [NativeTypeName("JPH_Vec3 *")] float3* velocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_StartTrackingContactChanges(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_FinishTrackingContactChanges(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_Update(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_ExtendedUpdate(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_ExtendedUpdateSettings *")] JPH_ExtendedUpdateSettings* settings, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_RefreshContacts(JPH_CharacterVirtual* character, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_CanWalkStairs(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* linearVelocity); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_WalkStairs(JPH_CharacterVirtual* character, float deltaTime, [NativeTypeName("const JPH_Vec3 *")] float3* stepUp, [NativeTypeName("const JPH_Vec3 *")] float3* stepForward, [NativeTypeName("const JPH_Vec3 *")] float3* stepForwardTest, [NativeTypeName("const JPH_Vec3 *")] float3* stepDownExtra, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_StickToFloor(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Vec3 *")] float3* stepDown, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_UpdateGroundVelocity(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_SetShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape, float maxPenetrationDepth, [NativeTypeName("JPH_ObjectLayer")] uint layer, JPH_PhysicsSystem* system, [NativeTypeName("const JPH_BodyFilter *")] JPH_BodyFilter* bodyFilter, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_SetInnerBodyShape(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_CharacterVirtual_GetNumActiveContacts(JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVirtual_GetActiveContact(JPH_CharacterVirtual* character, [NativeTypeName("uint32_t")] uint index, JPH_CharacterVirtualContact* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWithBody(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_BodyID")] uint body); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWith(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterID")] uint other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CharacterVirtual_HasCollidedWithCharacter(JPH_CharacterVirtual* character, [NativeTypeName("const JPH_CharacterVirtual *")] JPH_CharacterVirtual* other); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterContactListener_SetProcs([NativeTypeName("const JPH_CharacterContactListener_Procs *")] JPH_CharacterContactListener_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterContactListener* JPH_CharacterContactListener_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterContactListener_Destroy(JPH_CharacterContactListener* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollision_SetProcs([NativeTypeName("const JPH_CharacterVsCharacterCollision_Procs *")] JPH_CharacterVsCharacterCollision_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_CharacterVsCharacterCollision* JPH_CharacterVsCharacterCollision_CreateSimple(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollisionSimple_AddCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollisionSimple_RemoveCharacter(JPH_CharacterVsCharacterCollision* characterVsCharacter, JPH_CharacterVirtual* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_CharacterVsCharacterCollision_Destroy(JPH_CharacterVsCharacterCollision* listener); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CollideShapeVsShape([NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassTransform2, [NativeTypeName("const JPH_CollideShapeSettings *")] JPH_CollideShapeSettings* collideShapeSettings, [NativeTypeName("JPH_CollideShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeLocalSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1InShape2LocalSpace, [NativeTypeName("const JPH_Vec3 *")] float3* scale2, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassTransform1InShape2LocalSpace, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_CollisionDispatch_CastShapeVsShapeWorldSpace([NativeTypeName("const JPH_Vec3 *")] float3* direction, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape1, [NativeTypeName("const JPH_Shape *")] JPH_Shape* shape2, [NativeTypeName("const JPH_Vec3 *")] float3* scale1, [NativeTypeName("const JPH_Vec3 *")] float3* inScale2, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform1, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* centerOfMassWorldTransform2, [NativeTypeName("const JPH_ShapeCastSettings *")] JPH_ShapeCastSettings* shapeCastSettings, [NativeTypeName("JPH_CastShapeCollectorCallback *")] IntPtr callback, void* userData, [NativeTypeName("const JPH_ShapeFilter *")] JPH_ShapeFilter* shapeFilter); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_SetProcs([NativeTypeName("const JPH_DebugRenderer_Procs *")] JPH_DebugRenderer_Procs* procs); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_DebugRenderer* JPH_DebugRenderer_Create(void* userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_Destroy(JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_NextFrame(JPH_DebugRenderer* renderer); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_SetCameraPos(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawLine(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawMarker(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* position, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawArrow(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* from, [NativeTypeName("const JPH_RVec3 *")] rvec3* to, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCoordinateSystem(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawPlane(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* point, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("JPH_Color")] uint color, float size); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, int level); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawWireUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("JPH_Color")] uint color, int level); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawTriangle(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* v1, [NativeTypeName("const JPH_RVec3 *")] rvec3* v2, [NativeTypeName("const JPH_RVec3 *")] rvec3* v3, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawBox(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawBox2(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, [NativeTypeName("const JPH_AABox *")] JPH_AABox* box, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSphere(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawUnitSphere(JPH_DebugRenderer* renderer, [NativeTypeName("JPH_RMatrix4x4")] rmatrix4x4 matrix, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCapsule(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeightOfCylinder, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float halfHeight, float radius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawOpenCone(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* top, [NativeTypeName("const JPH_Vec3 *")] float3* axis, [NativeTypeName("const JPH_Vec3 *")] float3* perpendicular, float halfAngle, float length, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSwingConeLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float swingYHalfAngle, float swingZHalfAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawSwingPyramidLimits(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* matrix, float minSwingYAngle, float maxSwingYAngle, float minSwingZAngle, float maxSwingZAngle, float edgeLength, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawPie(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RVec3 *")] rvec3* center, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* normal, [NativeTypeName("const JPH_Vec3 *")] float3* axis, float minAngle, float maxAngle, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_DebugRenderer_DrawTaperedCylinder(JPH_DebugRenderer* renderer, [NativeTypeName("const JPH_RMatrix4x4 *")] rmatrix4x4* inMatrix, float top, float bottom, float topRadius, float bottomRadius, [NativeTypeName("JPH_Color")] uint color, JPH_DebugRenderer_CastShadow castShadow, JPH_DebugRenderer_DrawMode drawMode); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Skeleton* JPH_Skeleton_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_Destroy(JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint2(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, int parentIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_Skeleton_AddJoint3(JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name, [NativeTypeName("const char *")] sbyte* parentName); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_Skeleton_GetJointCount([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_GetJoint([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, int index, JPH_SkeletonJoint* joint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_Skeleton_GetJointIndex([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton, [NativeTypeName("const char *")] sbyte* name); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Skeleton_CalculateParentJointIndices(JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Skeleton_AreJointsCorrectlyOrdered([NativeTypeName("const JPH_Skeleton *")] JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_RagdollSettings* JPH_RagdollSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_Destroy(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Skeleton *")] + public static extern JPH_Skeleton* JPH_RagdollSettings_GetSkeleton([NativeTypeName("const JPH_RagdollSettings *")] JPH_RagdollSettings* character); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_SetSkeleton(JPH_RagdollSettings* character, JPH_Skeleton* skeleton); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_RagdollSettings_Stabilize(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_DisableParentChildCollisions(JPH_RagdollSettings* settings, [NativeTypeName("const JPH_Matrix4x4 *")] float4x4* jointMatrices, float minSeparationDistance); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_CalculateBodyIndexToConstraintIndex(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int JPH_RagdollSettings_GetConstraintIndexForBodyIndex(JPH_RagdollSettings* settings, int bodyIndex); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_RagdollSettings_CalculateConstraintIndexToBodyIdxPair(JPH_RagdollSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Ragdoll* JPH_RagdollSettings_CreateRagdoll(JPH_RagdollSettings* settings, JPH_PhysicsSystem* system, [NativeTypeName("JPH_CollisionGroupID")] uint collisionGroup, [NativeTypeName("uint64_t")] ulong userData); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_Destroy(JPH_Ragdoll* ragdoll); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_AddToPhysicsSystem(JPH_Ragdoll* ragdoll, JPH_Activation activationMode, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_RemoveFromPhysicsSystem(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_Activate(JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Ragdoll_IsActive([NativeTypeName("const JPH_Ragdoll *")] JPH_Ragdoll* ragdoll, [NativeTypeName("bool")] byte lockBodies); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Ragdoll_ResetWarmStart(JPH_Ragdoll* ragdoll); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_EstimateCollisionResponse([NativeTypeName("const JPH_Body *")] JPH_Body* body1, [NativeTypeName("const JPH_Body *")] JPH_Body* body2, [NativeTypeName("const JPH_ContactManifold *")] JPH_ContactManifold* manifold, float combinedFriction, float combinedRestitution, float minVelocityForRestitution, [NativeTypeName("uint32_t")] uint numIterations, JPH_CollisionEstimationResult* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraintSettings_Init(JPH_VehicleConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleConstraint* JPH_VehicleConstraint_Create(JPH_Body* body, [NativeTypeName("const JPH_VehicleConstraintSettings *")] JPH_VehicleConstraintSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_PhysicsStepListener* JPH_VehicleConstraint_AsPhysicsStepListener(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_SetMaxPitchRollAngle(JPH_VehicleConstraint* constraint, float maxPitchRollAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_SetVehicleCollisionTester(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_OverrideGravity(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_VehicleConstraint_IsGravityOverridden([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetGravityOverride([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_ResetGravityOverride(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetLocalForward([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetLocalUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWorldUp([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_Body *")] + public static extern JPH_Body* JPH_VehicleConstraint_GetVehicleBody([NativeTypeName("const JPH_VehicleConstraint *")] JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleController* JPH_VehicleConstraint_GetController(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleConstraint_GetWheelsCount(JPH_VehicleConstraint* constraint); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Wheel* JPH_VehicleConstraint_GetWheel(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelLocalBasis(JPH_VehicleConstraint* constraint, [NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* outForward, [NativeTypeName("JPH_Vec3 *")] float3* outUp, [NativeTypeName("JPH_Vec3 *")] float3* outRight); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelLocalTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_Matrix4x4 *")] float4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleConstraint_GetWheelWorldTransform(JPH_VehicleConstraint* constraint, [NativeTypeName("uint32_t")] uint wheelIndex, [NativeTypeName("const JPH_Vec3 *")] float3* wheelRight, [NativeTypeName("const JPH_Vec3 *")] float3* wheelUp, [NativeTypeName("JPH_RMatrix4x4 *")] rmatrix4x4* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettings* JPH_WheelSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_Destroy(JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetPosition([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetPosition(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionDirection([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionDirection(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSteeringAxis([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSteeringAxis(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetWheelUp([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWheelUp(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetWheelForward([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWheelForward(JPH_WheelSettings* settings, [NativeTypeName("const JPH_Vec3 *")] float3* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionMinLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionMinLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionMaxLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionMaxLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetSuspensionPreloadLength([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionPreloadLength(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_GetSuspensionSpring([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings, JPH_SpringSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetSuspensionSpring(JPH_WheelSettings* settings, JPH_SpringSettings* springSettings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetRadius([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetRadius(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettings_GetWidth([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetWidth(JPH_WheelSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_WheelSettings_GetEnableSuspensionForcePoint([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettings_SetEnableSuspensionForcePoint(JPH_WheelSettings* settings, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_Wheel* JPH_Wheel_Create([NativeTypeName("const JPH_WheelSettings *")] JPH_WheelSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_Destroy(JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettings *")] + public static extern JPH_WheelSettings* JPH_Wheel_GetSettings([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetAngularVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetAngularVelocity(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetRotationAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetRotationAngle(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSteerAngle([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_SetSteerAngle(JPH_Wheel* wheel, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasContact([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_BodyID")] + public static extern uint JPH_Wheel_GetContactBodyID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_SubShapeID")] + public static extern uint JPH_Wheel_GetContactSubShapeID([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactPosition([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_RVec3 *")] rvec3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactPointVelocity([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactNormal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactLongitudinal([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_Wheel_GetContactLateral([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel, [NativeTypeName("JPH_Vec3 *")] float3* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSuspensionLength([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetSuspensionLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetLongitudinalLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_Wheel_GetLateralLambda([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_Wheel_HasHitHardPoint([NativeTypeName("const JPH_Wheel *")] JPH_Wheel* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleAntiRollBar_Init(JPH_VehicleAntiRollBar* antiRollBar); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleEngineSettings_Init(JPH_VehicleEngineSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleDifferentialSettings_Init(JPH_VehicleDifferentialSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleTransmissionSettings* JPH_VehicleTransmissionSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_Destroy(JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TransmissionMode JPH_VehicleTransmissionSettings_GetMode([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetMode(JPH_VehicleTransmissionSettings* settings, JPH_TransmissionMode value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_VehicleTransmissionSettings_GetReverseGearRatioCount([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetReverseGearRatio([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatio(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("uint32_t")] uint index, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const float *")] + public static extern float* JPH_VehicleTransmissionSettings_GetReverseGearRatios([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetReverseGearRatios(JPH_VehicleTransmissionSettings* settings, [NativeTypeName("const float *")] float* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetSwitchTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetSwitchTime(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetClutchReleaseTime([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetClutchReleaseTime(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetSwitchLatency([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetSwitchLatency(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetShiftUpRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetShiftUpRPM(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetShiftDownRPM([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetShiftDownRPM(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_VehicleTransmissionSettings_GetClutchStrength([NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleTransmissionSettings_SetClutchStrength(JPH_VehicleTransmissionSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleCollisionTester_Destroy(JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("JPH_ObjectLayer")] + public static extern uint JPH_VehicleCollisionTester_GetObjectLayer([NativeTypeName("const JPH_VehicleCollisionTester *")] JPH_VehicleCollisionTester* tester); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleCollisionTester_SetObjectLayer(JPH_VehicleCollisionTester* tester, [NativeTypeName("JPH_ObjectLayer")] uint value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterRay* JPH_VehicleCollisionTesterRay_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterCastSphere* JPH_VehicleCollisionTesterCastSphere_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float radius, [NativeTypeName("const JPH_Vec3 *")] float3* up, float maxSlopeAngle); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_VehicleCollisionTesterCastCylinder* JPH_VehicleCollisionTesterCastCylinder_Create([NativeTypeName("JPH_ObjectLayer")] uint layer, float convexRadiusFraction); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_VehicleControllerSettings_Destroy(JPH_VehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleConstraint *")] + public static extern JPH_VehicleConstraint* JPH_VehicleController_GetConstraint(JPH_VehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettingsWV* JPH_WheelSettingsWV_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetInertia([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetInertia(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetAngularDamping([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetAngularDamping(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxSteerAngle([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxSteerAngle(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxBrakeTorque(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsWV_GetMaxHandBrakeTorque([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsWV_SetMaxHandBrakeTorque(JPH_WheelSettingsWV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelWV* JPH_WheelWV_Create([NativeTypeName("const JPH_WheelSettingsWV *")] JPH_WheelSettingsWV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettingsWV *")] + public static extern JPH_WheelSettingsWV* JPH_WheelWV_GetSettings([NativeTypeName("const JPH_WheelWV *")] JPH_WheelWV* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelWV_ApplyTorque(JPH_WheelWV* wheel, float torque, float deltaTime); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheeledVehicleControllerSettings* JPH_WheeledVehicleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetEngine(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_WheeledVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetTransmission(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("uint32_t")] + public static extern uint JPH_WheeledVehicleControllerSettings_GetDifferentialsCount([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialsCount(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_GetDifferential([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, JPH_VehicleDifferentialSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferential(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("uint32_t")] uint index, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentials(JPH_WheeledVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleDifferentialSettings *")] JPH_VehicleDifferentialSettings* values, [NativeTypeName("uint32_t")] uint count); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleControllerSettings_GetDifferentialLimitedSlipRatio([NativeTypeName("const JPH_WheeledVehicleControllerSettings *")] JPH_WheeledVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleControllerSettings_SetDifferentialLimitedSlipRatio(JPH_WheeledVehicleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetDriverInput(JPH_WheeledVehicleController* controller, float forward, float right, float brake, float handBrake); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetForwardInput(JPH_WheeledVehicleController* controller, float forward); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetForwardInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetRightInput(JPH_WheeledVehicleController* controller, float rightRatio); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetRightInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetBrakeInput(JPH_WheeledVehicleController* controller, float brakeInput); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheeledVehicleController_SetHandBrakeInput(JPH_WheeledVehicleController* controller, float handBrakeInput); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetHandBrakeInput([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheeledVehicleController_GetWheelSpeedAtClutch([NativeTypeName("const JPH_WheeledVehicleController *")] JPH_WheeledVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelSettingsTV* JPH_WheelSettingsTV_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsTV_GetLongitudinalFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsTV_SetLongitudinalFriction(JPH_WheelSettingsTV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_WheelSettingsTV_GetLateralFriction([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_WheelSettingsTV_SetLateralFriction(JPH_WheelSettingsTV* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_WheelTV* JPH_WheelTV_Create([NativeTypeName("const JPH_WheelSettingsTV *")] JPH_WheelSettingsTV* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_WheelSettingsTV *")] + public static extern JPH_WheelSettingsTV* JPH_WheelTV_GetSettings([NativeTypeName("const JPH_WheelTV *")] JPH_WheelTV* wheel); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_TrackedVehicleControllerSettings* JPH_TrackedVehicleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_GetEngine([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings, JPH_VehicleEngineSettings* result); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_SetEngine(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleEngineSettings *")] JPH_VehicleEngineSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("const JPH_VehicleTransmissionSettings *")] + public static extern JPH_VehicleTransmissionSettings* JPH_TrackedVehicleControllerSettings_GetTransmission([NativeTypeName("const JPH_TrackedVehicleControllerSettings *")] JPH_TrackedVehicleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleControllerSettings_SetTransmission(JPH_TrackedVehicleControllerSettings* settings, [NativeTypeName("const JPH_VehicleTransmissionSettings *")] JPH_VehicleTransmissionSettings* value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetDriverInput(JPH_TrackedVehicleController* controller, float forward, float leftRatio, float rightRatio, float brake); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetForwardInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetForwardInput(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetLeftRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetLeftRatio(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetRightRatio([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetRightRatio(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_TrackedVehicleController_GetBrakeInput([NativeTypeName("const JPH_TrackedVehicleController *")] JPH_TrackedVehicleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_TrackedVehicleController_SetBrakeInput(JPH_TrackedVehicleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern JPH_MotorcycleControllerSettings* JPH_MotorcycleControllerSettings_Create(); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetMaxLeanAngle([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetMaxLeanAngle(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringConstant(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringDamping(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleControllerSettings_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleControllerSettings *")] JPH_MotorcycleControllerSettings* settings); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleControllerSettings_SetLeanSmoothingFactor(JPH_MotorcycleControllerSettings* settings, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetWheelBase([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanControllerEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_EnableLeanController(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + [return: NativeTypeName("bool")] + public static extern byte JPH_MotorcycleController_IsLeanSteeringLimitEnabled([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_EnableLeanSteeringLimit(JPH_MotorcycleController* controller, [NativeTypeName("bool")] byte value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringConstant([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringConstant(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringDamping([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringDamping(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficient([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficient(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSpringIntegrationCoefficientDecay([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSpringIntegrationCoefficientDecay(JPH_MotorcycleController* controller, float value); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern float JPH_MotorcycleController_GetLeanSmoothingFactor([NativeTypeName("const JPH_MotorcycleController *")] JPH_MotorcycleController* controller); + + [DllImport("joltc", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void JPH_MotorcycleController_SetLeanSmoothingFactor(JPH_MotorcycleController* controller, float value); + } +} diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Utility.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Utility.cs new file mode 100644 index 0000000..a880b2e --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.Tests/Utility.cs @@ -0,0 +1,74 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Xunit; + +namespace Jolt.SourceGenerator.Tests; + +public static class Utility +{ + public static (GeneratorDriver, CSharpCompilation) CreateDriver(string source, string assemblyName) where TIncrementalGenerator : IIncrementalGenerator, new() + { + var compilation = CSharpCompilation.Create(assemblyName, + new[] { CSharpSyntaxTree.ParseText(source) }, + Basic.Reference.Assemblies.Net70.References.All, + new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); + + var generator = new TIncrementalGenerator(); + var sourceGenerator = generator.AsSourceGenerator(); + + // trackIncrementalGeneratorSteps allows to report info about each step of the generator + GeneratorDriver driver = CSharpGeneratorDriver.Create( + generators: [sourceGenerator], + driverOptions: new GeneratorDriverOptions(default, trackIncrementalGeneratorSteps: true)); + + // Run the generator + driver = driver.RunGenerators(compilation); + + return (driver, compilation); + // Assert the driver doesn't recompute the output + // var result = driver.GetRunResult().Results.Single(); + // var allOutputs = result.TrackedOutputSteps.SelectMany(outputStep => outputStep.Value).SelectMany(output => output.Outputs); + // Assert.Collection(allOutputs, output => Assert.Equal(IncrementalStepRunReason.Cached, output.Reason)); + // + // foreach (var generatedSource in result.GeneratedSources) + // { + // Console.WriteLine(generatedSource.SourceText); + // } + // Assert the driver use the cached result from AssemblyName and Syntax + // var assemblyNameOutputs = result.TrackedSteps["AssemblyName"].Single().Outputs; + // Assert.Collection(assemblyNameOutputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); + // + // var syntaxOutputs = result.TrackedSteps["Syntax"].Single().Outputs; + // Assert.Collection(syntaxOutputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); + } + + public static (GeneratorDriver, CSharpCompilation) AssertCache(GeneratorDriver driver, + CSharpCompilation compilation, params (string stepName, IncrementalStepRunReason reason)[] validations) + { + compilation = compilation.AddSyntaxTrees(CSharpSyntaxTree.ParseText("// dummy")); + driver = driver.RunGenerators(compilation); + + var result = driver.GetRunResult().Results.Single(); + + var allOutputs = result.TrackedOutputSteps.SelectMany(outputStep => outputStep.Value).SelectMany(output => output.Outputs); + Assert.Collection(allOutputs, output => Assert.Equal(IncrementalStepRunReason.Cached, output.Reason)); + + foreach (var (stepName, reason) in validations) + { + var assemblyNameOutputs = result.TrackedSteps[stepName].Single().Outputs; + Assert.Collection(assemblyNameOutputs, output => Assert.Equal(reason, output.Reason)); + } + + // var syntaxOutputs = result.TrackedSteps["Syntax"].Single().Outputs; + // Assert.Collection(syntaxOutputs, output => Assert.Equal(IncrementalStepRunReason.Unchanged, output.Reason)); + + return (driver, compilation); + } + + public static (GeneratorDriver, CSharpCompilation) CreateDriverAndAssertCache(string source, + string assemblyName, params (string stepName, IncrementalStepRunReason reason)[] validations) where TIncrementalGenerator : IIncrementalGenerator, new() + { + var (driver, compilation) = CreateDriver(source, assemblyName); + return AssertCache(driver, compilation, validations); + } +} diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln b/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln index 40e4cb6..49d7e24 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln @@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jolt.SourceGenerator", "Jolt.SourceGenerator.csproj", "{9FEE60F7-5566-4DD1-BAC1-637A78A109D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jolt.SourceGenerator", ".\Jolt.SourceGenerator\Jolt.SourceGenerator.csproj", "{9FEE60F7-5566-4DD1-BAC1-637A78A109D8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jolt.SourceGenerator.Tests", "Jolt.SourceGenerator.Tests\Jolt.SourceGenerator.Tests.csproj", "{9A2527CC-4599-4374-BEFF-DF2630016456}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -18,5 +20,9 @@ Global {9FEE60F7-5566-4DD1-BAC1-637A78A109D8}.Debug|Any CPU.Build.0 = Debug|Any CPU {9FEE60F7-5566-4DD1-BAC1-637A78A109D8}.Release|Any CPU.ActiveCfg = Release|Any CPU {9FEE60F7-5566-4DD1-BAC1-637A78A109D8}.Release|Any CPU.Build.0 = Release|Any CPU + {9A2527CC-4599-4374-BEFF-DF2630016456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A2527CC-4599-4374-BEFF-DF2630016456}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A2527CC-4599-4374-BEFF-DF2630016456}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A2527CC-4599-4374-BEFF-DF2630016456}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln.DotSettings.user b/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln.DotSettings.user new file mode 100644 index 0000000..764fe6e --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator.sln.DotSettings.user @@ -0,0 +1,6 @@ + + <SessionState ContinuousTestingMode="0" IsActive="True" Name="Test1" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>xUnit::9A2527CC-4599-4374-BEFF-DF2630016456::net9.0::Jolt.SourceGenerator.Tests.Tests.Test1</TestId> + </TestAncestor> +</SessionState> \ No newline at end of file diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj b/Jolt.SourceGenerator~/Jolt.SourceGenerator/Jolt.SourceGenerator.csproj similarity index 85% rename from Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj rename to Jolt.SourceGenerator~/Jolt.SourceGenerator/Jolt.SourceGenerator.csproj index 279c372..a20ad80 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator.csproj +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/Jolt.SourceGenerator.csproj @@ -16,13 +16,19 @@ + + + Test\Program.cs + + + diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs new file mode 100644 index 0000000..fc57558 --- /dev/null +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Text; +using System.Threading; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Jolt.SourceGenerator; + +public struct TempStructTypeInfo +{ + public int Index; + public bool IsInstance; +} + +public struct Parameter +{ + public readonly string type; + public readonly string name; + + public Parameter(IParameterSymbol symbol) + { + type = symbol.Type.ToDisplayString(); + name = symbol.Name; + } +} + +public struct Method +{ + public readonly string Name; + public readonly string Call; + public readonly string ReturnType; + public readonly ImmutableArray Parameters; + + public Method(string name, IMethodSymbol symbol) + { + Name = name; + Call = $"{symbol.ContainingType.ToDisplayString()}.{symbol.Name}"; + ReturnType = $"{symbol.ReturnType.ToDisplayString()}"; + Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); + } + + public void Generate(SourceCodeScopeHelper helper) + { + var parameters = string.Join(",", Parameters.Select(x => $"{x.type} {x.name}")); + var header = $"public unsafe static {ReturnType} {Name}({parameters})"; + using (var method = helper.Scope(header)) + { + var parametersNameOnly = string.Join(",", Parameters.Select(x => x.name)); + if (ReturnType == "void") + { + method.AppendLine($"{Call}({parametersNameOnly});"); + } + else + { + method.AppendLine($"return {Call}({parametersNameOnly});"); + } + } + } + + public void GenerateInstance(SourceCodeScopeHelper helper) + { + var parameters = string.Join(",", Parameters.Select(x => $"{x.type} {x.name}")); + var header = $"public unsafe static {ReturnType} {Name}({parameters})"; + using (var method = helper.Scope(header)) + { + var parametersNameOnly = string.Join(",", Parameters.Select(x => x.name)); + if (ReturnType == "void") + { + method.AppendLine($"{Call}({parametersNameOnly});"); + } + else + { + method.AppendLine($"return {Call}({parametersNameOnly});"); + } + } + } +} + +public struct Struct(bool isInstance, string typeName, ImmutableArray methods) +{ + public readonly bool IsInstance = isInstance; + public readonly string TypeName = typeName; + public readonly ImmutableArray Methods = methods; + + public void Generate(SourceCodeScopeHelper helper) + { + if (IsInstance) + { + using (var cls = helper.Scope($"public struct {TypeName}")) + { + cls.AppendLine($"internal unsafe JPH_{TypeName}* Ptr;"); + foreach (var methodDef in Methods) + { + cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); + methodDef.GenerateInstance(cls); + } + } + } + else + { + using (var cls = helper.Scope($"public static class {TypeName}")) + { + foreach (var methodDef in Methods) + { + cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); + methodDef.Generate(cls); + } + } + } + } +} + +[Generator] +public class JoltGenerator : IIncrementalGenerator +{ + [ThreadStatic] + public static StringBuilder m_StringBuilder; + + public void Initialize(IncrementalGeneratorInitializationContext context) + { + var nativeStructs = context.SyntaxProvider.CreateSyntaxProvider( + static (x, token) => x is StructDeclarationSyntax s && s.Identifier.ValueText.StartsWith("JPH_"), + static (x, token) => + { + var symbol = x.SemanticModel.GetDeclaredSymbol(x.Node); + return symbol?.ToDisplayString(); + } + ) + .Where(x => x is not null) + .Collect(); + + var structs = context.SyntaxProvider.CreateSyntaxProvider + ( + static (x, token) => x is ClassDeclarationSyntax { Identifier.ValueText: "UnsafeBindings" }, + static (x, token) => Parse(x, token) + ) + .SelectMany((x, token) => x); + + context.RegisterSourceOutput(structs, (gctx, source) => + { + var helper = new SourceCodeHelper(m_StringBuilder ??= new()); + helper.Using("Unity"); + helper.Using("Unity.Mathematics"); + helper.Using("Unity.Collections.LowLevel.Unsafe"); + try + { + using (var @namespace = helper.Scope("namespace Jolt")) + { + source.Generate(@namespace); + } + + gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); + } + catch (Exception e) + { + gctx.AddSource($"{source.TypeName}.g.cs", $"/* {e}*/"); + } + finally + { + m_StringBuilder.Clear(); + } + }); + } + + static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + static readonly Dictionary k_Mappings = new Dictionary() + { + { "ObjectVsBroadPhaseLayerFilterTable", "ObjectVsBroadPhaseLayerFilter" }, + { "ObjectLayerPairFilterMask", "ObjectLayerPairFilte" }, + }; + private static IEnumerable Parse(GeneratorSyntaxContext ctx, CancellationToken token) + { + var symbol = ctx.SemanticModel.GetDeclaredSymbol(ctx.Node, token) as INamedTypeSymbol; + if (symbol is null) yield break; + + List> methodDefines = new(); + Dictionary type2Info = new(); + + var methodSymbols = symbol.GetMembers().OfType(); + foreach (var method in methodSymbols) + { + var splits = method.Name.Split('_'); + + // throw new Exception(string.Join("--", splits)); + string typeName; + string methodName; + bool isInstance = false; + + if (splits.Length == 3) + { + typeName = splits[1]; + methodName = splits[2]; + isInstance = true; + } + else if (splits.Length == 2) + { + typeName = "JotCore"; + methodName = splits[1]; + } + else + { + throw new Exception("Unknown type"); + } + + if (k_Forbiddens.Contains(typeName)) continue; + + if (!type2Info.TryGetValue(typeName, out var tempInfo)) + { + var index = methodDefines.Count; + type2Info[typeName] = tempInfo = new TempStructTypeInfo() + { + Index = index, IsInstance = isInstance + }; + methodDefines.Add(new List()); + } + + var methods = methodDefines[tempInfo.Index]; + methods.Add(new Method(methodName, method)); + } + + foreach (var kv in type2Info) + { + var info = kv.Value; + var methods = methodDefines[info.Index]; + + yield return new Struct(info.IsInstance, kv.Key, methods.ToImmutableArray()); + } + } +} diff --git a/Jolt.SourceGenerator~/SourceCodeHelper.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/SourceCodeHelper.cs similarity index 100% rename from Jolt.SourceGenerator~/SourceCodeHelper.cs rename to Jolt.SourceGenerator~/Jolt.SourceGenerator/SourceCodeHelper.cs diff --git a/Jolt.SourceGenerator~/Jolt/Jolt.SourceGenerator.dll b/Jolt.SourceGenerator~/Jolt/Jolt.SourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..39d027b4a92a17701f8f452b1a7f6aeac3b204a0 GIT binary patch literal 14848 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 literal 0 HcmV?d00001 diff --git a/Jolt.SourceGenerator~/JoltGenerator.cs b/Jolt.SourceGenerator~/JoltGenerator.cs deleted file mode 100644 index e804723..0000000 --- a/Jolt.SourceGenerator~/JoltGenerator.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Text; -using System.Threading; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Syntax; - -namespace Jolt.SourceGenerator; - -public struct Parameter -{ - public readonly string type; - public readonly string name; - - public Parameter(IParameterSymbol symbol) - { - // throw new NotImplementedException(); - } -} - -public struct Method -{ - public readonly string Name; - public readonly string Call; - public readonly string ReturnType; - public readonly ImmutableArray Parameters; - - public Method(string name, IMethodSymbol symbol) - { - Name = name; - Call = $"{symbol.ContainingType.ToDisplayString()}.{symbol.Name}"; - ReturnType = $"{symbol.ReturnType.ToDisplayString()}"; - Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); - } -} - -public struct Struct(string typeName, ImmutableArray methods) -{ - public readonly string TypeName = typeName; - public readonly ImmutableArray Methods = methods; - - public void Generate(SourceCodeScopeHelper helper) - { - foreach (var method in Methods) - { - helper.AppendLine($"//{method.Name} -> {method.Call}"); - } - } -} - -[Generator] -public class JoltGenerator : IIncrementalGenerator -{ - [ThreadStatic] - public static StringBuilder m_StringBuilder; - - public void Initialize(IncrementalGeneratorInitializationContext context) - { - var structs = context.SyntaxProvider.CreateSyntaxProvider - ( - static (x, token) => x is ClassDeclarationSyntax { Identifier.ValueText: "UnsafeBindings" }, - static (x, token) => parse(x, token) - ) - .SelectMany((x, token) => x); - - context.RegisterSourceOutput(structs, (gctx, source) => - { - var helper = new SourceCodeHelper(m_StringBuilder ??= new()); - try - { - using (var @namespace = helper.Scope("namespace Jolt")) - { - source.Generate(@namespace); - } - - gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); - } - catch (Exception e) - { - gctx.AddSource($"{source.TypeName}.g.cs", $"/* {e}*/"); - } - finally - { - m_StringBuilder.Clear(); - } - }); - } - - private static IEnumerable parse(GeneratorSyntaxContext ctx, CancellationToken token) - { - var symbol = ctx.SemanticModel.GetDeclaredSymbol(ctx.Node, token) as INamedTypeSymbol; - if (symbol is null) yield break; - - List> methodDefines = new(); - Dictionary type2Index = new(); - - var methodSymbols = symbol.GetMembers().OfType(); - foreach (var method in methodSymbols) - { - var splits = method.Name.Split('_'); - - // throw new Exception(string.Join("--", splits)); - string typeName; - string methodName; - - if (splits.Length == 3) - { - typeName = splits[1]; - methodName = splits[2]; - } - else if (splits.Length == 2) - { - typeName = "JotCore"; - methodName = splits[1]; - } - else - { - throw new Exception("Unknown type"); - } - - if (!type2Index.TryGetValue(typeName, out var index)) - { - index = methodDefines.Count; - type2Index[typeName] = index; - methodDefines.Add(new List()); - } - - var methods = methodDefines[index]; - methods.Add(new Method(methodName, method)); - } - - foreach (var kv in type2Index) - { - var methods = methodDefines[kv.Value]; - - yield return new Struct(kv.Key, methods.ToImmutableArray()); - } - } -} diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index 81a6573ad574633390e3793bfca84376340d7d07..f9cc1a28094aea272a4678ee4a365be926f6f79e 100644 GIT binary patch literal 15360 zcmeHueRLdGmFIo0s;j%JrIxB?%XVzbZOd}nlGV|N?bwdvSe9g4j^!`Oi4&a2t?rWD zajQ$IYS|V-jzS2Kon*jg86bQNBwmIkEVImEGLT_d5)xRl3uls?Lw0gV0-j+B9Pb-c(_crwyYeey?{`-YpU8X33D-I9X2z4*OtI*clB0Igoh&Bv#bn?9q2#!e zv(vS;=IX%ofqtUBLZkL4kDV*`_Cs2gjEN4S_23vj_x3}$C-FIk4^h3srSCU0*nf3> z8W4QGG&*)atMb3Odq6S^mjS!`897Gu6Ar}X*DO&Dc;7idG<>=2?dT*?q)HwEy}OD| zm+Uho(8sy}AX8%v{0612B*bagbF-k7Z^wY}KsVx3b#2FVrCqz=K#_f=S$x>m7JRC% z?L<4ONQG|UxZ+~pB!y_Wo#;$6kx<+}9yH0+5+bv;e81DD<)Vk+v}kG6J~0E+dh3>e zuU$^U?`kQgL~lJSHRl>wUEnMQoIy(H;4EW2%yPKd(4o^i19zo1gV5_zca~Qgx#)F5 zS8Y;F+%W2Etf*+Tv>R*O5VU4YUzCLC>|)?8?Tgl&T?FKkfyfx%N(fqJS(1X)wiH}$ zn~8yhBTG9%v=&_avs^egA*We#7D1`DgY-8%0N7zk3d3wmwSYF4KeSl|%0;t@M_U%j zX?Ew)mc{P%im^ma^WYwBxyHRgF_s#Swk&gRVm!457GiZGydZ^f88y`oAb!;jps%t6 zESYnl*6+~mg~8Odu(xhSLdt0lm+CO;4zeT#NeVMyyxNnHOUphFDUaYYtFzC(i%X*H zF1Pbt^czMJGKCl$FZ28ftWin#(x;LF!~5NFL;_R~0|PD(gC%pr_A9m z$i25Ba6b=JEh9CP@?C5*g=sWnZCweGY6Dh-7EeGeqSDpPbbJv3Hb4BrMoIWYUlN}A?T|?PiU$$OP}iv_+{Pc(G)n9?!NJAB%%4;wUWT> zNm@*~nGk1DM*K`bl|gC1@C`2wS<5U-&SC{t zixCsUyH1H&l0qGCJDZ%ZgD4nYr_y0b3e~91tP{rBmGkxBf#G#4J(i?U5ZhXBUvY`M zH(KNjR)yZ8&0vk{T!=S7v-O3_BK_Y8EDDSJrn)b78wAr!+~w+ijoZohS*%CBbrrJ5 zV&s&Z=DP~AgGz2{3OcAs=9<>gK)MSpHD?oefnb|2(DX(RRmN!D273wEK{ht9*)Dk& z)y_rSjpRJS44e|w?*}hvQq8>^U~0v(P`WfQsgq*aJE9B z@sco&_BNkW#b0!rb0fsD@Cq{>3a_Z`))&>Z$;O(9X{=jY)_$Ar)yUWQihdZ@v~HBs z3()U^O9H)eJ!7Bt;EpM@FlZLaxIVLx@1dDS-1K#IGKHdLU~TCt0u|Cdi4gcKIn7NL z9Z@Y?_xRoTOb-&yI`k#g7Dx3}HmUhRWf?m6{V2<-g8n<&;^Ahr9`bwB^q@aAg~8Ym zLEoktce`lCGeUWKn?J^KSFWRGlLxGpu|KK>Dj==3Clp)_B{Y-7?E$3Jb+R@jJ&xkVcGu zvI>8y3J*z|SdhZ}7_mATPN57NC`!UFN_9e4W!Po8E=tn;PCm+ zctn7r6+5x;x_Efe4c`$&jpi#Cagz&u2i}EA(^EU)h4j%~j80>c^we&klc=4dCej{8 zyDxD&Z-6~!54=6VY9r3gxZz2mr_gzuGsskE)64L~3OW0jGAu)F5Eng!=wh$BV&sz! z&IV>fxUs>s!hf1y(rsDcMIUR3SmDJVYltptFxyr#e{px6+k>#P0ODv{%smLw!2E|MVV$NVy>sD<` zL(Cb5qTj|l4Ai-$LR+zE)^~0N$BJ5pht3S=2vZ>k`Dkug{MK7fDC=3?>GX^ri}P+a2;S&r{2Lxo!_ffH`hx;y#&d=LFp)zta^U9ws|r1 zJk!iJ7b%mA%vaZx%?HNsfO`9f{WNJbIbrZzG+tJRsTv~|{xrMNdX0A{`g~`XPd;d(52$kO!#W|5K_0KT)V)|v zbDFD!?~chvKmE+MaHD#pNOyO1 zcj8&cRkHy2K?s`9VjQ^hr+KL4=8MNY*7(&Dq5^`@e0Yd**q30ssCn1nfj-AxbkO?pi~ zgW{X_KLaGbtX!=rvY%0Ao!9}M~;#%@x((*F$j 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 ZWRLBp!6M{e+Lc&1w!rZxk(}Z0{|gOVwZs4b delta 3230 zcmb_edstIP7C$o~$<2d+fPe}TNeCdC2hW6xB2QoVLPbQXNw^Ur7z{yWwGF{nb$2Ux z)ldC&vAC;MOSP-Dc8iaGty}5Z>S}$|ZhdT5zq(cX`Pizh?YC!wXxiQVZ|}{SncvKr zbI!~;x#xUX@%8l9bnhD?0L{w)8-oC}fa6k+yJp^;1{^{c&fyO2z9_bM0)w*nmyZ>?CSvF(L*f#Z(8yTaFE610uxQEkF7T2MW$pHwC^N~W4^hgGz z1ON%X0Of7(#`Wog1IEQPqER4iyBU|o*y4~-8%U8DLm1Lh9JK<4 z*7oiq@IXu82PB$6K!zvic?i@eFr`8i4fe7#a(E7cFMAdv$pUZ)VtD{A4!~^hP$UJe zqe(ad*n*@)EP9F~5v%Yzda(>~$aCz4SeyubJ^|5)`vhQSKv)1~O2Y$iFye>+oQb$^ z0A7wbG5|CFsAt#!{;B)vhX-XRYHK>aBJjs`=V_-VF^Nccb0Y0K#oamXIzrddETjj$G;*y>qGY z{Djd>m#@8%yH)g&s^sWMcfLfv=Iz%f&uTp0cBJsYA@%zC*C!vY{$$awFY6U~8x_~4 zFFUk*`@kK$>OOkp8Fj=~-8Id4Wj=_fHt_BSNp(#fzOn+By|Ip;=V_1>*LX%X+En#! zmy@@9hUPWeY_+^f*e1>QhK_O7dW!jZyxZz=x%Ku2r2%h56& zzw_*hCF*_mzISd-I$yf#jFP*5@ar1)+eO-R%OU>=4gooS~dXEYlWC`B? zl+hBdJ|UCqAMLKn?wb19p!ZJRUHxNW`B|AWvRze1Z^{39rPEh^8^fn_?fYXyrqC7N z{t%HrVYTPN!O0aVd7Vk}mWv(IyTB&Rcos$%e0f+L^iU zc<|;wp1QS;8#nju@I97+m#%7KKWVpC*8TXa@-5v{2F6VL(sf!CHfYvn_v`7Et@lUt z`|YCrGsc#_TH>g@Ym)tQME!sg=c)xlXyKkOPrfo^t7F5*MdxoHc<103pS99=jytx$ zci@{%`)gXecIOta&ghhX=h|`Z;nosw`!&y@xOL;Nok`x|E4g{v`eLhfW6sf&J0`e7 z*6dyQaMA;nZ{Onhs@?#N&t4pF@W-y9Cw2|bV%N|UyM~{~u3=(ND64xy*)Y*+pKG1N zHyG+%>=EWDLx@3WQ|g4T6#c!ae3~sYmA6`LX_=`Go=-EUI;!j@hsB(ko|Va)>^5tb z&1kY12FDNizuMud(K}tWLY-0;Wnlj^{dlXVW&!`Qp|-|mz!eX(aSrJ#JXY%TsV1}D zoKlr#tKuzLe453ak!5#SjShQ;k$0q;tyXKQ*}_|R-o_g(CZQy_R9?mYG(+oa8yke3 z!3l#iQuwq?KE29hH9O2z4x7sN9RFIAZq(dMb?WAK5>F6RIXX6-W9C9itCxtu; z@sLR|rA(xd0faV5aH;tmQ6O7NvRDch3MLdwhT^=Ga@c@g$-dii;5ppjB9KKn4cm&T zesPiv2sbH6q99&HU;LnxVPYcArkp!MqQcxj1~-XF2&l05s3*;z6JKBAbCP5dLYnuI z<{QK(mH5UH_WKQK0n!pnmH}CIRYo77(}tGi+XCb2=y^_p_+6F_C+J&84Ahu zcO*|U6Vp2>lo80G+yE8`1PnBi>1y!HM(3bbR$~6+5i|b};I&%%pOxnb`6|zpoWPU-lb`f)tP; zX^QD#L}hr5eIS-%Wu>E7&!O!EG(lK-4WU@HAk+dKnS|vrmP@F{D+OsmIYHZWSfEh6 z;<~3cCQ>d2h6TY8R;S`V4(LL41Q2C8daOPXFX0au Date: Thu, 4 Sep 2025 14:19:30 +0800 Subject: [PATCH 05/18] temp --- Jolt.Internal/JoltNativeInternalUtility.cs | 17 ++ .../Unity.InternalAPIEngineBridge.013.asmdef | 15 +- .../Jolt.SourceGenerator/JoltGenerator.cs | 236 +++++++++++------- Jolt/Jolt.SourceGenerator.dll | Bin 15360 -> 18944 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 11716 -> 12224 bytes 5 files changed, 175 insertions(+), 93 deletions(-) diff --git a/Jolt.Internal/JoltNativeInternalUtility.cs b/Jolt.Internal/JoltNativeInternalUtility.cs index b7091db..2ae103e 100644 --- a/Jolt.Internal/JoltNativeInternalUtility.cs +++ b/Jolt.Internal/JoltNativeInternalUtility.cs @@ -1,4 +1,6 @@ using System; +using System.Runtime.CompilerServices; +using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; @@ -15,5 +17,20 @@ public static void LeakErase(IntPtr handle) { UnsafeUtility.LeakErase(handle, LeakCategory.Persistent); } + + unsafe struct UnsafeHeader where TPtr : unmanaged + { + public TPtr** Ptr; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + internal AtomicSafetyHandle m_Safety; +#endif + } + + public static unsafe void Initialize(ref TStruct t, TPtr* ptr) where TStruct : unmanaged where TPtr : unmanaged + { + ref var header = ref UnsafeUtility.As>(ref t); + header.Ptr = (TPtr**)UnsafeUtility.MallocTracked(sizeof(TPtr*), UnsafeUtility.AlignOf(), Allocator.Persistent, 1); + *header.Ptr = ptr; + } } } diff --git a/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef index b21fb59..56c5f4a 100644 --- a/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef +++ b/Jolt.Internal/Unity.InternalAPIEngineBridge.013.asmdef @@ -1,3 +1,16 @@ { - "name": "Unity.InternalAPIEngineBridge.013" + "name": "Unity.InternalAPIEngineBridge.013", + "rootNamespace": "", + "references": [ + "GUID:2665a8d13d1b3f18800f46e256720795" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index fc57558..820b0a9 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -9,17 +10,11 @@ namespace Jolt.SourceGenerator; -public struct TempStructTypeInfo -{ - public int Index; - public bool IsInstance; -} - public struct Parameter { public readonly string type; public readonly string name; - + public Parameter(IParameterSymbol symbol) { type = symbol.Type.ToDisplayString(); @@ -27,123 +22,182 @@ public Parameter(IParameterSymbol symbol) } } -public struct Method +public readonly struct MethodDefine { + public readonly bool IsInstance; public readonly string Name; public readonly string Call; public readonly string ReturnType; public readonly ImmutableArray Parameters; - public Method(string name, IMethodSymbol symbol) + public MethodDefine(bool isInstance, string name, IMethodSymbol symbol) { + IsInstance = isInstance; Name = name; Call = $"{symbol.ContainingType.ToDisplayString()}.{symbol.Name}"; - ReturnType = $"{symbol.ReturnType.ToDisplayString()}"; + ReturnType = symbol.ReturnType.ToDisplayString(); Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); } public void Generate(SourceCodeScopeHelper helper) { - var parameters = string.Join(",", Parameters.Select(x => $"{x.type} {x.name}")); - var header = $"public unsafe static {ReturnType} {Name}({parameters})"; + var isCreateByReturn = false; + var returnType = ReturnType; + if (ReturnType.EndsWith("*") && ReturnType.StartsWith(Context.k_Prefix)) + { + returnType = ReturnType.Substring(Context.k_Prefix.Length, ReturnType.Length - Context.k_Prefix.Length - 1); + isCreateByReturn = true; + } + + var parameters = IsInstance + ? string.Join(", ", Parameters.Skip(1).Select(x => $"{x.type} {x.name}")) + : string.Join(", ", Parameters.Select(x => $"{x.type} {x.name}")); + var parametersNameOnly = IsInstance + ? string.Join(", ", Parameters.Skip(1).Select(x => x.name)) + : string.Join(", ", Parameters.Select(x => x.name)); + var header = IsInstance + ? $"public unsafe {returnType} {Name}({parameters})" + : $"public unsafe static {returnType} {Name}({parameters})"; + using (var method = helper.Scope(header)) { - var parametersNameOnly = string.Join(",", Parameters.Select(x => x.name)); + var dotSplit = IsInstance && !string.IsNullOrEmpty(parametersNameOnly) ? ", " : string.Empty; if (ReturnType == "void") { - method.AppendLine($"{Call}({parametersNameOnly});"); + method.AppendLine($"{Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); } else { - method.AppendLine($"return {Call}({parametersNameOnly});"); + if (isCreateByReturn) + { + method.AppendLine( + $"var value = {Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); + method.AppendLine( + $"var ptr = ({ReturnType}*)UnsafeUtility.MallocTracked(sizeof(void**), UnsafeUtility.AlignOf(), Allocator.Persistent, 1);"); + method.AppendLine($"*ptr = value;"); + method.AppendLine($"return new {returnType}() {{ Ptr = ptr }};"); + } + else + { + method.AppendLine($"return {Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); + } } } } +} + +public readonly struct Struct(string typeName, ImmutableArray methods, bool isInstance) +{ + public readonly string TypeName = typeName; + public readonly ImmutableArray Methods = methods; + public readonly bool IsInstance = isInstance; - public void GenerateInstance(SourceCodeScopeHelper helper) + public void Generate(SourceCodeScopeHelper helper) { - var parameters = string.Join(",", Parameters.Select(x => $"{x.type} {x.name}")); - var header = $"public unsafe static {ReturnType} {Name}({parameters})"; - using (var method = helper.Scope(header)) + var funcHeader = IsInstance + ? $"[NativeContainer] public struct {TypeName}" + : $"public static class {TypeName}"; + using (var cls = helper.Scope(funcHeader)) { - var parametersNameOnly = string.Join(",", Parameters.Select(x => x.name)); - if (ReturnType == "void") + if (IsInstance) { - method.AppendLine($"{Call}({parametersNameOnly});"); + cls.AppendLine($"[NativeDisableUnsafePtrRestriction] internal unsafe JPH_{TypeName}** Ptr;"); } - else + + foreach (var methodDef in Methods) { - method.AppendLine($"return {Call}({parametersNameOnly});"); + cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); + methodDef.Generate(cls); } } } } -public struct Struct(bool isInstance, string typeName, ImmutableArray methods) +public class Context : IEnumerable { - public readonly bool IsInstance = isInstance; - public readonly string TypeName = typeName; - public readonly ImmutableArray Methods = methods; + public const string k_Prefix = "Jolt.JPH_"; - public void Generate(SourceCodeScopeHelper helper) + List<(bool isInstance, List methodDefines)> m_Entries = new(); + Dictionary m_Type2Info = new(); + + public int GetOrAddType(string typeName) { - if (IsInstance) + if (!m_Type2Info.TryGetValue(typeName, out var index)) { - using (var cls = helper.Scope($"public struct {TypeName}")) - { - cls.AppendLine($"internal unsafe JPH_{TypeName}* Ptr;"); - foreach (var methodDef in Methods) - { - cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); - methodDef.GenerateInstance(cls); - } - } + index = m_Entries.Count; + m_Type2Info[typeName] = index; + m_Entries.Add((false, new List())); + } + + return index; + } + + public void AddMethodByTypeIndex(int typeIndex, MethodDefine methodDefine) + { + var methods = m_Entries[typeIndex].methodDefines; + methods.Add(methodDefine); + + if (methodDefine.IsInstance) + { + MarkIsInstance(typeIndex); } - else + } + + public void MarkIsInstance(int typeIndex) + { + var entry = m_Entries[typeIndex]; + entry.isInstance = true; + m_Entries[typeIndex] = entry; + } + + public IEnumerator GetEnumerator() + { + foreach (var kv in m_Type2Info) { - using (var cls = helper.Scope($"public static class {TypeName}")) - { - foreach (var methodDef in Methods) - { - cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); - methodDef.Generate(cls); - } - } + var info = kv.Value; + var entry = m_Entries[info]; + var methods = entry.methodDefines; + + var isInstance = entry.isInstance | methods.Any(x => x.IsInstance || x.ReturnType.Contains($"{kv.Key}*")); + yield return new Struct(kv.Key, methods.ToImmutableArray(), isInstance); } } + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } [Generator] public class JoltGenerator : IIncrementalGenerator { - [ThreadStatic] - public static StringBuilder m_StringBuilder; - + [ThreadStatic] public static StringBuilder m_StringBuilder; + public void Initialize(IncrementalGeneratorInitializationContext context) { var nativeStructs = context.SyntaxProvider.CreateSyntaxProvider( - static (x, token) => x is StructDeclarationSyntax s && s.Identifier.ValueText.StartsWith("JPH_"), - static (x, token) => - { - var symbol = x.SemanticModel.GetDeclaredSymbol(x.Node); - return symbol?.ToDisplayString(); - } - ) - .Where(x => x is not null) - .Collect(); - + static (x, token) => x is StructDeclarationSyntax s && s.Identifier.ValueText.StartsWith("JPH_"), + static (x, token) => + { + var symbol = x.SemanticModel.GetDeclaredSymbol(x.Node); + return symbol?.ToDisplayString(); + } + ) + .Where(x => x is not null) + .Collect(); + var structs = context.SyntaxProvider.CreateSyntaxProvider - ( - static (x, token) => x is ClassDeclarationSyntax { Identifier.ValueText: "UnsafeBindings" }, - static (x, token) => Parse(x, token) - ) - .SelectMany((x, token) => x); - + ( + static (x, token) => x is ClassDeclarationSyntax { Identifier.ValueText: "UnsafeBindings" }, + static (x, token) => Parse(x, token) + ) + .SelectMany((x, token) => x); + context.RegisterSourceOutput(structs, (gctx, source) => { var helper = new SourceCodeHelper(m_StringBuilder ??= new()); + helper.Using("System"); helper.Using("Unity"); helper.Using("Unity.Mathematics"); + helper.Using("Unity.Collections"); helper.Using("Unity.Collections.LowLevel.Unsafe"); try { @@ -151,7 +205,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context) { source.Generate(@namespace); } - + gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); } catch (Exception e) @@ -165,19 +219,20 @@ public void Initialize(IncrementalGeneratorInitializationContext context) }); } - static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + static readonly Dictionary k_Mappings = new Dictionary() { { "ObjectVsBroadPhaseLayerFilterTable", "ObjectVsBroadPhaseLayerFilter" }, { "ObjectLayerPairFilterMask", "ObjectLayerPairFilte" }, }; + private static IEnumerable Parse(GeneratorSyntaxContext ctx, CancellationToken token) { var symbol = ctx.SemanticModel.GetDeclaredSymbol(ctx.Node, token) as INamedTypeSymbol; if (symbol is null) yield break; - - List> methodDefines = new(); - Dictionary type2Info = new(); + + var context = new Context(); var methodSymbols = symbol.GetMembers().OfType(); foreach (var method in methodSymbols) @@ -187,13 +242,11 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, Cancellatio // throw new Exception(string.Join("--", splits)); string typeName; string methodName; - bool isInstance = false; - + if (splits.Length == 3) { typeName = splits[1]; methodName = splits[2]; - isInstance = true; } else if (splits.Length == 2) { @@ -206,27 +259,26 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, Cancellatio } if (k_Forbiddens.Contains(typeName)) continue; - - if (!type2Info.TryGetValue(typeName, out var tempInfo)) + + var typeIndex = context.GetOrAddType(typeName); + var isInstance = method.Parameters.Length > 0 && + method.Parameters[0].Type.ToDisplayString().Contains($"JPH_{typeName}*"); + var methodDef = new MethodDefine(isInstance, methodName, method); + + if (methodDef.ReturnType.StartsWith(Context.k_Prefix) && methodDef.ReturnType.EndsWith("*")) { - var index = methodDefines.Count; - type2Info[typeName] = tempInfo = new TempStructTypeInfo() - { - Index = index, IsInstance = isInstance - }; - methodDefines.Add(new List()); + var returnTypeName = methodDef.ReturnType.Substring(Context.k_Prefix.Length, + methodDef.ReturnType.Length - Context.k_Prefix.Length - 1); + var returnTypeIndex = context.GetOrAddType(returnTypeName); + context.MarkIsInstance(returnTypeIndex); } - - var methods = methodDefines[tempInfo.Index]; - methods.Add(new Method(methodName, method)); + + context.AddMethodByTypeIndex(typeIndex, methodDef); } - - foreach (var kv in type2Info) + + foreach (var s in context) { - var info = kv.Value; - var methods = methodDefines[info.Index]; - - yield return new Struct(info.IsInstance, kv.Key, methods.ToImmutableArray()); + yield return s; } } } diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index f9cc1a28094aea272a4678ee4a365be926f6f79e..b427f4cefe54a063f8df5d20ca0de65ad7e4620f 100644 GIT binary patch literal 18944 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%0Ao!9}M~;#%@x((*F$j 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 E8%gHEu>b%7 From 3df6287a871bb332724d82493c8b8ec408aba376 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Thu, 4 Sep 2025 14:41:14 +0800 Subject: [PATCH 06/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 9 +++++++-- Jolt/Jolt.SourceGenerator.dll | Bin 18944 -> 18944 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12224 -> 12244 bytes 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index 820b0a9..262f155 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -42,6 +42,8 @@ public MethodDefine(bool isInstance, string name, IMethodSymbol symbol) public void Generate(SourceCodeScopeHelper helper) { var isCreateByReturn = false; + var isDisposing = Name == "Destroy"; + var returnType = ReturnType; if (ReturnType.EndsWith("*") && ReturnType.StartsWith(Context.k_Prefix)) { @@ -94,14 +96,17 @@ public readonly struct Struct(string typeName, ImmutableArray meth public void Generate(SourceCodeScopeHelper helper) { + if (IsInstance) + helper.AppendLine("[NativeContainer]"); var funcHeader = IsInstance - ? $"[NativeContainer] public struct {TypeName}" + ? $"public struct {TypeName}" : $"public static class {TypeName}"; using (var cls = helper.Scope(funcHeader)) { if (IsInstance) { - cls.AppendLine($"[NativeDisableUnsafePtrRestriction] internal unsafe JPH_{TypeName}** Ptr;"); + cls.AppendLine("[NativeDisableUnsafePtrRestriction]"); + cls.AppendLine($"internal unsafe JPH_{TypeName}** Ptr;"); } foreach (var methodDef in Methods) diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index b427f4cefe54a063f8df5d20ca0de65ad7e4620f..725360ca3da623a5e9a4352544a2acf06555d72c 100644 GIT binary patch delta 1360 zcmX|=U2GIp6vzK}c4yXZx82zmOIx9|3v_q8ZCz$(cZLV8ZCa^Dpbr`~Hhk>Y18J}} zF)=C4F4+W)AhMZ05sZd3fV2T&Q3wyv2kX@?NwQq6>A!WJ&@b(6RY>HARqhUZ3vA(9M4HQwP>nS0+ z3Gm1DsclZDuQL>FVp9{#*|fgkjQHO6zJTd#)hoVBq2liw-S!7?&U0AxV^g=Fe;XXN z9^;b!R2Uj?kkcLZP2Ewo5l1=I*y*~b(1_zAvsL$NM2j->V{MKye~!2{D_HHFSA+P6 z(*d3t!ctL)tu6k`Y6yiWZ%^VCqBjL0Td$)DA4qzv>1f6YNyk0c)m8XnW#0|81z$>S z#-pJX->;BP6o?6fHxwOh_%K%F_{5@;L_0naBDMcPZN~$dTK4>+b|BCrHqLl-bRfDy z8rES{l3R2ga+2In>%=}uL9d1|u5+qzyJ6hwf!kjkMi{rbSVlK~Q^Tl9dIopZ^>`@h z7|{lV;_k>Sy*?dojv9~TctE>sitW34}HrHy>D zU?Wlx_2wMi{_BiG#J)jIyt-d*?ZRZa(8^r`6{%^86G@u$l$8=d=r6@Z=)1tgA#WIwem=PnLBonjU8kYA9-^h_CG3*H?ud(KfKE7EyhB8dKb`dtx+~uudxstw)V3^WA6aO z*hZ@Yj`=QNb_2kya=P2@Q%-o-ofH!M%HC?g+fg?{iNng?DuOU&``WdUHY;8c;LUYx zWRI1vc-Nc2&|&*_#ZUgiZ|j}%B}{rgAu2Hjkg5dWq($F!E5lI zpc!_oausUuft%T&`Bb8BWac6DFlC+(IW@~z={?SCaa~YJWco2(aK(mt-&yX*mau3~ z;sv7ZE+Jc`p$>0LdaP<#fs&+eJ-_p(@Y&Murg%M$N^R7mq5<|2X+*PX1` z!)2G07@9B^dD8wmZ^8|iQ1sm9Etr)w>e0}GWo;r8PK(tDOLB^?Mvo-tuLZDEQmt1- z5Jv=+h20<~+u-zf4(LM);cfAb)Imh?Ox@U^%p=_{gjSdg@nJ>cu{ucRwPtzhj> zOsEKO2Nli+N8pXJzq@t?{jCVR!oQ4eD_+F4}(7?PT$Dn}$x*9;*b!gyy zfv!UX2V4>k4SXUs$Dx7GrM83afq{En_SNQFE3M1%HkPtZ#)C=#)?)k__Kww<*g{}u z5_c5sobCO!bocV+@-JVfUpYUuVD}l1)lNN^>^74d2jkIbHWSO{lG(UvB;)yR-7p7D zQ_l~YF}*9F0}>3nHM!|&dt%cti(U(+?}5GCr;vk-H1*vyQ;r{ZFnX<^>0GWk(&kcD zG!@jY+&>h4wx6didKWYEUv5>bThq}p#hT)V*c4Sl@oPW!%FFAPu-Id%+C z5Gb#yXTA3B^eJZPO2Dq^>Gf>akwcPB+@y6Q1`$V;o-8tm(duYf+B50+lJw3~rcSX* enI=6t?Kn}4qArSa)^}So${yYJZ<}Lfz2bk8_zq$K diff --git a/Jolt/Jolt.SourceGenerator.pdb b/Jolt/Jolt.SourceGenerator.pdb index 912634f5d96da68161c9e30a24f52289127b4730..7f4d96f60463d6189354dddb722fcbb199b3c191 100644 GIT binary patch delta 1137 zcmXZb3rtg27y#h^+_un`3x)8QSYWlKEgR)kpyf3bP%s8?0XBIBc@;L^GfaYnQNmC( z5DHg8L|MGR5FKu#8;%f>jR-mc2`-`|AV$Fr+1$g8)JWW4+)ciF&i|kPoSd8dckJL# z2MuKsl@dS}SyY-00I_{1OTyQ+`|A{*J@*oE7E+%@2Wcg}Io?q>5ap zF+l?t1eo55^QQk}A;!myzfzAlF&k0}lN?0A=+48@0;$0kBEbQaxOsu21Rj+0l(=%j z@-Wtxkv4o6P?^LMYflqCyl1qxR8W#5^82Q>nSTYQ8Nr3l;6Q`4oi-JJ5xLVvc(TXi z=c5V66hQ~6S&ld5%Vl>0zDk%MANbKkhppR$233y=e}A)a(L1`!qqdaC1sG_(y^rH( zJMpZ3bbOYPE)M)QlvZq4aGsUyO?xhJ8@zv0V~BI__;x)mtn&Hn$n9BUv+Ulyp}05s zWt8aLS+!|(W19YRb1l9*{jcg@1{-4oBbwUmCX}~oa_t@+FCU9*^wrtir5X-p?wauU z(r|fYQ*cKRBH<(@3Hxmm+Bo?gQHC?(!WR48L0O`?-^JKbAMkxkm#+8U*kp(%VI-250o}U?ofVM-e*`+Kk;o!`s8Ke@;{?XFBDhv zL!Q~C)Hv%ttvY4ZeM8(abto*&I;TkYs-&>XNqtl0Ir!j0RMHKX64Ca(_46MrDpqGN zIp$YQ4LePIeyim4i@J)j@%LTD>>@ukB8^MQ=-pSB=)$af%hH1D1Cqwhn1zLm6#M+M zhllQd?Oq?+y?JeZr6OZ$wJbPfy642hiG4qe9{-CXQVSa)h`3dJ z&~W)Q1XIA2tKO1{u?aPLy}%Z>nbU6g|9~F_PGD_ODaJnY(>F5LRASQ3EU0`P`+co2 z7hA=%0u>hVK;Wh~G7>MRHy-l*xm+%ommRGHmO!XV4ql6i^IE5SBE$KZSAdnii`nBH zs`*Ai3jwtHD~>L(g939uTkA)hEpd0WeoSGGMf&fzMxq~ArqTfK=qH&W?+o&karC)_ GU-us|##ko+ delta 1125 zcmXZadrVVT90%~_VPZBu!GPIsyA{i|Sj3VH|zzmv4OXwf8hB#99hVF-eLFx`O1yt#V zK5X!T1|GKEr`7yldtzPWT%aDY(v~F@Hd%Dpk#>CVr3wfKv!4?#Y;*c@q}0YW%Sc?>4)Ng!GXK%Ni<2yA<%{gczU6IM3HyF# ze_7M+%;t3xo2%X@{YrMg)lR{19lK#yPydgVmoje~>#U!JDsRU5v1&eI(*S)f6FXUI z(b$siSN)Up=EaYbi_a@{%1l4Ht?Fk$YW1qL@ zLe6Zris|88dNZXrGdRqYSk`W(O@sTr6SWP#D?JxjW;&y7N)%rFl-K&fWO1$B^7y;o zW)7F|etF(;=HO75D{rnXy`Z(~)@7$va6Iabig%|fJr|UJizl<@$CBCFrKf$C$tv?- z;^y79^3=in8yCB3nV@RjuX;{|Hlp7FfoGx@WxcGuUw&D8O` zqf|ysyjhcIh>M9S)W;SYHHC5J1WlYNUX@@rn9VAa!5phnn~ct#f-G@R5^>mnY6u7Ukz&;qn!PTkuA*s6-+Hb6n#6B#`!6UZXN0=X?^T-oM_WJq%0Kj@z9{>OV From 4898708d2124a637ce4cbed22299034be4f41640 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Fri, 5 Sep 2025 09:47:40 +0800 Subject: [PATCH 07/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 48 +++++++++++++++++-- Jolt/Bindings/NativeTypeNameAttribute.cs | 1 + 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index 262f155..4505e73 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -99,7 +99,7 @@ public void Generate(SourceCodeScopeHelper helper) if (IsInstance) helper.AppendLine("[NativeContainer]"); var funcHeader = IsInstance - ? $"public struct {TypeName}" + ? $"public partial struct {TypeName}" : $"public static class {TypeName}"; using (var cls = helper.Scope(funcHeader)) { @@ -224,12 +224,50 @@ public void Initialize(IncrementalGeneratorInitializationContext context) }); } - static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + public static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; - static readonly Dictionary k_Mappings = new Dictionary() + public static readonly Dictionary k_Extends = new Dictionary() { - { "ObjectVsBroadPhaseLayerFilterTable", "ObjectVsBroadPhaseLayerFilter" }, - { "ObjectLayerPairFilterMask", "ObjectLayerPairFilte" }, + { "ConvexShape", "Shape" }, + { "ConvexShapeSettings", "ShapeSettings" }, + { "BoxShape", "ConvexShape" }, + { "BoxShapeSettings", "ConvexShapeSettings" }, + { "SphereShape", "ConvexShape" }, + { "SphereShapeSettings", "ConvexShapeSettings" }, + { "PlaneShape", "Shape" }, + { "PlaneShapeSettings", "ShapeSettings" }, + { "TriangleShape", "ConvexShape" }, + { "TriangleShapeSettings", "ConvexShapeSettings" }, + { "CapsuleShape", "ConvexShape" }, + { "CapsuleShapeSettings", "ConvexShapeSettings" }, + { "CylinderShape", "ConvexShape" }, + { "CylinderShapeSettings", "ConvexShapeSettings" }, + { "TaperedCylinderShape", "ConvexShape" }, + { "TaperedCylinderShapeSettings", "ConvexShapeSettings" }, + { "ConvexHullShape", "ConvexShape" }, + { "ConvexHullShapeSettings", "ConvexShapeSettings" }, + { "MeshShape", "Shape" }, + { "MeshShapeSettings", "ShapeSettings" }, + { "HeightFieldShape", "Shape" }, + { "HeightFieldShapeSettings", "ShapeSettings" }, + { "TaperedCapsuleShape", "ConvexShape" }, + { "TaperedCapsuleShapeSettings", "ConvexShapeSettings" }, + { "CompoundShape", "Shape" }, + { "CompoundShapeSettings", "ShapeSettings" }, + { "StaticCompoundShape", "CompoundShape" }, + { "StaticCompoundShapeSettings", "CompoundShapeSettings" }, + { "MutableCompoundShape", "CompoundShape" }, + { "MutableCompoundShapeSettings", "CompoundShapeSettings" }, + { "DecoratedShape", "Shape" }, + { "DecoratedShapeSettings", "ShapeSettings" }, + { "RotatedTranslatedShape", "DecoratedShape" }, + { "RotatedTranslatedShapeSettings", "DecoratedShapeSettings" }, + { "ScaledShape", "DecoratedShape" }, + { "ScaledShapeSettings", "DecoratedShapeSettings" }, + { "OffsetCenterOfMassShape", "DecoratedShape" }, + { "OffsetCenterOfMassShapeSettings", "DecoratedShapeSettings" }, + { "EmptyShape", "Shape" }, + { "EmptyShapeSettings", "ShapeSettings" }, }; private static IEnumerable Parse(GeneratorSyntaxContext ctx, CancellationToken token) diff --git a/Jolt/Bindings/NativeTypeNameAttribute.cs b/Jolt/Bindings/NativeTypeNameAttribute.cs index a7432a2..5ce0815 100644 --- a/Jolt/Bindings/NativeTypeNameAttribute.cs +++ b/Jolt/Bindings/NativeTypeNameAttribute.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; namespace Jolt { From 536bd6fdf4236b73d1325ecf628695288faa9fdd Mon Sep 17 00:00:00 2001 From: mooooooi Date: Sun, 7 Sep 2025 00:11:51 +0800 Subject: [PATCH 08/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 87 ++++++++++++------ Jolt/Jolt.SourceGenerator.dll | Bin 18944 -> 21504 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12244 -> 12616 bytes 3 files changed, 58 insertions(+), 29 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index 4505e73..abcfd61 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -39,7 +39,7 @@ public MethodDefine(bool isInstance, string name, IMethodSymbol symbol) Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); } - public void Generate(SourceCodeScopeHelper helper) + public void Generate(SourceCodeScopeHelper helper, bool isSuper) { var isCreateByReturn = false; var isDisposing = Name == "Destroy"; @@ -63,17 +63,27 @@ public void Generate(SourceCodeScopeHelper helper) using (var method = helper.Scope(header)) { + var ptrExpression = string.Empty; + if (IsInstance && !isSuper) + { + ptrExpression = "*Ptr"; + } + else if (IsInstance && isSuper) + { + ptrExpression = $"({Parameters[0].type})*Ptr"; + } var dotSplit = IsInstance && !string.IsNullOrEmpty(parametersNameOnly) ? ", " : string.Empty; + if (ReturnType == "void") { - method.AppendLine($"{Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); + method.AppendLine($"{Call}({(ptrExpression)}{dotSplit}{parametersNameOnly});"); } else { if (isCreateByReturn) { method.AppendLine( - $"var value = {Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); + $"var value = {Call}({ptrExpression}{dotSplit}{parametersNameOnly});"); method.AppendLine( $"var ptr = ({ReturnType}*)UnsafeUtility.MallocTracked(sizeof(void**), UnsafeUtility.AlignOf(), Allocator.Persistent, 1);"); method.AppendLine($"*ptr = value;"); @@ -81,7 +91,7 @@ public void Generate(SourceCodeScopeHelper helper) } else { - method.AppendLine($"return {Call}({(IsInstance ? "*Ptr" : string.Empty)}{dotSplit}{parametersNameOnly});"); + method.AppendLine($"return {Call}({ptrExpression}{dotSplit}{parametersNameOnly});"); } } } @@ -94,16 +104,18 @@ public readonly struct Struct(string typeName, ImmutableArray meth public readonly ImmutableArray Methods = methods; public readonly bool IsInstance = isInstance; - public void Generate(SourceCodeScopeHelper helper) + public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) { - if (IsInstance) + var isSuper = !string.IsNullOrEmpty(superTypeName); + + if (IsInstance && !isSuper) helper.AppendLine("[NativeContainer]"); var funcHeader = IsInstance - ? $"public partial struct {TypeName}" + ? $"public partial struct {superTypeName ?? TypeName}" : $"public static class {TypeName}"; using (var cls = helper.Scope(funcHeader)) { - if (IsInstance) + if (IsInstance && !isSuper) { cls.AppendLine("[NativeDisableUnsafePtrRestriction]"); cls.AppendLine($"internal unsafe JPH_{TypeName}** Ptr;"); @@ -111,8 +123,9 @@ public void Generate(SourceCodeScopeHelper helper) foreach (var methodDef in Methods) { + if (!methodDef.IsInstance && isSuper) continue; cls.AppendLine($"//{methodDef.Name} -> {methodDef.Call}"); - methodDef.Generate(cls); + methodDef.Generate(cls, isSuper); } } } @@ -196,30 +209,46 @@ public void Initialize(IncrementalGeneratorInitializationContext context) ) .SelectMany((x, token) => x); - context.RegisterSourceOutput(structs, (gctx, source) => + context.RegisterSourceOutput(structs.Collect(), (gctx, sources) => { - var helper = new SourceCodeHelper(m_StringBuilder ??= new()); - helper.Using("System"); - helper.Using("Unity"); - helper.Using("Unity.Mathematics"); - helper.Using("Unity.Collections"); - helper.Using("Unity.Collections.LowLevel.Unsafe"); - try + var sourceLookup = sources.ToDictionary(x => x.TypeName); + foreach (var source in sources) { - using (var @namespace = helper.Scope("namespace Jolt")) + var helper = new SourceCodeHelper(m_StringBuilder ??= new()); + helper.Using("System"); + helper.Using("Unity"); + helper.Using("Unity.Mathematics"); + helper.Using("Unity.Collections"); + helper.Using("Unity.Collections.LowLevel.Unsafe"); + try { - source.Generate(@namespace); + using (var @namespace = helper.Scope("namespace Jolt")) + { + source.Generate(@namespace, null); + + var typeName = source.TypeName; + while (k_Extends.TryGetValue(typeName, out var superTypeName)) + { + if (sourceLookup.TryGetValue(superTypeName, out var superStruct)) + { + @namespace.AppendLine($"//{typeName} extends {superTypeName}"); + superStruct.Generate(@namespace, source.TypeName); + } + + typeName = superTypeName; + } + } + + gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); + } + catch (Exception e) + { + gctx.AddSource($"{source.TypeName}.g.cs", $"/* {e}*/"); + } + finally + { + m_StringBuilder.Clear(); } - - gctx.AddSource($"{source.TypeName}.g.cs", m_StringBuilder.ToString()); - } - catch (Exception e) - { - gctx.AddSource($"{source.TypeName}.g.cs", $"/* {e}*/"); - } - finally - { - m_StringBuilder.Clear(); } }); } diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index 725360ca3da623a5e9a4352544a2acf06555d72c..38cfa28a6deb3da7637bf6f1f282683e5cd67603 100644 GIT binary patch literal 21504 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 diff --git a/Jolt/Jolt.SourceGenerator.pdb b/Jolt/Jolt.SourceGenerator.pdb index 7f4d96f60463d6189354dddb722fcbb199b3c191..9177a33b8dc5e49bbbe183b2696ddd425050badb 100644 GIT binary patch delta 3566 zcmb`JdvsGp9>;(8_U6?`+Dco}rnI4t)Y3Gsh9+rk>4UdWd4m*Jlk~O?eWWHS5Lifx zx+u#c5an==2yS;lkVVnTisB1V9?QB_*hNJJAGnGFuE^0v&$|1aB<)nL9Ioz5SSbgKg0PIZ^Q{qTefsW^hQ)4*I>l9Rb2~RY@cuE}lD^{)u#ir6I^P1C=t-fP}9_h@SUYhQgmYh~BK#toX>v9L{nYM>NoB_x9y zHXa(8ISL8%8S8{)W^TMtXlJDxpc^4LMSLROf})Rt-b4Ha;`tm$-5gJ|d5$`HKHA7> z!>l<^5l54XIqHD^1*uCoYKK-s+e*+F$_yj@7IZ$w@x1R#cv6<~q=5<{JyZ$RLldBx zPzTftZGpB!JE6VM)6l_EGO?EMaP)2|M;}2KpnpK$md5jch{f@=To0c$2974^IhqbF zgxt_#$PX=tGBC#Rha*iHs}Q||H-zs>B1*=%$IZ&#E zuO>JJ_L)czCO8$m6=^obX(*qTsNV=ygVk{k6LTy5rwl3vXMoca71ZEN3A35JLBee6 zM@TpaerAC)67`wGITC&m%U~ovFK)*~V?C1Q#|$FYV6KEU;5-SZgS9{7d<)621XkB;gEjv4pe0B@$-#QVBD=UczT(m~~1l{2ZKwQq1}YLK&SxD90jY&$qE~2SRLn2$SelgaZCCR&o(S zIkg~E&^1E;O6mphv9C%ZHCmO!FJ``iP#LSBA{)}lgl!C)5$h&3=9U_h#C8w%&u1h$ z#()=N@X#&$kgQS}VjN9akQo@kEKG$!-z1g6m0hwj%9qoNiX|xg8*Veg`}jLJHaBl` zO4?r%%~6>20bjr0BT|nT?DVy@xOznLi@|<>@0?Jd7{fq+pXiUyQy5$Ng8m81`ut)b z;Pv&AH_+@CT|u!aG%HqtyuIx{iZ?gS=j-b4qxSw@&t%cnCi~#L~VRHzrODC+pIU_?K$h*b2)9&$q}<-U)bzx6DNzT zccUlp-)$Vzb=jI;cy?=DLs##yy&o+6+uP+jU+cR=CH3a{&s|x1BKmxi&%IbNOY9b1 zf#?oZgELF&!$9gl#(-v^Ojqw5e@%ZTXHuy3!RZFK(dUv&!~dg^)kfX!f^Y1b)>&p!3c zl!2}l4NpDXka6V8(Aq=MqUmRBSMRTEs+^N0cz<2+>f!dPDLK^#pQ?TGynfqF z%RhU+qJYrVUy}JFS8DHg1EPs66J+iyBpPo$r?(F3Q*&QF9pSMfU-&6YM<*l_# z*F8DDrD@N$kKeO|yDTZ1?TN5WaAAPLo;p9yVvM-*S7Cw>w{8rNk zi~XBZau4mzyt{eShsXAnG*8&K=y}tpzU`(b3U3)+|Fvvj--@EP>+7(nW<`-HwnRozfmnWO8CR*S>vsA#jh+eD{bta3WW+CA+qbGv7( zS!}mDTrQW@;S`;s=oZaROVqCpj~QDbR#l6(HjB&A?r3Xw;}cQSRc*FeY-61sr`>63 zvsYO?X3LN^eNBFDkQ-dV4X)<~cXNYBxWSX$;8||)OYV2_=)nqIW`temMj2E*;ZB-K z`9k#X73Ja4!U_dxd2FR41tqpSp7I1fnT$fXh;9=?1(Yk`igk;i#4#qLY$eIL$Yw#= z$PHu&lusoBw%4Y)q>xDws2qEcb0nrh%WjplLxmMqu6&Wv8fc6Xrun7~1IVmBZ!s26mWaIUFpK z*ThJUtq4>V8EUF$R}VdUB2Tjm YX(7!UFssT4)sisXH!9fTsWxr<4?~W+bN~PV delta 3119 zcmbW3dsI}%9mjw7vb*fE%S#@DJY8TxSzy^+_5q5BZxmxi z`OW-(b7$txopV)xS=wcG=oLh1&k@B16KObGJ1_;q2NWgh3G>$k(H37w8P~KO-N{ar6|&la=Ra2G5HVxr9#U zE>Fu*R2oMn=n(WfNRiHw7Aj7MGqhLKENv2 zC!oAFz#-s`C>xO2UyC zXEZo0(4P%BR>DibBk_8}b}TaX9>qPbAYu;VB^(DHCE;*z!V{b*VGZm_5-tEIOSlc3 z@`w>1Z%UN6OXtab!fVC2i0H;Yf8k{a+X3vl?v+E>09y}&6BP>2lL}MjWG!mTs z1nVWt+UGpMc@oZs-6-L2B+Ned4FL`(u9GSOO^_WOMg-Q3?dw8tRDj2TizLiG?{N}l z?Z-=)EorfY*;hY7!uNa()a_1kqtHBbO~uhz%@trwU`q4Vj+&EvjxJx0J|Up^Ae4Z zTt-)eGBGTVJQJ49!K=`ACATXI*$RFc$F|fAIBd65l*XL*xrwzEN?X2H|i z+$i1;&dsiEnba&eJwj>wTz@6iHoBY0-P%|^U2wXDW?KFzs~208W5pxN0X09RFnCUL z(+Z*5BkoqU>q8uzOp`FyG-IhJb#=xkL$@w`uNu0bI^1n9=+f@i3^n|!bV6dt&VyN> zZkQ{Ughc14A9wJ+nQFdwr=hfWr{`w2>_Jh_*0O_P7YZkD4@zzno^h91F3%TV2$^Y# z{He!X@AuySt_@A)%PV>}@4e>U)a?E1-|U-{6CzHJ%=vD?1g@|1)0~c)BJVE-M5TIP z(B40g_?kMS^GO%ak4U{fd#ENO?XvkdbFZB4`Cv#h?siy_ZO!qJf2C|0%$>SFYi*NU zM%1(8Vp&jrMBknD$4?K4+QFW0-mYwjT=9x8b$aE!)a2ez-nVp>r|hbPTDm)ICSYWn&s%LjEg2Ywk-)6xHKY~O1iHoo*=UE9giPbVe#29=8^R?7G^ z&E)s4Y3iIGU)QcU)04WTd)n2jOBO}d>|6ErM{lODFFNq>MCX+oZAQ3;REdJ$hx^m%HzuJ>D8llDEXlU|3wYe*r>ODCtmx~uwa^B$(uZEVms;w5I zU~=0`W{cV8HoJu?!R$5~3#s3Wi9P64K#d_rP_?3hz+7l2v-@8TRauc}SVp6W5^oW67WM_5A)ucxw zIjNGpM^$a|(pYMaSA^l@SzgTyB!d*iDKkMyS#*S5!_h4x;`y=W|?cFbK$}6(IrPGAq7VUi}CXq(7S->U4dn`T}uBUoW z>KKQ6Px*7sdpdJ5;*a;94HZKT$t7Ww$mRvX{ck)~hP#R%@S+@9WlHTZ#wnDz^YQJt Vh4Ss*x7Z~og`W0)Ep{7v{s&N0W*h(j From 88ecd0703d0761877d2eb4978a720bef1ee47782 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Wed, 10 Sep 2025 14:17:55 +0800 Subject: [PATCH 09/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 51 ++++++++++++------ Jolt/Jolt.SourceGenerator.dll | Bin 21504 -> 22528 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12616 -> 12644 bytes 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index abcfd61..00175a0 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -22,7 +22,7 @@ public Parameter(IParameterSymbol symbol) } } -public readonly struct MethodDefine +public readonly struct MethodDefinition { public readonly bool IsInstance; public readonly string Name; @@ -30,7 +30,7 @@ public readonly struct MethodDefine public readonly string ReturnType; public readonly ImmutableArray Parameters; - public MethodDefine(bool isInstance, string name, IMethodSymbol symbol) + public MethodDefinition(bool isInstance, string name, IMethodSymbol symbol) { IsInstance = isInstance; Name = name; @@ -98,10 +98,10 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) } } -public readonly struct Struct(string typeName, ImmutableArray methods, bool isInstance) +public readonly struct StructDefinition(string typeName, ImmutableArray methods, bool isInstance) { public readonly string TypeName = typeName; - public readonly ImmutableArray Methods = methods; + public readonly ImmutableArray Methods = methods; public readonly bool IsInstance = isInstance; public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) @@ -119,6 +119,14 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) { cls.AppendLine("[NativeDisableUnsafePtrRestriction]"); cls.AppendLine($"internal unsafe JPH_{TypeName}** Ptr;"); + cls.AppendLine(); + + cls.AppendLine($"public unsafe bool IsCreated => Ptr != null;"); + + using (var func = cls.Scope($"public unsafe JPH_{TypeName}* ToUnsafePtr()")) + { + func.AppendLine($"return *Ptr;"); + } } foreach (var methodDef in Methods) @@ -131,11 +139,11 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) } } -public class Context : IEnumerable +public class Context : IEnumerable { public const string k_Prefix = "Jolt.JPH_"; - List<(bool isInstance, List methodDefines)> m_Entries = new(); + List<(bool isInstance, List methodDefines)> m_Entries = new(); Dictionary m_Type2Info = new(); public int GetOrAddType(string typeName) @@ -144,18 +152,18 @@ public int GetOrAddType(string typeName) { index = m_Entries.Count; m_Type2Info[typeName] = index; - m_Entries.Add((false, new List())); + m_Entries.Add((false, new List())); } return index; } - public void AddMethodByTypeIndex(int typeIndex, MethodDefine methodDefine) + public void AddMethodByTypeIndex(int typeIndex, MethodDefinition methodDefinition) { var methods = m_Entries[typeIndex].methodDefines; - methods.Add(methodDefine); + methods.Add(methodDefinition); - if (methodDefine.IsInstance) + if (methodDefinition.IsInstance) { MarkIsInstance(typeIndex); } @@ -168,7 +176,7 @@ public void MarkIsInstance(int typeIndex) m_Entries[typeIndex] = entry; } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { foreach (var kv in m_Type2Info) { @@ -177,7 +185,7 @@ public IEnumerator GetEnumerator() var methods = entry.methodDefines; var isInstance = entry.isInstance | methods.Any(x => x.IsInstance || x.ReturnType.Contains($"{kv.Key}*")); - yield return new Struct(kv.Key, methods.ToImmutableArray(), isInstance); + yield return new StructDefinition(kv.Key, methods.ToImmutableArray(), isInstance); } } @@ -255,6 +263,18 @@ public void Initialize(IncrementalGeneratorInitializationContext context) public static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + public static readonly Dictionary k_Mappings = new() + { + { "ObjectLayerPairFilterTable", "ObjectLayerPairFilter" }, + { "ObjectLayerPairFilterMask", "ObjectLayerPairFilter" }, + + { "ObjectVsBroadPhaseLayerFilterTable", "ObjectVsBroadPhaseLayerFilter" }, + { "ObjectVsBroadPhaseLayerFilterMask", "ObjectVsBroadPhaseLayerFilter" }, + + { "BroadPhaseLayerInterfaceTable", "BroadPhaseLayerInterface" }, + { "BroadPhaseLayerInterfaceMask", "BroadPhaseLayerInterface" }, + }; + public static readonly Dictionary k_Extends = new Dictionary() { { "ConvexShape", "Shape" }, @@ -299,7 +319,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context) { "EmptyShapeSettings", "ShapeSettings" }, }; - private static IEnumerable Parse(GeneratorSyntaxContext ctx, CancellationToken token) + private static IEnumerable Parse(GeneratorSyntaxContext ctx, CancellationToken token) { var symbol = ctx.SemanticModel.GetDeclaredSymbol(ctx.Node, token) as INamedTypeSymbol; if (symbol is null) yield break; @@ -322,7 +342,7 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, Cancellatio } else if (splits.Length == 2) { - typeName = "JotCore"; + typeName = "JoltCore"; methodName = splits[1]; } else @@ -331,11 +351,12 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, Cancellatio } if (k_Forbiddens.Contains(typeName)) continue; + typeName = k_Mappings.TryGetValue(typeName, out var replaced) ? replaced : typeName; var typeIndex = context.GetOrAddType(typeName); var isInstance = method.Parameters.Length > 0 && method.Parameters[0].Type.ToDisplayString().Contains($"JPH_{typeName}*"); - var methodDef = new MethodDefine(isInstance, methodName, method); + var methodDef = new MethodDefinition(isInstance, methodName, method); if (methodDef.ReturnType.StartsWith(Context.k_Prefix) && methodDef.ReturnType.EndsWith("*")) { diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index 38cfa28a6deb3da7637bf6f1f282683e5cd67603..0516d9398b3ced8f9bbeeb7493b3fd1609b5ffb0 100644 GIT binary patch delta 8376 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 S)dmf&cj$*B#R4Ho7xRB}T34O` delta 3072 zcmb`Jc~DeG9>;%gn1kUMKskm(K#m~_%*6mRBFLelMp+e&2WFEw9_PRyAd0Tepk_^6 z`5GzCUaB;{R>j1a8wB`g|?-jGqmYJ z`7`LIm;39Urbx&?RYGbg0n$L3PysXsngUfp4bWz2JG2w(f(}53Q%T2qLgMIhDn~b< zJJ9#gPpSR&KYR23vRs2Pt1~znqv2>0G#j!(wNMkZ5DLYV^(T(hY3u>PA#u7Nqb>+@ z9f(*{Q10+?5O@p9Y{rA(4+gVT1gXF(AG2OVM4Su`1&8?jDsY&H*+L9@&Tblliowq- zC=zkP!J)nmBH@n|@i8o86xMUVkKI9P5wrfHMXUzLh&Tis`;4*BtRn7N1)B}Rpq>ZF z2FHtdJ~%d+d<%=4yH7yV^`*KH#xDI=SaU=p{!I$piC~zJaAFJ1|2CoOV`ks#l zzm4+CK8_(bN8NxIeHF22a1v#UkK@3s^E7ZF0uBMQ#Ad8S#F-f304KmF^Kk;&&jsh> zG3HMMF9e%>tZ}2l>V^IWFMzLt*_p-C8i*qvRzlZc{U`@sDIG;wh7XHKPVKM?lA)gH zJjBs{SP5N*l~N-tk>2Ya@3r58{m_be-8+!U=pw8fyOgD$y!IVf99yt{^a-pK9~o;o z2UbpHunKwt>rV}^67O62kqW)ay~9$_L$8;$SCR=ffN%=ooMBOdyu(t_D7O9~-fuqC z7Z?+sjM+n2_9o$}Y_s5>0vj?EQy7k=kkXHSX&B0GSsFaY6s>6cCbtRp4aut%ucgUU9nYR%f%G>iL#xmxCIt^?Y-q)y`A*_X;B?q$u0tWz(Dare=9{ zO+9|f(JuSEdcL8hSzcPxGH#wt*sE-Ft8~OERO$q6{@6K9o)w942VXs7ExMoa<#!d% zR+V;ZTtWV~FB=EN?73>$b3eGWcW}9DUXz_KaXI*Lyt9#S(%PGU*~i($I#cn{54YqO z)-{~%x<32wpASoPRb1{)DbUaO^TYY)g(H40TdiU$@8qq`!rK9bmT>VH+Jo9d+tux9 zi3OI?Pc)YzOWP_oPRg*EuW8SnzI4LBv*OOlaBY1_*J9819w91li{zn1ct0@J{XaTc zs!i;S|1tMBw$7fVd1ggx&AG(Z?520ag4Y+UTCyvr{Ne}W+v^@+QM%UmOgLE>dip`z z$`eA;q)Vp9Ych*7r-e&vei#4A$;zzpkvWI==k2?x**0?F?Juite{m-4Zr!*)W^U?u zy!MNWfBWF+(@OWKzDKniH+|i9p~`Y+_R@ghJ#t!*dqF&qA zJ8z_G@q*39jXPw$h2I>VId1u?h>vD9ge|{uNqti~bm!eE)qWGl=m$?Nem(JEYUmF! zV~4%B>NVN2*jv3J|GawtP(;;@n=kE_YF%xk>`K$JgE-T)%?dvNBcby@SpSwT( z@Un#Z-Q9|vE4g)H*0Kc)8aq=z9K1Dl^{qWs)y<79$8}|=lFkLEA3narzTs@f{ZFHn zZ{$|r&3WgmzViojzbQU-$#Jb)|3q=$e7hy@-omtpu}eOh{b|k_&kFUEW7qEWy;byj zQJiV^iJ#y5Y;37z*Skqu1J=)sxO;7)`+UfeExPNqO`8IvPjrPXFB$UH*}W+xWA@HD zqPykVuKQEMuXnbwH`_Bv}7->j>53CmQ2Ii0Xir4js8F>aIDV$Ri@9Y%xEWX;LSweu#sjdvK0 zMvFzCWwP<6N|PbSq}L5k%J{#H!NpRIw$|ko-c%{0bQ4_87HyferKXi%qI1^RbnvvW zF|O7c4Q8!5-H~f^@RnRY%VN&XwO3m8mG*2sUuiU3tyZJi!drOW#_KHxp+3YtJUgAw z%Hd58gVkJVc2wH%c6id7qc<5$*%rGc*J5zwW*O~zLw988in!<&u456`v6}1X Date: Thu, 11 Sep 2025 13:45:49 +0800 Subject: [PATCH 10/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 63 +++++++++++++++--- Jolt/Jolt.SourceGenerator.dll | Bin 22528 -> 23552 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12644 -> 12848 bytes 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index 00175a0..27f4d91 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -13,13 +13,39 @@ namespace Jolt.SourceGenerator; public struct Parameter { public readonly string type; + public readonly string nativeType; public readonly string name; public Parameter(IParameterSymbol symbol) { type = symbol.Type.ToDisplayString(); + nativeType = symbol.GetAttributes().FirstOrDefault(x => x.AttributeClass?.Name == "NativeTypeNameAttribute")?.ConstructorArguments.FirstOrDefault().Value?.ToString(); name = symbol.Name; } + + public string AsDefinition + { + get + { + if (nativeType == "bool" && type == "byte") + { + return $"{nativeType} {name}"; + } + return $"{type} {name}"; + } + } + + public string AsCaller + { + get + { + if (nativeType == "bool" && type == "byte") + { + return $"{name} ? (byte)1 : (byte)0"; + } + return name; + } + } } public readonly struct MethodDefinition @@ -28,6 +54,7 @@ public readonly struct MethodDefinition public readonly string Name; public readonly string Call; public readonly string ReturnType; + public readonly string NativeReturnType; public readonly ImmutableArray Parameters; public MethodDefinition(bool isInstance, string name, IMethodSymbol symbol) @@ -37,6 +64,9 @@ public MethodDefinition(bool isInstance, string name, IMethodSymbol symbol) Call = $"{symbol.ContainingType.ToDisplayString()}.{symbol.Name}"; ReturnType = symbol.ReturnType.ToDisplayString(); Parameters = symbol.Parameters.Select(x => new Parameter(x)).ToImmutableArray(); + NativeReturnType = symbol.GetReturnTypeAttributes() + .FirstOrDefault(x => x.AttributeClass?.Name == "NativeTypeNameAttribute") + ?.ConstructorArguments[0].Value?.ToString(); } public void Generate(SourceCodeScopeHelper helper, bool isSuper) @@ -45,18 +75,25 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) var isDisposing = Name == "Destroy"; var returnType = ReturnType; - if (ReturnType.EndsWith("*") && ReturnType.StartsWith(Context.k_Prefix)) + string returnExpression = null; + + if (returnType.EndsWith("*") && returnType.StartsWith(Context.k_Prefix)) { - returnType = ReturnType.Substring(Context.k_Prefix.Length, ReturnType.Length - Context.k_Prefix.Length - 1); + returnType = returnType.Substring(Context.k_Prefix.Length, returnType.Length - Context.k_Prefix.Length - 1); isCreateByReturn = true; } + else if (NativeReturnType == "bool" && returnType == "byte") + { + returnType = NativeReturnType; + returnExpression = "return returnValue != 0;"; + } var parameters = IsInstance - ? string.Join(", ", Parameters.Skip(1).Select(x => $"{x.type} {x.name}")) - : string.Join(", ", Parameters.Select(x => $"{x.type} {x.name}")); + ? string.Join(", ", Parameters.Skip(1).Select(x => x.AsDefinition)) + : string.Join(", ", Parameters.Select(x => x.AsDefinition)); var parametersNameOnly = IsInstance - ? string.Join(", ", Parameters.Skip(1).Select(x => x.name)) - : string.Join(", ", Parameters.Select(x => x.name)); + ? string.Join(", ", Parameters.Skip(1).Select(x => x.AsCaller)) + : string.Join(", ", Parameters.Select(x => x.AsCaller)); var header = IsInstance ? $"public unsafe {returnType} {Name}({parameters})" : $"public unsafe static {returnType} {Name}({parameters})"; @@ -80,18 +117,19 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) } else { + method.AppendLine( + $"var returnValue = {Call}({ptrExpression}{dotSplit}{parametersNameOnly});"); if (isCreateByReturn) { - method.AppendLine( - $"var value = {Call}({ptrExpression}{dotSplit}{parametersNameOnly});"); + method.AppendLine( $"var ptr = ({ReturnType}*)UnsafeUtility.MallocTracked(sizeof(void**), UnsafeUtility.AlignOf(), Allocator.Persistent, 1);"); - method.AppendLine($"*ptr = value;"); + method.AppendLine($"*ptr = returnValue;"); method.AppendLine($"return new {returnType}() {{ Ptr = ptr }};"); } else { - method.AppendLine($"return {Call}({ptrExpression}{dotSplit}{parametersNameOnly});"); + method.AppendLine(returnExpression ?? $"return returnValue;"); } } } @@ -129,6 +167,11 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) } } + if (IsInstance && isSuper) + { + cls.AppendLine($"public unsafe {TypeName} As{TypeName} => new {TypeName}() {{ Ptr = (JPH_{TypeName}**)Ptr }};"); + } + foreach (var methodDef in Methods) { if (!methodDef.IsInstance && isSuper) continue; diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index 0516d9398b3ced8f9bbeeb7493b3fd1609b5ffb0..1d26785d5ca6711b09cdbc0ade015ecd88659d36 100644 GIT binary patch literal 23552 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 delta 2850 zcmZ9O3s6+o8OOhSxx05SyTGy_%lo;@`~7~2EFg*!v=I@Snh3!K;xnQK5@at^V_Jx9 z7a7R7xID_GxDY~4Gt(-@#h|KrN?q)iQ_06`U`X!dc?+22lTuR zVW{8~^6x=oD$m)j+j#mK66`z~Aqx}&B|}-zd}syqLue;701ZO>px2?pc2*CiKpdU7 zb2JWJgg${jQ=J^m&IPG4U)dE07o5sbRy;>VP&HHsH9(I;PUye!tWx%HBqXo`N)K;x zMZqAU7dZUb(*=2J_{Zot#(MbgAY=$)EQ0@yd@p1KOP=yUC~wkmDg2C$@c#h5S&!cY zeuKzGxgLWL3^$Okf_zZG*HfVb>Xd zg3!W182mjIuzwJw;Y9R+7612v-vEEGhFOIn8V&}BYS<4P_7I0ZV0<6l!=~f+AIJko zYWNv&l!n>#jn?oIaEyj6;8+ct!EqX9>&50__I-36k^P~7cn!~oKS|RgtV@$MYz3!0 z#Hku)@o5in#vH5PSEqWmCg3&-JYY5-c6r!>A$kn?O;8cy=Xr*Vt%YK6kcX4NB^uU& zOEt{m=d0|(;NxLqTBZr$!3#9J4q=R~_&^SPDIN|6mw>S|sQwV}Ab7i{d?@%0YdAIn-*5&RwkeT@J<6!z!x2TYaM6Ez zykz6*>1#!geo^|d7`Fe&+4%2f5Ljh~65USmKps{`1|6tIhwY*>h*+qhl9?9L9M% z$BbLNmw9^Mdauh>gH2;s&MAxhuI$iHl>KbY6P2g-w%qfZzje!n8?Rn1$g!E$t=oN} zI=I5xdFtelsi@WR!bqztRvN|UDnj5=*eRQP9M{mosA3b_=XlmWpul=^sDlX8SnY{Gag!7&D{y691>#pIBk!PKG zV&$u+ch>#=Y~!j=-)-90c4$fG3v2I(Z7bjZ!Sw9w?@ev38P9lf_Do%O!};ORj@9|M z^#6+b{q2UF{)M*ZKiQCbu|d(~EFpO_lf7?FZd`h9N7A|3Q`YhR(rYK*+IFaM zdZzumyW8#`I6QHDb6M&5-k{B&2d>mv1jk7tnRqOh3Lcws7H$Ky zoTohE_->h)kepxU$xIVLhMP?Il$~buJUszrB23&GD zeFs*9fwhDEo0K-4NR_OeX*_kple0l7Os`OOrl*x*#pKJcNM;Ha3?_=?aXjboSZ6-^ z?l2V1k`GG$%&ezq0X2pS23!t=r-Lw|W8`DX-So_~(M)#8Etdy%MoL9l9Z8Y$1?d@G zMG$RC()&^>arND7=jiA&D76`(+ySL6qc{=^^ob;?oc*yR3e|VxlE8PfRU1|qo+K*o zXJkfTT?Q^n(&H7iIEKBZ`Djz4XN@=}QXP!p@OT zSCp|sAfAl!No7N3eyN0AS{{ox;i6d}kIxII7}h(uo5)ikqLHXtz7)^cPySeabMj1r hJcPelBwtakW-7k&m16mK?5vKWhQ2CA&N{)-{{Wh*%y|F+ From cc9ad760ad745454087a2781bd742a78f5c7b3a4 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Thu, 11 Sep 2025 14:34:00 +0800 Subject: [PATCH 11/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 56 ++++++++++++------ Jolt/Bindings/MeshShapeSettings.cs | 27 +++++++++ Jolt/Bindings/MeshShapeSettings.cs.meta | 3 + Jolt/Jolt.SourceGenerator.dll | Bin 23552 -> 24064 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12848 -> 12876 bytes 5 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 Jolt/Bindings/MeshShapeSettings.cs create mode 100644 Jolt/Bindings/MeshShapeSettings.cs.meta diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index 27f4d91..b8fcf84 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -31,6 +31,11 @@ public string AsDefinition { return $"{nativeType} {name}"; } + + if (name != "result" && JoltGenerator.k_ValuePtrTypes.Contains(type)) + { + return $"{type.Substring(0, type.Length - 1)} {name}"; + } return $"{type} {name}"; } } @@ -43,6 +48,12 @@ public string AsCaller { return $"{name} ? (byte)1 : (byte)0"; } + + if (name != "result" && JoltGenerator.k_ValuePtrTypes.Contains(type)) + { + return $"&{name}"; + } + return name; } } @@ -77,9 +88,9 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) var returnType = ReturnType; string returnExpression = null; - if (returnType.EndsWith("*") && returnType.StartsWith(Context.k_Prefix)) + if (returnType.EndsWith("*") && returnType.StartsWith(JoltGenerator.k_Prefix)) { - returnType = returnType.Substring(Context.k_Prefix.Length, returnType.Length - Context.k_Prefix.Length - 1); + returnType = returnType.Substring(JoltGenerator.k_Prefix.Length, returnType.Length - JoltGenerator.k_Prefix.Length - 1); isCreateByReturn = true; } else if (NativeReturnType == "bool" && returnType == "byte") @@ -103,11 +114,11 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) var ptrExpression = string.Empty; if (IsInstance && !isSuper) { - ptrExpression = "*Ptr"; + ptrExpression = "Ptr"; } else if (IsInstance && isSuper) { - ptrExpression = $"({Parameters[0].type})*Ptr"; + ptrExpression = $"({Parameters[0].type})Ptr"; } var dotSplit = IsInstance && !string.IsNullOrEmpty(parametersNameOnly) ? ", " : string.Empty; @@ -122,10 +133,10 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) if (isCreateByReturn) { - method.AppendLine( - $"var ptr = ({ReturnType}*)UnsafeUtility.MallocTracked(sizeof(void**), UnsafeUtility.AlignOf(), Allocator.Persistent, 1);"); - method.AppendLine($"*ptr = returnValue;"); - method.AppendLine($"return new {returnType}() {{ Ptr = ptr }};"); + // method.AppendLine( + // $"var ptr = ({ReturnType}*)UnsafeUtility.MallocTracked(sizeof(void**), UnsafeUtility.AlignOf(), Allocator.Persistent, 1);"); + // method.AppendLine($"*ptr = returnValue;"); + method.AppendLine($"return new {returnType}() {{ Ptr = returnValue }};"); } else { @@ -156,20 +167,20 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) if (IsInstance && !isSuper) { cls.AppendLine("[NativeDisableUnsafePtrRestriction]"); - cls.AppendLine($"internal unsafe JPH_{TypeName}** Ptr;"); + cls.AppendLine($"internal unsafe JPH_{TypeName}* Ptr;"); cls.AppendLine(); cls.AppendLine($"public unsafe bool IsCreated => Ptr != null;"); using (var func = cls.Scope($"public unsafe JPH_{TypeName}* ToUnsafePtr()")) { - func.AppendLine($"return *Ptr;"); + func.AppendLine($"return Ptr;"); } } if (IsInstance && isSuper) { - cls.AppendLine($"public unsafe {TypeName} As{TypeName} => new {TypeName}() {{ Ptr = (JPH_{TypeName}**)Ptr }};"); + cls.AppendLine($"public unsafe {TypeName} As{TypeName} => new {TypeName}() {{ Ptr = (JPH_{TypeName}*)Ptr }};"); } foreach (var methodDef in Methods) @@ -184,8 +195,6 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) public class Context : IEnumerable { - public const string k_Prefix = "Jolt.JPH_"; - List<(bool isInstance, List methodDefines)> m_Entries = new(); Dictionary m_Type2Info = new(); @@ -303,8 +312,18 @@ public void Initialize(IncrementalGeneratorInitializationContext context) } }); } + public const string k_Prefix = "Jolt.JPH_"; - public static readonly string[] k_Forbiddens = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + public static readonly HashSet k_ForbiddenTypes = ["Quat", "Quaternion", "Vec3", "Matrix4x4", "RMatrix4x4"]; + public static readonly HashSet k_ForbiddenMethods = + [ + "JPH_MeshShapeSettings_Create", + "JPH_MeshShapeSettings_Create2", + ]; + + public static readonly HashSet k_ValuePtrTypes = [ + "Unity.Mathematics.float3*", + "Unity.Mathematics.quaternion*"]; public static readonly Dictionary k_Mappings = new() { @@ -372,6 +391,7 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, C var methodSymbols = symbol.GetMembers().OfType(); foreach (var method in methodSymbols) { + if (k_ForbiddenMethods.Contains(method.Name)) continue; var splits = method.Name.Split('_'); // throw new Exception(string.Join("--", splits)); @@ -393,7 +413,7 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, C throw new Exception("Unknown type"); } - if (k_Forbiddens.Contains(typeName)) continue; + if (k_ForbiddenTypes.Contains(typeName)) continue; typeName = k_Mappings.TryGetValue(typeName, out var replaced) ? replaced : typeName; var typeIndex = context.GetOrAddType(typeName); @@ -401,10 +421,10 @@ private static IEnumerable Parse(GeneratorSyntaxContext ctx, C method.Parameters[0].Type.ToDisplayString().Contains($"JPH_{typeName}*"); var methodDef = new MethodDefinition(isInstance, methodName, method); - if (methodDef.ReturnType.StartsWith(Context.k_Prefix) && methodDef.ReturnType.EndsWith("*")) + if (methodDef.ReturnType.StartsWith(k_Prefix) && methodDef.ReturnType.EndsWith("*")) { - var returnTypeName = methodDef.ReturnType.Substring(Context.k_Prefix.Length, - methodDef.ReturnType.Length - Context.k_Prefix.Length - 1); + var returnTypeName = methodDef.ReturnType.Substring(k_Prefix.Length, + methodDef.ReturnType.Length - k_Prefix.Length - 1); var returnTypeIndex = context.GetOrAddType(returnTypeName); context.MarkIsInstance(returnTypeIndex); } diff --git a/Jolt/Bindings/MeshShapeSettings.cs b/Jolt/Bindings/MeshShapeSettings.cs new file mode 100644 index 0000000..b54f6b9 --- /dev/null +++ b/Jolt/Bindings/MeshShapeSettings.cs @@ -0,0 +1,27 @@ +using System; +using Unity.Mathematics; + +namespace Jolt +{ + public partial struct MeshShapeSettings + { + public static unsafe MeshShapeSettings Create(ReadOnlySpan triangles) + { + fixed (JPH_Triangle* ptr = triangles) + { + var returnValue = UnsafeBindings.JPH_MeshShapeSettings_Create(ptr, (uint)triangles.Length); + return new MeshShapeSettings{ Ptr = returnValue }; + } + } + + public static unsafe MeshShapeSettings Create2(ReadOnlySpan vertices, ReadOnlySpan triangles) + { + fixed (float3* vptr = vertices) + fixed (JPH_IndexedTriangle* tptr = triangles) + { + var returnValue = UnsafeBindings.JPH_MeshShapeSettings_Create2(vptr, (uint)vertices.Length, tptr, (uint)triangles.Length); + return new MeshShapeSettings{ Ptr = returnValue }; + } + } + } +} diff --git a/Jolt/Bindings/MeshShapeSettings.cs.meta b/Jolt/Bindings/MeshShapeSettings.cs.meta new file mode 100644 index 0000000..4954b4e --- /dev/null +++ b/Jolt/Bindings/MeshShapeSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fd5e9a9ba5e443acba9ad75d446edc3a +timeCreated: 1757571158 \ No newline at end of file diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index 1d26785d5ca6711b09cdbc0ade015ecd88659d36..c90395e0fe869ccf44f04e6fd92adc304a5f128d 100644 GIT binary patch delta 10950 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 On7Z3O_XDw`IsAVE%hwzL delta 10753 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 diff --git a/Jolt/Jolt.SourceGenerator.pdb b/Jolt/Jolt.SourceGenerator.pdb index 4712a81419c5401bee559c3956085c0a8f8b58aa..e24994d02751e78eb02f2708a1fdfaaa7b5881b8 100644 GIT binary patch delta 1727 zcmYk72~ZPP7{|Z&*d$91!XY67a+7eA5DXz66_8T}p%f2vD#&3)K&l*3F&nfVwAN#R z%5=0Ci)g179c&$Eidd~!6^o3m)C)&Dt>Q=-YHjOiOTR^D>Slg<@Be+@`}Xa7-`hP_ z)K|1?b-F18ATV)NWg!4$h{g`P#azfZcznwHUtUdJ+SH~PLNhGzwaXl(00jGU5O-t- zl7&o1WXSg2r+i)fup5EQZOksGX z{ZUt;F2lisKLGVQ)P=8fDC(WqPePmE4@WJhUApDE$T<_g@ARQij z=YG(e(74WkAG&FxpVUB{KTQ2AL861N1Hbv$?S``ZL1Jr znH=47CF9&I=L@3^qq@4BPt$uoxUNc&H8%K_4{WO2Tco{swq!w#w&nJ>e5$hhxqQZR zQ$xKXy}9l01ZC@tk;m4J9&E@Ara6v%h2&clpx7um-too3570N$p+Ss7}ln%k-2T7R_zXadr*)SzWYb zz|^j+96pm%eEP&@+xVRR>dun-$l4sOF3S7O>*E`rrc4TNT~9nMI%5Bb*bfqWC$XO)_CZgqjc^}D5cn{x2PBIv zL11LqFiQE&lo;lTJ(ppeOcC)Dw~Bd5ox7#7Quf+s_z5Xo2rU@2qqg~<$N%VJnF z`Uq!dArageEa!AN%S)rY-1dqjkR;qYlEOx;Lj$*;H%0ktO%%MrMR3ew@JP;PoP5BK zSuY1dEjVWuJjE6%RPtPuG5)fnGd?CO2OkOwoHwXIA+~tog6O$HM;E~?#=*iMVUmQY zQi%clx%>QRly3STIypwp=Xymlh`_NDaP;B+b*vR7s^HyFu@gi9$(_iy);2?w!r)2; z&&p`O@hAxOuUd6AW1aLgQ3AYob|U5*q2s2_-Ev2?yA~jV8{-mpEuZ z#trl3x@mFa8ad7(&PLt6!C!c00EJCFS)u?)vB@-oR@&qfEwMRixh5xkRoPtmySgTY ztC>5k!~kE&vo-LXK8THEYE^(6%XjF*3qr&e7s#cchG+()ggZeY1CkkBr(6a!q=I4f wFbzErLUDZz!lF{WALhqz2?0r7{Ul*iMNp{#B~$ArtURq(c>-bcg^vrse|m|OWdHyG delta 1633 zcmYk73rtgI6vxkZd;4yIBIRYFQ2IcgEfCrYDilOs0&_YA5mzh*i4Jt4R#aLP=7<{b zI($xN4QvK=EU4%NogyqGMCNnTOi{NiI*jPtFp7_z+nLPU{O))E=bZ0+U%#GvI%w;# zHC1IP!U4i8ODjtO!0>vebzwo}%sou?Z~z=SlG)I@9nCOT=@JV?00f`25jm2CK1RNiznWT8`uPWFI<-sw=(%Tdq4 z$*f<6dM)bQcX|?PJ3gnOjrB*O9wVLoJP#rrS78#sU7#(WxyP4lZgOq;sO6kqY^H!sVx}zC%+}H21@770IpEg5N$!>0TJs_~oqj zJtt$5I{QSsNo~hK#-p}j-X{Fx@x_v0S zH^r-ewEk@GPmF5jm7?6^)4!>2tP5FodE=U2Y`TF9i|4M=wfuUKnc>+pE}1fJs#`D3 zikSY?)4X!*c<1n|v%9Sex_YjcCl>qhqI9?O3JzK~y*ia$+hWM6uh0B+lex1)mNE}G zSBfULt_)MQ=4#5F2?d1#;?JADqf{;P>4U0ek_6LANL)exA(}O4Fl8G)TBCO&(~ERsCkpBd$RscU&rbP{K3(+q5VM@_mA># zzdX4!<5{xn=+SCz=KUMxZ%0qOywu+39n+>e-K03SHAJyw+oE3Y?GpL0I10#9*pYC3V{5LXFt*@>%#xLm|_jJVDb*9|W$jmTiB8iHwoANbRDw;=)z8d@L& z32j$nrTI@~%A-Sq+p*w+vV|0&O$G|K{*@F^kV!)zEM?lFlRf-s0ahCYfixw880JZ| zPc4@?TmrCwoCXeYdhrAbh@kOxNu|J#4V@~$WQ4Z_*TMIPvdh>lIks~7kVfGO(G+aJ zLW_4W*uo~#*sOGvKtdHzc0H(g9;~fK42iTr0%i&nAY&(`unVNq9>EamP1i`+wC?nQ zJi7?0n8uhya)CJ?Gm%_kZsYwX^CCu{Iii=~(gltlt{9>y@a2Or*zu2WHP_+`D<<(g zAPUHA_x6@Jhm4j4wt>c{tJuM#IK@3IFtLMZ zp<9VQHnA^eyyFkcRBXi|d{uLJl}fD9+4Wwoc1 z;~t5Vt8?t|05Cg+%rpHCsc^F6v?m5A;Ui}yv%{d~sOi9?zZ%6(53W@UMUXe>M{t7yK_E366CD From 7ddb314ea220ec026f0f907e2f6bd2d4fd07cc07 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Thu, 11 Sep 2025 20:27:41 +0800 Subject: [PATCH 12/18] temp --- .../Jolt.SourceGenerator/JoltGenerator.cs | 8 +++++--- Jolt/Jolt.SourceGenerator.dll | Bin 24064 -> 24064 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12876 -> 12872 bytes Jolt/Mathematics/rvec3.cs | 6 ++++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs index b8fcf84..11c5faa 100644 --- a/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs +++ b/Jolt.SourceGenerator~/Jolt.SourceGenerator/JoltGenerator.cs @@ -106,7 +106,7 @@ public void Generate(SourceCodeScopeHelper helper, bool isSuper) ? string.Join(", ", Parameters.Skip(1).Select(x => x.AsCaller)) : string.Join(", ", Parameters.Select(x => x.AsCaller)); var header = IsInstance - ? $"public unsafe {returnType} {Name}({parameters})" + ? $"public readonly unsafe {returnType} {Name}({parameters})" : $"public unsafe static {returnType} {Name}({parameters})"; using (var method = helper.Scope(header)) @@ -172,7 +172,7 @@ public void Generate(SourceCodeScopeHelper helper, string superTypeName = null) cls.AppendLine($"public unsafe bool IsCreated => Ptr != null;"); - using (var func = cls.Scope($"public unsafe JPH_{TypeName}* ToUnsafePtr()")) + using (var func = cls.Scope($"public readonly unsafe JPH_{TypeName}* ToUnsafePtr()")) { func.AppendLine($"return Ptr;"); } @@ -323,7 +323,9 @@ public void Initialize(IncrementalGeneratorInitializationContext context) public static readonly HashSet k_ValuePtrTypes = [ "Unity.Mathematics.float3*", - "Unity.Mathematics.quaternion*"]; + "Unity.Mathematics.quaternion*", + "Jolt.rvec3*" + ]; public static readonly Dictionary k_Mappings = new() { diff --git a/Jolt/Jolt.SourceGenerator.dll b/Jolt/Jolt.SourceGenerator.dll index c90395e0fe869ccf44f04e6fd92adc304a5f128d..5516fb22eecceb510f60345ef00ceab72d87b547 100644 GIT binary patch delta 2735 zcmaKudrVVT9LIm>7H)gXs}u{A_p8tWl@?nH(+=Wfiq6**9L`s%y7>gJVtmbFd@#qh zh(}}MbUKXL+-4TN$(AKBLx|bbATt?r#AzgE#zl?BWlLt_-0$3bgiHTe$-VqOzwh__ ze&=@rCvEE{ZQbO+dr_CBU%ArxK?d2@d1gU;VJpCFz)u^%Jws=1QtU~9SmXyA0p`J_1C;xGI2OUj`sFcY$A-BjiPsOuEtNBo2Da=q6>f-{{M% zBGA(1M3>oF03hDlY85j-tieT&WVxDVn~J;<4zbj373CGU%qYK$Z)f4i+H|XEa=64o z`5fJ5TJIQQDk~~%PXLH=S>bJLGh=f?@kCu* ztBV_{CC(OZ)@9C&#BDZg#OwY(l6A=T=+PeaBXL_Yb1zYMu@1BHDJCsdc_4xfBI4vYzLooonTd0p30lH>g98(K z!%W7y1|i0}2KyQ78k~+;e=S14AEDbM2#+b?k;ZOdF=JhW_6WT~XIH$oqZ&?`vX*a9BLx&j**>n3bx+(YXu*+NVdU2VxAXKA~omh>t8 z7DC81I*@po4AP_4SIH2)WvwDZN@|iz5TtlI)wW(pil^V&b_P80cwwaDRe?7}wJx5a zi<@;Z)y3DToIJ^-T?q1D^qXYAASKX8$@#HT0#;?0nQTi?vQiF^#3IZjnG%gDN0X$I z7`ZBeUPxVodr?a5IYQceybAN{=RuAKz=9V^{?z)qDfrv%QC6lGis8_BcD?LN9W8|D*Y0rYDc_G8+hJIq?_hC=ue#Xogc2RzqV9bm-sW6n3=s_1|OP71Co z1Q(}OFeny51*gkMPN?Q|hzyD^!8A^iFenzoTo17R?C?b>fkrNFgBxNA>{W?r1WMtM zO2cFc&g6ohIc2}~O%Phy!SX(VOF*CHh&VSnvt zT#%=V+Gbo(s?u&S!(A-1jMEW#ESAAxPFu)4;(=qF9+JCaIrMWX7M_Y;_=VGJf@G|K z-#Bd+(v4NH!-qQy~bRwIp*`3_uKiTLDn^6-=~em9;=CG{IU}1tI)XlVJq}VL3FzddzKA z`U3?*mj8b}w7EKsrqoo@-axi8r{)N;r%cE7Yhe?N$9kKwVhAQcF@TR|O)gffle;BL z)5oj7+}ZfmEZXp}IK!vBuH2sSx6v62RRx#(E8O_<`tZkH=?|9sD?Lrfv2@<#!!s}6X<0Y)%K3+9XSHf2+4~(j(2y=HY^4tx zzE|SkoNkyM!U3z)WAj4=xOwCSA83yoD#4H0a(q{U2akI>MqcEgnpug?5JpXSOhNF{ S&)y0OJA6vwqDQ3DZTt_B15ri* delta 2696 zcmZ9OdrVVz6vxl+UbuZgyV6=HLX}scQYxk8RkaHfnNw%ffwE=3kcTlY;x4|4UJQxT zxFwVyi_3J=NHXX42f73ZwsZ2-#vUmXCC#Avo7`2;{R^1(KMI+`sM z(f3FJ$)x*eZc z;)Ga@TdnsrZvpnO*hRUKQj@plDd0q&v{;Rk9+%vX&Xb<>@xXMsQwwB_2QuYPwSap( zFhd^bHdk1$Vl*YO-H6APe-hOi^I@S%5!oFEXj_fv_sBQV(z*t>`5yVcZvU5VFD6WS z(x}bi4ES}CjT8G0CpO}BdnckEc{G7GSf(kCMA#}X!liYc)_Qv!pJx1QQuj$yxs~y^ zxbXZtQ@A6IHD9Y$PBWmh7#HrG%UEfg3@9wXT-*?4%v_w+IQ?3j{(`Ztfys!ht6$7m zSAPkzqHnM>&Jbm+JHYukeKbxNO;a2A8SC;l#_1oKK$&6~UO?hl8`S>@)E{6eS4hV$5_|kI%C}cFBvlvuRlvk z#sG8iz(&S8L%e<}P9KfSPqSdY?f`zq69?#U;n%S+M-ca>v&{~nownK%XR=>p>w5f> zirU)Rz&?LD2R=R?==RTbd#82M6V~nb(tWA(jIpPLe3V{Jtq}UG^kr&pavyWC zC!BoVsureok(BEgaTrq!X`eexz9jiqE4}90jAv0R)3b!>udD#MD{EmW0ARzXOYXvz zix%MLF9B7~$d{D**$8mJHDd0S9I!q{(4B09X|RveI)e?IaD>w%@f#@>PEF*Um0U2u zwL78&)8U5+vLU_VG+VSm1}Mc^KVyzq3YpNw5!;`WGT~uNg!|&4lm)Li-ND2xaNz)W zP+%>xp^_6TnhkZF*wJ#}15O_%NRS8p8bw{V%*UlXxD?Z{AJeV|6jrno@?i+Y-*i?F zywF)a@KU2rcn5xzJRp|D@>I;rhip!pU_>f_LQca-UI=mOAtTZ(n8(Q^j7Wu0Qv$3% zyZI9MU?~^(z%9uKyES4Ofg(7l(LJ&jXY#`kr)}0!q@RQAF#Dl_Fzt7Z?wJNH_ar}z z#fbcw%(Q>F=C;-#nM1(($8L=uQW3`w8JNu}mGOBk+e*42L-FBDJIhx;Q;0 z52YYn;#4U7EtSGBr#A(Yp&V{-+96~Z!mzar+bMYSy9KXdF6?5c-3tQqphu(Fyb-v~ ziOm~PYI8pY;~z_A!<^G2YTYi!;KoZ*_otVj{~Pb0NEZ*DqOs%EPHMp6Xg zp&eD3^!2JY)Gw+&BczO;nO{g}R41vO^Us>>0QW;Z#-;=6fJGa?=yX`Um1IG#{Y{w-lnw=_)ZKKQUzo%XGO{(?X z#p1FM1fT>ep$xAEXu^FdG($PQ15g1$2;(lKMZ%~vB?yhM0b^nGw%{5>UnypW@M@u_ R-fs|GWopXmXCxXh{0|;3N=pC$ diff --git a/Jolt/Jolt.SourceGenerator.pdb b/Jolt/Jolt.SourceGenerator.pdb index e24994d02751e78eb02f2708a1fdfaaa7b5881b8..b96f815747ce86e4f7f88f6f9d3a975cc0f1234d 100644 GIT binary patch delta 942 zcmX?;aw26yfr5z!1B0?tPJR*t1A}c#>E^@P3GUrdeFj$_EAqq)dlGc;H&<*OB{jlIvCn^)=?QvM?~Lopj!d*-+rv zd#C$}FFXaySLfZ$>R!O=>L?KXML{lY^37a@*&ar#-}u^8ez~yw{DsZ^$~Uf0xa$@8 z$C-cb9HXDlzMtjcJlwm~Em@UkVLR*X-X0#ylu5r!H`RAN^r#dF6S}jweJ8^tA%PoF zvLTmt?y+~8Jdu6dfzZ@dCXRio96C0QMu)82n-muc-qU=|(A!eI)KrD#Ru$XSbD1`a zW^VuVAR{j>+DZS<(&wq`mu(EHNHvm}GEeh;-F`OlDOo~m*1Qb6l>KGiCzt8f_N)gF zK99ctYYFmRR%V&9Ge=uE9^ag}CVSmooioNOPjR(}e&hbyWU_GiQAc;L z%c_?DWj9N1S+&{X*^wpJo|c-g`2S!n_r`9cdzlM+7MES=i<&F3{n5EJrNjRi_-NbnbElj>T)JizvL-Wg%m43D_0L~cFr_yicFN=o_cQ#uc8PMkP^4d5qE+SG zzW96d=iQf+TiwJz`5o_ko#bT8#1wNg10Z2y3WNq0=7~n;7KTYczEPsNMVe`{d6IFW ziN2PS&g6f*{+l`Yx#c8X7#DdnE{bDZRLQt#8snlxjEmMWF51ty=-Or-T{lKX-^s;# tujE)*co_7!fJBxSiv$BVFwux|bFwoqGF37IwQR1|mtbOSnLNdCD*!~=Juv_P delta 947 zcmX?+awcU$fr5nw1B0?tPJR*t1A`aq#}&dx$GsMBl24X)TE(T&z6-EYiAYKNjg2w0wxAsR_tvf5-vMhP88hDAUHtAKbr5bp=#<3M~Kh_3^2t~$b!Qgx7q z%{5FujEwc0Pcn0}@cvO^0?IRkJ(N88A-kyREoOBFR)%6$bp|$uPWCdOTmj=WAeqIq zfRP=jPJ)Sp;p=8;jxHvJgq0sZ?&NfQq-E70W3XIGSm@!+=UgwZXFhViDC8t|>hk8J zTr(N#&n;`so$z#X%-qR8EA9Fv3!b=X1R z`1_{!1{Fa|Jooop6LaM5YEsC(*jzCqMg8QVwD25D_8`?8V(%O zSU)A~Q(~8uB7085=~EF}O+4Hk2IVY4?#H6KB%HiH`blxGVD(uVBp{^mSRy6nqQz4F z{FeuUQul3XY5ebfzI1(Bt!{acx`Ccd@U{PSU)@BsyCS6S>Mye$5Q`#O2q!s^8vS z_oAbs^fq_4i(FxD_FRv!5b3x7_v-EcoMhJi`D38o)CO(snQd+tHVPkAQ9iq2#(tf& z^ZEV$>%a4-9<-kPmUq66v4Nq5sYPOnp-HNlnSr^HrI~T6nPp}rIEQw zig8MszLt{C5N-`etoiH%3O6 z$whjv new rvec3(1f, 1f, 1f); From b1633806facaaff8021e6b3f2a3b1938e6bc52a2 Mon Sep 17 00:00:00 2001 From: mooooooi Date: Fri, 12 Sep 2025 01:46:54 +0800 Subject: [PATCH 13/18] temp --- .DS_Store | Bin 6148 -> 8196 bytes Jolt.Native/.DS_Store | Bin 0 -> 6148 bytes Jolt.Native/Release/.DS_Store | Bin 0 -> 6148 bytes .../Release/macos-arm64/libjoltc.dylib | Bin 3346944 -> 0 bytes .../Release/macos-arm64/libjoltc.dylib.meta | 2 - Jolt.Native/Release/macos-x64.meta | 8 -- Jolt.Native/Release/macos-x64/libjoltc.dylib | Bin 3346944 -> 0 bytes .../Release/{macos-arm64.meta => macos.meta} | 2 +- Jolt.Native/Release/macos/libjoltc.dylib | Bin 0 -> 6058160 bytes .../{macos-x64 => macos}/libjoltc.dylib.meta | 55 +++----- .../Jolt.SourceGenerator/JoltGenerator.cs | 122 ++++++++++-------- Jolt/Jolt.SourceGenerator.dll | Bin 24064 -> 24576 bytes Jolt/Jolt.SourceGenerator.pdb | Bin 12872 -> 13044 bytes 13 files changed, 91 insertions(+), 98 deletions(-) create mode 100644 Jolt.Native/.DS_Store create mode 100644 Jolt.Native/Release/.DS_Store delete mode 100644 Jolt.Native/Release/macos-arm64/libjoltc.dylib delete mode 100644 Jolt.Native/Release/macos-arm64/libjoltc.dylib.meta delete mode 100644 Jolt.Native/Release/macos-x64.meta delete mode 100644 Jolt.Native/Release/macos-x64/libjoltc.dylib rename Jolt.Native/Release/{macos-arm64.meta => macos.meta} (77%) create mode 100755 Jolt.Native/Release/macos/libjoltc.dylib rename Jolt.Native/Release/{macos-x64 => macos}/libjoltc.dylib.meta (57%) diff --git a/.DS_Store b/.DS_Store index 1db48c71042faf09e23796cca7c0119161b53777..68c83c868b001e762d9884e3528331570d604639 100644 GIT binary patch delta 219 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMA$gweCH}hr%jz7$c**Q2SHn1>q zOy*&Eqs-0V#gNaC!%)JY$Kc112&6L^${13U%8LtJHTL;Bw=j7()cTL{QA}`$y)P=*`%`aK3m^Q2PJZI*T j;07vl1vzoEAjfy+$^0Uoll^%(I2a+WXV@IiGlv-fzP&Jc delta 107 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50$jG)aU^g=(+hiVrH=F+mYBNo2 tc(RzCgF}!Rs0auIxPgQ#Nd3mb@640=WjsN;8JHj@fedHZ9M3a{82}#85~KhC diff --git a/Jolt.Native/.DS_Store b/Jolt.Native/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7cb2da181e2463812ca4974930e3963f84ba50a3 GIT binary patch literal 6148 zcmeHK!AiqG5S?wSO({YT3Oz1(Em&JAh?h|74>Y0&m735{gE3p0#vV!~XZ<0+#P4xt zcPqBltEkMt?3EY5?G%5*8{rd?B<>x*-MYDIp5|j1fEqvveH9 zD%gl-$8ThSzTGzTAcO!iSp9yl!8nf6X|wqz3dPdacG)RARp-XLQ!{VsPqVb^Pp)Wo zu2dW>Z9lk(!r7pLCq%;#L#{8QWT<9cl_kSe=Xz$rsW_EEtv;W3I<1Cm zw>yi5oFBKE4S9t2qT=lBADr|D_whrbo(+)#_nej;i%WPxW2L4?Z<53+8KIwY%FxGp zV^kkf2tV!Ezg+QJRckdbxnX1mm;q*h7_jH3Q)N1s0cL<1SYv?B2Z>7PTFedVqXP%s z0wB_Fq!zTPm!KSJ(Y2Tx#1#}_QV~t6uq}o#>FAd>&b62uH0dC0^C9e;h3!y;emg#2 z>TnRQK^~a_W?+?pqM6p{{y+P^|6fhw88g5P{3`}Tsps{&SdzV4H;SXXR-)dbl2BZ3 m@FN8ceHCLYUBz`&E$EkIAi5TFgXlrw9|27R56r-iGVl&59Eu|V literal 0 HcmV?d00001 diff --git a/Jolt.Native/Release/.DS_Store b/Jolt.Native/Release/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8d7cd912d0d34ad03b357d154845e8ccfdce886b GIT binary patch literal 6148 zcmeHK%}xR_5N`P`AtoF&;n>70iToH6;$=mA0oUk34eqi8H!fSkf*c6Rp7kkw3vV8M z1Fyb{(;p0oKQ|#}CYgTI=}f!*cGK<R?B>^Z2$Q!|JZmr{2bx^5;3^>X@xs`7zQHj!L0KqUU(EVkpW}?8CVMg<~(Bg zwXBYdA_K_4CNm(<2M#LHG8k)AM+Y>j1OQBdTM5{*mXJBzpk*-D2qPd=rvmC!YDx^M z)4|V8oMkZ9sM85G#RoMjQ&XW(wK~ktRXCxRMr@G*WMG+rr0y2v{eS#@{lA=qJ!AkG z_*V?jRLgEPVN2$2UD=$xYdPpOs1z9&Yy3z7LtVuXE3e`rs1opVX#iRVV~yYe!5;xd L12)LOpEB?cM1E%z literal 0 HcmV?d00001 diff --git a/Jolt.Native/Release/macos-arm64/libjoltc.dylib b/Jolt.Native/Release/macos-arm64/libjoltc.dylib deleted file mode 100644 index a4a31666b32a756ff59612ae8356938c7d0723d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3346944 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⩔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%0DeLp7Il?+V+4y(;lR( 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

5s1?6|( z%NVNT&iELH>c=AJI@TD2DSZq$;T>Gd_b{e(CVlcd|0!ciFp*)sSqv*RUY}&68tuh$ z5Kt>BA80HJp}^$>>nyiQNn=r%gO!1$23JXY6Gc1aMT&f2afIbfl0M`ae zXwX)E#!>9j5qs#6@X7L2IcDRrTZ9Jwqjvvq#{ZwR`}1h+|Jl2Lzysh)={5M5_#~Vx zp`Me)@hxV51wIA9!48@H)Dg%6t=*f>?e9*iyq~>u>_AB8B&<~#JII$W$K(G?+`GV6 zSzUSm2?PiVJ_nmb>|l-4ICCPK%OPLO^RVl5jaa zrZQ9Cv9Wy(?dO~%K<6|68ULR@ zA99}O*?T|x*?aA^*IsMwwbtgS11;~3bFkZN`UbaV0BPrU%kcC&q`=h-DEx{hJ}-Oo zb;@vMbVFsdwLJP(h*-hBNY$mxSZVAhB2}`RfahZJmqZWxYT~~1irk09kx@h>^HU^R zPu}sLBw7_w&QD2kV?@6YL)Q75ABb4VBN%I!ra4Ar;l(uHM-dU=hegzGU}dhd52)m> zt5f?0+MElGZmlZ^dIPKK(Z39=LH|;Cq-&y%RuqioRUt-YsIv!go4%Rl(aC%fV^o2u zyK!u0de@V9r*u7*;tZ3dVD!EV7gX1OhC{^Uv~H||smUvT^xnGbFaKft9x-u;heq!# z@?Ln8J-WU~Nc+(uv~})zv=@6>+u_jg!+f!qO|+YiMUTI}SZLLsJ@MvWiErV(!qvqh zTWN{PS6Bj5yAA9gH9k|4j_n|s&Icdlo07}VBd~s*u-e3PkT*5qPAy)+O77)zJv~Ss z=0unhp(%>=H=g0&<29#qJM46B2V{sEdD=OLpO#%{xTLCUy`G)^4fC6;*^;Sw8s!_xD%t4Z^H;E;{_k{h>q|8FX%u&a9i#bYc?~U{ zsqI!eb(gY3WSg%b*4Ay#f09GV3S0U_Q0lGkdiL;aOpGd`&zaqhNlsecf>PAvN@asX z+G}PA;^ilUMJG)n-3E+oO7o@pL02t?HKo%r^T(7KfoX`IKVWc`;-k_00HHsdEhz$< z;I>YadY;pre}M?3MRID-ZmQSx<5Uf?pN#@zWMIpIG0n>@;+br=yGiZ(Y|rrEFQQ69 zja_U)@2UHXhNrKSQZ&?@@dfFCp34jIf~kR;tPX7fRFLG9K}mb>&U{k^y~chddnEdX zX@g#{Kvqs6DoYWdY6GvtgH`w_PKN5TyIyMw5 z@}{yKf$JZ}SdW}A6Qf5vNOa|DK)*<_8+mB!QU z;FX|3geeXS8s)tV_-|AD*z9PxMo7t#zr><~%glEp9rEyKZy-~5+sU#*P&(xK%3L2U0o zi5(at2pC6x{3XB`Tw-7Ex+-Z8;Whm=AC^tTg|s^S1)d(snFyR-O+=?iWaLk!=}`8@iBq9s`a0kCi6hPGdX*yi0G`N5h1ItJ5x7ggQUA9B;xk2F!7==;xve0d%fyk2 zX%~pt%QfsKKw!+wn>_^q8K@^svd?<+Wy>vfWk`%KhZ4`>cob;LD?kv`CsN1;Y|J-= zMngVzcm@Kizgd+J@Wgx<5z8{V9$5PV3U!6GmwF3!K^*3U7NJf0&0jp{nC~#0e3iY| zy3f4=^LxfxppW+qP!f`Y?2m2{WceVny!*Uho*Xn>M`?Rl?0X1_!zPZ`^lj;nn}>{S zQwP%%YK<2h%+W?eMkW57JoiZjCFw+eZ9!m`xFF^+f1^*knyNW9-8Aer%|Jh4n!n3c zxcTBa_s@GZ=bEg#5@J~6X5fTAdD%<(N0^}Lg#IE(l4&9C+r6w++6WzpQi$PgouH~AwTkvnujtLaJ2;EiOHcZ6s1CvdG9 zc^~yi*Jq%!p-PYUP*d%f@HPAbYL4^P3GQcS@bC!_^4_nN3dPPgKkXG9oplwSKY zbM1Yfm`rYRq{^vVMUVO-nhG1Dxoy--5v*#DLoiqCDlhV!!9&DEzTnzdO{zCj1SP2% z)=8DVAt(KExDn1CV+|%cgqS2>!J&1mo2D>>w0nNWzg4nAmg}FEw@2-ss5W?zK>T@{)#D!}u?Sn(mBYog#GwrbFW1^5$#Lh}`G$ZsjvJuA|(| z%Xv5Jh7lw_yADnY@3XP(A$N+#g$GKa{&DOSlLV@_qq7 zp`~18q_LQ5UmK7Mo&OtSUl{3USBlN*CD5t0T4arLwZ3z13fl?EahDdwt>TQfbR1^m z!on>zHsBf6`789g#cgGXdueG%0*S9M6kQl9b`9ye!YSQvdB7>%vBxXw3{kA>Gh*LA zN3yOt$!yp1&Og~EnFrRQbNNoEqR;)D(_bEr^wnSfhxV&UfL&yN`ZMZC$_Ksl`z{`r zgv3lSpSCy1x*@w17JM`#Y==qGn#wj}inB~HmCq||LC{E|npL(vYhP~4}v|m`BvQM4u?-$mJ1$o+M5hb0~$|>-T>y!J1 z0~sS^AC3(2c@E!XvDVnbzt!8dHhHkT&{Zg<38#OWInt)uxhd~+v6+LC%=FzDVzD!$ z3W6%ax@S93Tw`Z=)*6ROSwbz1GRYP#f%w0vVuM*=r)k+rCUKpR06!1!>Ps`RvF_*_}M<&U7FA|OB|=Z#Xe^A{R#=tcCtrKLiptGV3_U5 za5b2Ba)oAr-cv=2jB%J8m9X=EX-J5G(Djk8IkcU^Ra;45b)fT!&3uD*ui#zSxz5M` z$YJc4Db%xO^})BD0#Y<7?>Muk5YG!q4@KQ*3HN3z{HGmY3lL1$PvM^=o8di3s67pV zg6)8$P$Nu~o^$vm=(uQaUv$*wwR^d*Jfl$rFK_C)@?rQzC%W8wk?6wQ@X^sY;)#7F zmM>jr$hblhOGVyIhKv*Q!pY6+kYVByYo%-}ey)Y8BsQZ&?w#98=bh3~3E!u66|p70 zZCKJ>BDuthfLZC{#`By-IgiIs%&e^~6^_emsf~gWz(YAQ+;e&216763pOpA6FTUT8lOo@XU}|3%r64JF?=~>i5 z&x^SliC}dm9c<^EYAy>6vPEI6pbXR0b8 zk0OVgEJXb^V?iWoPS}X8xi`o?EY9SKc`&Gf0Y9`4ta##2B`pus&)v`~$kb(e_6Y9t zYT~$nHPnyev!4oA`fZjV78r-2M~?#OOZEZcAP1M{wWzU;_hzUofKn6_#-ojP7{cER zo2#9Dyl28hQ|k2Mo#GP}FBst%K`)!!zzlkzvwR3v%FJ-Fm-Y}-)4fXxy?chEaP%(9 zA_eO9-!;?Xy>Rinv=u#njR^tEZMcD{Tjagqj~z@85lx92&LS!(Zv~fc~|e(+h;U?Oc)i57MB0i6oS4ggj~B`XI``APGvfUfMbo~yUkbJ z%(`|{2d&gQ;?F0jaNxSX|5J7gpayKk7wq!p{{{xkP<4UCdBi8VN7rBx246_EI`ZHc zGwzrH;C&_GNgmuQ+cPWqu9EgpVi!_O4L1?O|5FK_)Q?qgi0nhwF4xqa3Ml28s;1r8 zpQb4qn%9^|TYQ>nxIZ`U}&8cL{Mv(Df z9M{nRL3@vl$2(LQ)>(pYu{M|sshsoS+)eSD;PoTQv>NPfo=Ayv7=<5{jRZwd&)!CY z>|nSChBn?P0)+9C)IGuVGp+-9Eb1?jv31hLIlXaCHS;HxGh~tXg{BCB(nix{neQup zkwy7C!%bjZ5bf)%{@7IU@OYk1jX?f3@?%@|_u-X%lCGbm)^YH-Fi>LAOgg#@WvYDN zF*!HB#r4^hVqkhn5=m~qY=Yy9V6BFCezeZx&0oPr9SUKHq6*g|4oXz!_8`T=UMN^Up}w8DhN>Roex zKT(!Bu3}<^`Sk({in8^PN!=GXLznv0UXB%&DPePc@Ai^Jd~F!*87TD1lI@jRk0hLE zE>0r;ElG+J>y&?#%DprR)0T@%6d!D&_Mv1d zSIs-6#^y_DBg+Ut`(1I&w(WEZ&#qp(WhE>S%bqTrolaCc=g8dM)vs_fBJ&V@*d>V# zNzP9y_5HSGx%9s(W6M;jj){l4PE{#?w4?Z=wKddbS-4&K=V@YfHsM&?wGWu#_cghA z3byM_v^LG=WAUWoiHb9xgxRgYECsLrhC9q;*I5Uy{=X5lQi%>)7nO9t>O&rympNGV zHym-VH+(CA>i=&9uDWmH`2I*SW>feEbbZ$Omo%uq9Jp;T*DkO&U z04@X5{!E9d zVy0+D2X*Ky#%8MFfaT5;*J9tUDLQOyzy)ktaHkYR4JzQj|Nr!Te^{^gudw%l{{4w5 zv_<-XvYz)7clB*wY~XEWnKS#d4N6-AG7V(0VbMzBb5H7UEjarArcgcsd(U1`9$i(= zFx=Ukf%E2S0{mr`r=J}c8!@PaxN4)f%)F)~R-I8Yx+=q)_b*qX+z4luM&G$@N~YJi zfsPQE1buZ$UN<+ULulv5^jWBe%ZilM!ud>IaD2cEqM{5=fg6bAEtR5sv2IE;2L zpE|hN$PE>!0r}LzO@q`ui=-)9EKSi;FJDzrrDDeBqZ+uTlz?aSd3Z@|N=E7E8v48r zkKp214V~U%ot9PBr_^a!r()|hOj7Ywbz3)8>bGu+)NyV&*gjY;ld1`_sH&mGmv$cG zO{!Aw@qMB$bzgU`|GF!>9016u8O4uk&eu2c(}6(AZNp~Y$;{hk zGu*qa=S8*ta06sUuHB84plw5C!wrCXkJY8a?f1Osn{-G$FPf?wdR|ne8+u+;#LcBW z?=xOD?4MrG#lhvbm8W-?#BxevUg_vHGp{X)jR*Jd1`jqfu}fl;!GldDpFZ}F^Ra&% zz!3J2Gc4c=D1`k3IeIzZ1@FuCf|D{sAp!i*S-ks)3=W-syX3YUX2Be0!EBoavomj-lbQwN zYW-QD0kc`45wlsKA+uR<(U@I!76<_2Gz$cPaZ`0eJ>xVB1b}fx+@$f>7XW?6EjbH5 zB>;$Rz!&QZ76R6Tjg|SUi1%6&%erDrY{(VG%!%Q}u~5e7@gT>p0h$uyGfSeIN^c7R z8zF~U?tr5^2OZrx@aWFLhr3HVb}5X!KpEh%(G`B!;EFsNX%~64q3yH2kaqE?`U`~C z7h51S#cYabg|R83Np`s@(udR*$1+P|0AcmaYfAw_$>=+Q!h3MNC9!*mjkLP-wyOWH zpfDy0g)vDej7dUaOcDzHyx^S>iFB1KGo(^ zeSSYcP;#3$^D0Oq0GK&2c4y{oMDlH1_vx*S#E|w0B5gE+NE3}6poK;d`}Fm4E21~- zzuV7PPAn6A&k?$71;|9*Sb`!!3qTS5UH|E=hbUC&uV%35i3pg;iO83ziHO%l#N^U- z@V~zR#4=;oSbwWBMpx6{8&TAiAdW{N{hxY&nTr0TcKsF4sQxk!FP+gB@oAsZY>r(6 zg}*8`E@O0=u(&MqHjer7vG`M=@1k99SfDphcgGoPRaP$<*^Bw&OX<4fiT^t^>;5-j z*S)zD@##){4yQ}_Sa0ra+$6G3>1mTU_e&fulSn(Gr#0T(&vBDD!w+QLn>&(d$caIS zRggDtt_3^3z>~7lh*p(Y&5z!CPY8t~y-!?q0m>r-2f zd$lc?4e?VEBOLhT%-CmR-^hUSKkOY_-6Km{|D$Kol1|UM5}PLWF6uD;*|C=Jjo}jS zS7(c(=es_4QTc|}^x`eYit%bLMUPR)%gZ+ur>`%)Vg2~#yk%oYkNEqUySe-O;?dLc zGG=Zn9*s-M%r#xXqgr!Aw?y0pYtc7Gq~>_w zjb8i3<`0h77}`fPLybC(d7cHij6Ix%P&ZRQ}Wvq=x~){@cfGq4*^%pku!_PNT~nr55Gzel2<{hpL;Pv>P` z2!IxYLci%jXn|^ zD}8XU^ecL$U+Jft!_iTsxBIft72U9XNQ1Xb=1~`+a%Jo)?B+8|CHhXuD2`3fEPh=o z7!Y@8TR>)V$2Kee(FZ5I=_5Q+(J9oisj*`n=v)pucN9lYcX@`thZVe{lrb>;U00mG zq4S zU%{5h^48+??yi8}s2+`8YEI4kd}BOt!}i42XmnwVOy&Y5(b1@Wdi(QR^;eznmak4< zU)(ruIMl4W_=b&R7NYZr-JMz7T=hXQQ>8Hupoj^zFr$!Cf%K*6rO~#opVNPvFZUL1 zZhR&yt?tXXaNW?;cz+^JXQXBa!OqszrA?jh%Z)1)M&o%19UT4#f@)VD7|3| z7jNvs5!dRpKGk0_db`&s6S<1ml+5CW+rRkC%>7PZ8oM5`ZrL~nBvx4%hu|OQ{^?kH zW#MTaKH{M+)~~Ygd@84Z@0^U@IRkp<4D6jVsCQ0g@0`KCbFT1n#(2vju`4SIPe2<8 zUimH&$_5oPSxav?UJ~8b8^Iu!M^B9Pre}PSJ>(tT4`ZKjVdj;MZw797tBVd6r4^sv z{xAkDb=Q=7zdFS>TF>-5Z)Ma93%h2%D@Z75DZT71L$lIY2j{B6wK()=C8g~v+f zo$;D}z~Vg?kYQN*UCIJhAYP5W;{;F!=+6N3HrlqAi-7)R&RrPaJYw0{SmZmIkl-_S z#YTKbw78p;mompjNhax~yP_k$gPqVB5?%u3$tUHdyLfBJ_*mUbL&itzzBA-5GKbg* zGH{8z#Yd!Cul|)rkGlpjtc~$rtvT(t<~AGgc*YlP=$j`~WEKsMUnsueT`t~Omv#O4 z=B&S_eX#(|`ChAia12v<}3pISZt0ahw;O3=Ri>iGdRaSno3PY7`fY{4`Cuh-AjyZ?jr^VXAEKUppn z0k&47N6eM|b@wJ0(X3?rpT?f`^GlaoKf4&ROV>{pjncFeKzCu+zq5jViKh4~s1U&| zqrXnh`A}hN==CHqU`i0nX<0SP=o;=fazCDBbW<{&Wi*w}GMY+f8BL|LjHc3AMpNl5 zqp5V3(Pa88meK9h->q-4jDDbRg`%>=NiCxr32$IS(Sr<*-@^!I`jD@%c(KOrI6Lpc z%t2U%->|XkV8iML)}0IKXKdZMVdKIf1IuIgWj5Ec;>^inM%{3l`LuAzmu!!WLEThPL@{%I?sdNoSU z&g;!?Mn}QQBB?=n!B(OLNpDqz)#VV5ZhnTf7?&dR(1^;L33DW_H%06Y5{Xtm%Fl4`w>=6fCyd|1Ob?3uYw!voCoRlg56%u z2bjQM`-hU~tQV2d{lq-kWT59Sai%mbhR8b@R$!a3$2XR0XM)tUlYof~ArL~&*-Xx4 zpLhl5>YoBEnBDTYP1YOqMm85RYsXEQS2^R2Gs_#>nRFOf@tVTO>F9AU!Z{xA=m4hW z+@P>|5-(}y^!Pc6kkq?_+C25ST}F-3h3*ME2PvbN_?066vll95Bq*_iqEdpJnCg;(lezW<~$bd`^K&j zvbD&mfYu6B^!iQBBOnw{=dAdx>_zQE2BnUd;SSZ$y{rT7^ zMKW#e$iQ!eg?xGl8;*)hropsUZ~pVNrty3~Z?5(?8M$06bEdE6=dsl?bXrf%=aVj# zajO4_>dy<0b<80Kp>ih!hgbRbQyTeIUgH*O1tK7Q>V-g2M(@`Gvoo!+yo*ca+4_}g zSte&+cm0Ou@bJu#Ja6t2>bbO0l8ukEQ08)_JvGPOd_2jmW*rmPeB3tl_9b=vm|^Cs z8A3|z7|qd!x16Jm|Ee5qyqXWG2S1w+>eqQePNSeL!S!7&6upz&$(&#)zgWx@!>jSU z8Il)*e~`=)ihT=Qy3z~Y4|u0Pn5$4xIbF~h4)UI}`(f{~eLAx}zHXs;=e@Dei+5p< zsMB7l4!bREq*icJ`SV5iZYL@S&irU_jg9Cm?~{q2{5*(8SP# z8PA5&S6yg_yku%N&(M0w#@o`200#m{4Mu zy{{itrcNQ|c$+*Y_&Yw&W;k+TDcZ)fFt2Z(0dQM-`A$03K9zP`-R;-TlxndNL( z=eTJL`uF`&-{|F!$P*wH*zoagex9kz>lP4YpBaYUvuNcoGmd$YPL=DVc43hn(YnpA zb0-PA7)TD}k?)?N7lxBqaK_IA&m)+st~jTS;vL>3xWwRIZ_?gkZ{h{-zK@um-0kr0 z+v4TdvE?7pl+r=XZB$_47@-+8>v2cbDY^_P=ORVcQbz*2%ETo58lxb)%eMsroeH3) zV6+*uBXA8ZK=#0OH+^Clw1=XdDoR&s_a22JMezX&~S)_Oea_B`dYvi*IL~w~Li(_vSBSY|W+G3vz02@UW5_691?XXKI|` z{Zjxs`xLC67`_OmvVv8XayV@nY6bimSPNrGf8*~C)6YJ#F+z^FPZExU;)+VSy~NAn zFsPPS01b!GhOwUZ3#s-3&L{dFvJo{bybm zidzFQ<7hD$P+zyEWj6!#ArI{Uwq0W=LUa&oRBrhTf9Mt5GXEnYIm{nJdj&L9bj(6f zR9~&xtM&jN46uX8fXFc{y4^|KXVtQEn*TB-f1AH)c}s=23Gh~ag>s|}^Zs?eIH&nP z`CVfcrpSSG=rw$jBf8gXb)c0j4I6}2AeCy+A;{{cc#9A1d*0(`c@|+iuL6{O90t-l zbI2>$>II($q3zI=*9RCZps^fS3}hR+W;Cu{Cc=+Yg3Lc3hjB$BWP zr?v52uW-MG`z^rX9iYZ}=hfJ<^O3odKe=Pa;1G9hT0p44MulC|?tz|ehX3}_mh ztgJjAbe!OIG3XLNMug$854t2MPhJeVgY>F?*z4$e=|&I4yvP~Z!D9w5V#JVp!9!Ge z$oa<#?p8aX<5upm2fTtCi)oxU|Mye{+`zc_hrD)7Oa|k1mhsXSfH8rXSvd@n>rRcr zV}#q1EfYDpv?%YK z5*X;+PY_2z&LR;UxhJ>wp7s5i_3;)~xo%K5A#%kk0bj76bJnSDm6x@inn1_+C&EkI zGr}JOylxS~ZjqtnM`|#v4@1hc2#T^F28{FU!tZf79!whudde#}_{0rfLB|s#Ahm0b zS`%LAMR-lrGP`P~!xs5pWmkJI@qWc9G*ei~U^CrLDyFr2pf(R=R z{G!epf5*-fPcHrT0ntAly)KSFdv)6&3~#_u&0!{Kc#FnTtM5)xERhQhs!&lIGh)A6 z{LvRev1YO`h9!XgRGnJRJG-$!pZ*BjE4kHyIhayUGFWdS{Q$QId;k z1*VR|lTjkGxeU-6{@y1#=vqmYMLewZ@~7ohk;0K=xEYYbYDIi)QV5pX?&WmQubuo6 zCpkj+2I`kOdi16eKggnxyw=Jh=FQ z7dZ%1M(H(xp4B?oE$q<}o;uT>1tuaE;}dc|NeB{WSqWhp?B0BFRtsd*ZYR=ja_7p0 zSsO*$Ir&{nLaS*0PSO12fq*7t(RHV2QN69UcJQe;S)8_UHY3C|{*Ee!!o;@{%OFP} zJIuq8AE>O>zH^j4Nn-=Bd-1n|e1$j&{yL+|B?HrPf`Q`+m1|>M?9JGoi?hx&3ofmY z(X~fARRzt9$5jP|N0@gmq&=NSgzFrpU3>#g%o23ZGf=cA zekhMRI(Qcb^+G2Z@Jd;%+p0Gl=b3K6tH$3M#vhZp26hLkmBq|tR5Uq>#QMIdo|yjZ zQ70gfar{$AfJq9!uTUO7SMF8c@{gy;&S5%#h@Z*&pjXuj@0#J!@7qyAh;Wp*DSpL; z^0v4xgcAR(7aaQ6yjJY3Sl3UX;+djI$K0%E+th3NdtobbO9o7bKR(`cfS?!#0;uK_ z0vTAVwY#eG6r17?d)rI$hHD&QY;C5XCR6)2CMOncW&(u?t+X8_R&q|QA{k06=f7b? z^2%F}<<6`~?BFBtqc`qmYV~`#(wlRLQF?5@?hdMj^Cr^~i28uQaS`=lh=$edE6d&4 zegmqP>u2Z@Cy)z%nD+9}(Kd zlu1W${FRGojB_yHM*r|?9#FgLT1+COd+Qg*Z2OL>Ja@kLXg0dNx})TWdG_t%$sNN} zI58Nrb^Qx*#C5b9PtWm4{KLu+_J@rRmdgXAj8Kl_Zw<9AXb4zI<`_q}uJ%^6rh8Q_ zg{yxy$a|?3)Ac|8P#74xo&H+&t7KBKrR{qE;@woA~S3`QBEL;*^gu7jX`O>e{38KHSyq>7w+;GI^ z@l%KT>Vs0$BcQEy#t(6;x zNOC*y)K&U91zPI1=NBx{jhDZ~MM>dWM1Do=$AUk5DT?&K(&@ChGe;MmYMA}UX#}5( zr=Q|<^HB4>78kJ0yynIe0%OpHMZ>9}Ji3xYx>QF+>^8aF5HX=ad@KJ#vAbY1IEJ2~ z1It)VWM4$M1zbUL$w0rSj4Iu_GPmpe5sqN8(?WNuI;?GKKQE@FHo5XQD{2AQoEhS7 zs*8Dm%P)*kMf0oHX`SAQyZ>`}4KxCNhX}!Zg6#lYKM0DzM zD+U3=&xBCpD)RDpZUNQ<-upl(lBA;K2mPGZ(xy{&e`0kL3K>yz)6C&dp`GAcBY1I> z68e4XI-N656n+k|U#bRKX8=QP;zvAIM3>|(=4v12EkZZ_%#x?s9!H3K){&ri-|+!{ zs&n~~wdczgDMtfb%Q$G{rrNd1;-H0^owhm@WsN31)a+oSSSD5W46#vM=G+QOHt>-O z9;R9=Ztt9QwS&zWMzW~k+#s(hqIY6}I?^RNYe8qJ5b~yelF5MT{Emm0oXx zeu{@f)KJ1tzf*e6ufzFGN2@sv5%e)Qzd0XD<-~ml-op#YJK)6+qT4)*Zu7VoKhE5M zZQYEja+~xG@fH#|+j)f|wFj3tOpk08xr3?RRr0Vm!}L`2O;P9We#eMo~liab`57ltrVXvj-=aC zwn@K+dQI?8Q$r#^z>XRgYB`j8EpIVpwPRD%`NZsV;vgJ0I@!Nqz+WA`CXHh*6>>)< zUpFDIVCYjy{tC&w=!D*a?1z>1XQn_QZ0EZhX3e`Ja#1uI10-K}Sosncpqy#s4wf~{D z=P0?lmpbR1b^h_@lDwtRZSTdVyw`LsI5_h&PYpx8u?^cb-g#@Z85! z1r%%)wS^$?sx=h*40HTzz~>2AsBaXxNCjVKr}OJ@FJFdPFESV)6x*rC1mc4BGO@RK zIno;M0;}I;`kiCJUWn{~zyT%N0VPs!2f*7imrbQ(bJ-4>cT9=ei-2e?eBRMY)}WgAePsf-A1G=a>JDz(rM3(o5@)fI;_~Tp`?fDw z>n~JIjkz&zu1asN?bjS4taf{bNKG!I2cwd)6ola9vJ3`eAkSHPjzS?U`Jj@=1xUYH z=~(kk)Y|6W>BtDBcZ8m8wI^1eMT`Rt7U^Z+u7K_`QO0O=aCoqJg?9ink}b0EJ*=St zxAVMeW*hr(%p98Tmd6WKqhN={@b%t!HTsd*f-y{Tf4C2S_%r&W_*suuu;?xX7VfYN zQQ0EeZ`mk76wiM+YJ_Z0nakQ0Xb^YmLUudk-yO%uWJe$Q7&E`j?y`)qL8~UhBb95Wr+)c;Kfc`*WR54r`~9W$sc3r^OEN zGpWM{rCD*SKP-dvEalC=Y@i-atJ1mJL!>c;3otAdZROcO%re2=3@DYFQ$Ckz8_LWr z7DN??)itu%+Bi3;-f5 zds>(Zr9OvZ^L^BB%yMYeVV4EMYEhN?wjI{2oyOW7s6won5z$HmKUa&5&s6N;=s<-`xSJ0&Z?1sja6B=8&-k9q! zpT@j=8MJ_R6OV8ST0p1+2tPSewYJ*6{JUO+76Ld^?SRpbw=)&^3m@_|K(M72#OSae zi`MT@s+g2sehGm{eb(#jeiNt1t65^}I|=W31&6%(e+7P!3X+i|vyF*)v$@mWG>LUw z!Z6qcZC>L~`co3+ES1r`T$UIWim-23utLU2>9&SDlE@nYud$9dXaagq+vS_@J}OTXd~qopYO0$tbe{fq6Den9>u_DbVgoWT;yB{xl9ZJlDY=Oz@tpsyj*?Op-o zYsR&bZnan&iz>AtC##`@}(_EZ;oi8t@yPyxOI?Hn|o2WIe#H z5c~xkT8rVlT41zfD!`_d4ml*t2`OZ)Ru&ua!4740G>6VLp2Yy_-*{1nSU3G17&e~i z=gs?fFde)uLr{+l5;bmNn)0#B#S!i%`5>+4FWf;GVHaSZISe^tPjPOCI-qUGfa!=H z$SOqJgfkFDgbX_xMF`0VAP={YEb@;_phhJx_!+G!U`V>;&*aoh=<>uu>$bR+TIET#f zs@3AKkH#<=1Z2STqFzw!CdpB%L=YzZ?=%wd5Nu+QaTvDwaF0)l;=L`Gd@x4*9je6?|X3#iP8O7(^xPH4x`2 zY>1hxm_ErFh?+Of8cKmTz<}{Z>dqjs=4>2kazDYzn|Cv}ivo zi$LwGwdzC62w6R@cl(B-v#d$5@vY^LC*S#X6l;{~5G;M1xufv8~KMjsXy2L!w~&b(mN ztgBT~r(jH?7y}L&N1cMjp`R@F04f33@5sAmd;rtnXIF|D?!`O%_St>-<(-VZ_+^5m z!h6_RK1TAZq>IFpN~%^V7ZxMlOX^!p?_c$N*=kFUea(jm3?h^z)iz1Hc_o6yZE7qldkDgUFM> z%0>S|&2a17!)y-t$sS^OA$Bev0Yqe@OnfXm$8#IoK`PMf7ZCHG%7qu|e9bRVX9X(q zuxRz)<+Y*rk=prJevuj;l&Gr|bT_4nCLUqg)JQC)Jqjl+z<^OqepKhS7v$p?DNsSN zVR+kRLm`b)V&Fik3#;Z$hF;vCy_}DD_fzh=6}rQsFnrxA-34#lWC`tF&43-cgDXHr zVV4wvFF10mWg;t#d`EZJ_%M<5Fmk7#$3yVCUG{*WffdpDZx^ZX&ebWpH%!v)w%bjfHIPv;>uOYVm{DMn&8yh`vR2y7VL9f}dG*VqOP zwy|Rgt538X5$I>OJIDNcW>dnEbF5WelDh_!$$T1d(5m9T-e)Oet zsWlweH*nO;k-=bOD^GJ^iEmlA8$eC`0Ge_h9u{5FRw@ZFb%e1&TW;WMgJS~I$Cgd$@la+zZH_Y~`yGl~s4d8Nj2A@T)by?qJ=~k|gKwl0B5U+ouW=Y}A!6uD9EDVOz#aFV!Qz%BI)J%$e`r$S zX59CB$Ln3e;qaUM9nskGtc|?h@XX}2nT*axFH&8^m_IU#pD8y>+q{v9BlWhOZg8wz zCL1JllVC=wl$(C53-G#)LEY{Z?5LN8CA7zxd~ub=a5q;e6xmLnjJ_EHGzCwVveT&7 z5`T#{F6CcA5O=TX8d89vy03qb>!=uj0kNGrUipL0N1%+_sd;yB3XVW7(JuSY7zc`| zOW&HDMgiVtAuq3&;ZVR? zc{f$WnyegZpbzbv(dXQAbH-Qk?)z#v%sQu%Q|HsqV^Iwjsij`i`Ak|x`%|}SRYWvBV$d$A*PA7s|J(xYMkH9s0dSm{qt6;lZ%MCb$Wa~H7A=#6Zz04pqF1JBql)@C?Ne#~R=6(x9)N!`P-krJNEKQ<=!28Ze0>V?-GKRgP@hs z6}(U}x~=Xe@~s@f*9|f6jJ{^i<2g(Q$3xDe!)u1nc%wHz{ap|=6noXOeMD{e_T;p> zaXm091zBJ9k(S--eLiAhVB544AU*3~)j*e6Z1Lpr=AL5aCYF=8hz^!kX^a|Q;Suf+ z#!uAkGdF(d+P(Rm zEFZuGQz*XjfK-G%R8shi+7ZNHzz9OiLjZY8AdNaDvmEimX$z zH*NI~S=r*#3gByN72ls;=UfC4#eIW*GdG&Rao}6(Z-C~|-Mcbb!%(J9!@N_Py0>~X zzdHSczF1RX1!egwfeh`KX&SgwK3up&QPjLbUZLq6hkH`tNeQr>25ooRNkV%#BT14w zN#-y7zVNhNErd~>u6W?+zu^GibWRNuIxW^{D6^uu2sPAf!cx@cvbGWU_!z|k<_{B+ zClz}j`V9v#vzL{7YEy}AqiPf%jIOe?$X-jfjP7^B(kd`_c&D<8hLg3CEc7Pv70Oy+ zZ+SJfxis`N(3-7H049`Nssgn^9yDLrj0&ECqdhaJeuySn{k8nYyGGc3rQKH*u1-jw z;uUbLcuR=5BzzFZ%~=CO97GY_#6oeamor*R?ktT6o4M1p)y0VD13o+7mHQvOe=T*4 z@-WYctWQq;oiy-)QOF2z!QuCMEhgGZU+LK?JerzFPT7CH=^E$)r0T_1o!;^mArj^t z@tW>p^)*DG!YDiagp$AKcxP7>nGfb|2uyTZX`~{Z`anF-((w-b@oGd*fc4kQK#vovb zyTW$z-09N-tuRo3{`+kS`cAS81*pc=xSTY9u)eyTJ8+*^rl? z`_JiJKTw#`b<5;a-qyL&zb^N$uld(kx%N4q9gjCieCk|q4OGs0(VbBhvB!(N;8g@Z z6#bbDQRqwHjve`riJa{et<>NfMzg!xt??Fh!1n7g{(4({uJFg*h?}r8iO!6?llzhB zxJP?VDC2KK)FF{K=TTXlO(AF!WD@8@kG+EId)~Sxtv+9il;&2Y<`z-dvnZVC6M-{}YRK&~VY3I1I((gs5 z$l3v>d(8o|!|m#fnLV%4D`wcNpYTe4CbawkV#makg?u1aKaU!Q9FtHwkfXcJ$y>13sy+>9}l|CcG z)S5^0^c>RuQTTl&5;Z@#l^3>7s=tbW`}^v1`0c14(UogYW%g9rHGwOkoJ8n)QMjO& zlTR;E!ty&A>^e^+MY;azh3~;7+z+#^&W|vKWq`-(ewT zYHXph)k0r9NU?K|4UG2Z$NaXh5?z2slnkT_+u{s8XnXdgy)ZBUW9~m=(>?6Dfq{T& zK!?3Ha5#6N#+5}Wwci_ydh~r&#nE+9LU~B3SJ6!D-?jyTsn8|CV7<720%vpeuaX{dR^g+-y} zCkXg_I<)B+LgB~C=lqr}x@xv5ifln~RsFRv;x04VWSJpYTaI>_)za8`K5Ad!AkwvZ ztvEhzO8Sg(U=EBq_OFBh3q{w2HlfXa&Al3P?O=kBg9$C8_E2=WU+Zhu#87l&sPSz2 zEV-UosI3QF;1J}&p7Fw|Vz`Dny4DCuMs%ByDo$vBPtZ(Kj$m8>n7r-KRCY!9lYna zQUQn2gAIoURP@JD7S`mj37eIwDpO5ut2%}eWJmnk2<9X(RH1GdNatM@F0Y^+I z%)qg=Y1K@&%FU&4{uqSv;@Ed>^ov!g?kc0p*Sk?Fo06^_p}BuVF*jJwpFA~Q<+0bc zt7v&_d0f}jczN>=!JC&ym%HrfYnGiHv)?6FlgmENb9Bx7UW-AtfqS#%EI+;5gvG*B z$#^KS+qYE2iqBL$IJhD@s3bZ*lX$5acSUc{9NSis$@uajMK~v{Jbfc!R4cra_}#IR zH!>@tWr4Obn;YfP+02b1n-JQQD{sC%D?|h>ZPkSc=sxqMu70NS7rvzC{sY9QFG_1G ztFj;+ZDkKIHOi)>MQ06(R*#5|zbVv)(9GA{${gafmF3#=gKKR)W`9!ytzw;~vocROwzn~ga(hilr;1%4l_)XZm`NJS&Dr64d?Yh&^S1eB4 zy`?+(^kh$LlXiNd^B|(S$vgNNR$WD%G)fSCOMEG<<Le=Y0PDsTQ@Kx)-@NoMBMu7|hb z-DTYd3nGgSwDnzDOnn_YC6SY+$(o)VQ~t(Jy+SJ1!_&klle!)}V3Efe2#XX9cvp9L z7{5l&+Tw{_!ddS#&rFP$MbZWNhOPm|oTw>1zivK)ge)Q5|HP`xmcAU|ewEp8q>0Vse<;)u?vont=aQu$vdV zQ-?=MEaY?{KDe8_cEo$ktQb>?wvw%6T^6=;k>ORbW@T4_)b)~8xVCfckbr>mBomK= ztoCzT)8R!vVSu#nJNYAj=#XRXcx?ro>W%Em;BLm|#(*Vy&ZZ9J&A@<{c#>$D5iffn zz0dg=_p+2VKy2dUCZkKL%WDX|E=mJoX6Y=+TZo)r*z!9)YEKUxWP?mG5JC7?(p-c? zS4p(R`|ghz&WZ;)gPC4)z(lZhMYyNj2@2Pnz*`dIQhf-<`)?yr$BD9K=7ghxvHVKVfGYkd4I$@RuOw%D|cm- z^~Tu2M2u8|#?=iPJGw3~Wab!Dl7YJ(tP5mvbO&J{>%K_zwSJ||Rp}+st2qt=J~c3G z3~IxEnTaWS^~?QP6cHgc;LekYAc)8GS^Fn{rp4du>(8`^=g!aEobqQ{$a9ZB(-S;} z6Qgg*w)c_ns=WMbxJ>0-2UwYE3?0X##wH|?e49efw~4)j@nKH<0Wt3jcoVY^v}$v$ zrs^gpHm5wACVV0*nywoTrc?KD9-4hZ{tl*J0Mn$k@>GRdC0eIPOW|WWTFl-;_^xi5M)~J z@v}b3W~K;&^X*q6dzPGp-DPF1=q{NQBc-s%w-99$qasGf_bf|O(N>a#) zN@Gg7&V22+pjt?6VnJML_B*X%T0&4VlXrP0Sk= zE2@Gx+#Ku2@2waq+zyLdBpg5on><*Vl1+J2fmhMO*YX|`+^`^y9(2aTf@AOawa*@w zHoQE#KDte38?p1(lvjkVSvuQMTq~NF4df^;7OrWV|s-S7?B>sVXn?Bnj(1%4je0Xd( zRhy}n z^dBVgpnBU*;vo{wlW<Jl^-VvIomAgW z&YFUIP94ww!YB&dZLAz?Vw_}v82`YW`7AUDdGaogud$;ExeEeudGD}}4w&^jQ%Z!_ zGk6*aJcLH@(dno`6CZ*C?mm~coKEcLSzF{q*83`vlpL0aEQBqVi#Hh{SYQSzvJHT8 zi{pUCk%R+mUXXBD{;^YKs?W9KRmfzR%8W?xT zj&ox!j*YKkbL<7uiep!C_kHfzrF)qRWNI-N{o_^#ZR(# z=|LWSfO?D6^cES7;lc)o;emiygqVF`(SRF&3%fXoS@m8${2|AbGRam80YobSICm(f z*&2cX>>~n6{Xi!E?pZL$5`f}+ArwKe>@^58sNX5B=?g8fU_@*PlBFLU3PD_*VC<@g zOGiEs(&$GYizsPi`fp4mQ*5TdEzj9Q!AWnypSz`W{Qct^Z^NY;_eXb zXr_g#kxjP+d%)ro&n=QaQppzTHM8v_O6nw!pgod}k8`U(ROx#BfLoJ159-3O=_c6f_!-kLi6NIV2q?6(taNyGzCaPsK^ln=hhvL;s!#F;ytJSgwTk z@DVJW>X3TlLw%fqcUlCkGb;hZ%9N;P0nIF?Ph9iPY1lRVyyliB zZ{jWA{*??*vxUZiak=(k$WB4r%g0y&^5Nw#F>`5hd>Q>@2$D+y!Y(_w!j>bSoH4=}qQtb}7%ddMP!Ub7Pc{B7b>isk1o}O*5;Fh`s^eBrtxAtc1pIF^%oV0lJdtI1}5E? z%X>14WY*!X+bCas@L{6bnnWLf)j+GpKHhz9t0s zIY9BKQ+aY^K~GgwIla67D)#9qJ{@ZjZ6%{igihNo9zMMWP8o!{P=wqR9IW^Ff{v5c zE83aRM%+}D)!es$O_-nXYzBDxh^Y)TFxXW<<%tqW$8dQiBt>xKcm9>(o2bp&TRa-f zWB|msWOD0&!gl3@BcD*YY6Lo4G3X5SiOQHk0`y4~jO|4t%2K&hny6*ClWP`}59-F7 zE)FISoq~jNSct-6tfy=Du0}tqT5wJj`f2XhW3^v)+z)VqGLkcV`R(9fe8YxMkD>|eko46zKUA_RP8>AK)W%!eN?cv5C!9ABEgcw7a{Q9veL5TB)5byf0$gkfEPBetT z@I?p#SJZ}Ly-@q8zUH6;RUr{PrwK%n+@bGKX?VMCj_C)(m+&@T_Qw^|@gGq&FR9gUQvD$f zt$x@Q1}SE!HNBBSWY=o4kf&0wO1cq4q`g>F;vmIgBcg^E2fg_%Y*7Hc2PpPxUW4_g z$#6v2Q!Re+6qR%fH@fLH-WiY$NJ9^npr3bGqM6F~KcEhWUi|w7le4nt(;+2&iB{=G%Xh^ z=N51Nm$b4QOBMt)lUF20x~2Yes{ktdG-#U|v@yxXaDx#(fb2FPLr=E7K%EfD^lu<16CEX;kVa&IAjt!`AX!Z z8e>e*{KIsM#!h2)!DkM5?-yVz$RvjJO||TfV2vZB2o z1qOVeuT5(2sbI7!s6JBI;uUm?$#ASQ(V%~9pQ{=2EWKDookLexL+SD46>!!t477{T z(33l4_E#W#G}k6?zVys!2orB|C3!%mz3DSkko0!TcZ@^NH1-)(Y7zTs)h*?wkojD& zw#a)iZbAV-+z2%J6XUAJ=OY~3bm3;Pfy2MTbdM4(Q?5AhTs^o~O0dMt$fI_tGPc1q zG5%iAXL!M7c}gXAurY^#!+>h-Dd?CHfQ?-xmGF(Pyb2g6%5DCEcFRQQRSn7IMpMus z2K`8_F(#cPF$9NPA4A;qPY6Fu<`dgsVxUPDnl0gvW{!C3vkn!$=vCkG)1MnE5KFWz zv4BqW!hqql%*Oz@Zq_j{AlqTU8N+~Myz5Om)AfzZj`}}Y&Amo_or=pt>7r3T%c{qy z*AHM9v5PYUX^R8X*&Z<6(WsXvo+TVDekx!XOUrYP&@wkAHzU^4>qGqD#LS)iXYf7X z2X4o>{8dUe>B^$w+BV#271%yA_|%_(8bZTj=1%rsze3Nky3yo>`eAwxWD?S(kdRz4 z14B=%7;GV6cgdU=)u7gaH&%vc6I!))N&v(~ag8^5 zqnGa-xOHt%`>6NjBzZHpxCV%$1{>*!92UJVSOe ze?gv~QcVi|mo&;QMuB2_9eD+!)Fji*i5d@p5Z>j z7nz9in`RO87M$exMZWW{GPNRZ;>KIhNh*CxP7iOv4l72ey7k=f?ux{lDgysAE?1}3B{FBOfwOT zoSd0&Az0ud2{28Vd)%| z9)KyV$wi^XW*0*E3e-wCF=7x8>lf#^2km`rU5JRe2SckGS{C?oTBbcSv=7)z>_Xja z0!PZsRq6`d3|VG=$?#j*!*|1DHUapn`5VKOcq*5hJEcm;1|YtVs<^s|Pkl(khm%=w zrr5t|!(}rgSF;78D__ZWUTgPXLzs(q_Pl0UJ+HOsHI{d_m4cXP9MVf*vZv_P_9d6> zzkm$~;fFqUCO8ta5V0}7bnP?MFmGWutu~fE&XT`5mCVkl(=yLcrXVCsloX8=u7Y;DFpV4Fa@T$$U;ErMjSC_J;jbmIiGLmh+3L^jFytmJ3n?4;QK!ba-(yvn>)W zQ!4XQF;%QOP~w3#-V_4S#9EY<-?)*BKWXAEjI2vn+#7cnwi13p(@)7nSDO&M+$lP| z2k6U)JP#Y~DQGv=dVwFVRQ-YPtU?O9>6X4us4N`SuAmgPX>7= z#@Qw>(74lHqB%9K2*ut5?8d(3P1%U*hi0`aGyi+tx`+Rwg*E3ml3w9CX;+9SF%EVN9%dF&4vYWwYL) z%j{Wf_i_$MX>C#XR2Tyv{1kSpF!L1XC4*++Pkj)Yxj=o@UMgFuOhL(^QfPvyvU$2R zf+#bw1r9^|gY5CK)w@a}Y6~LjDsTgZxE=hn9^7~HGN~+sAfxOKTNF4`{+bp+TtavY zyFd-I^U`KYd_?{K3PLikdkCax_94NuWI$F)fWoKv~gH8wq$Y3oKkAk07t$8aBaJpM{#SAYMaS)G|IIZC)~hQN-I{8iR$n@nrBQg zCSw)*YQ~JgC4(n#*oY@utZ9J(>;7Id=K*>XiZy;;J)8%FAmjg;*lHM9s<7bc1D4;> z@H7V*fT35T?$v0Mi`*j1hFjG;2M&U*;>KsaPDbB*!3Of8-go|-v5^w{VXiD~bcbIW z{g`XC^~QbC;4fV)xI6s>e{0R6FSSv+5tJ6oh+0$n`nP>VZYRmSb$T{Rw}N;Rr16Qc zYm7|%tG_dS#5Ovg=@nF?kJw4e`6{jo{6;MLlQbaGQk%ls@`5}m6(tq>t_7Rw^EEz5 zZ8$`jvY)}CnaQ{~W|2kPA8Y9vpaJQIhF~|s?~=R*peut1FZ(U^aHF&7kQoQ?Y`7JZ zj^|av-0^&Fv*0}jXeyjYAUxa)&M5MN->MQ%Hg+mCV*a0_F#o5S;&aZRkibIo>WwUV z$Fb!ILgwOa3;EfA-cfd{qB{`0{USOYvR<`d{+v?~+->J6_<^XxyX$kTxtgh69%~|z zuoCmo%~1P(axjMBo%5nH=OHNk<$UaxYbpQQ^jTS9w9uf{u$9CpnXv;9)t;862G$+% z9kK}8p)xWll{QCW_{zJf>;vg2oK$|n+K18GotZVsBAUxE<36AGGP3Td3Kl)HHkIswu7vG&V@mXR zh(>kOsBS&n@-1+Pe6z3Xme&1``4GdKxR*)c0)(CbF4OTQvE{~o zOAN>i78{vKi;aI%+E)z2rzI^mex$S>i;chG@ef*TyaGNriw&Wp<6h`ADkl%FMf8zL z;lcpd4OWq}m=80myx@aVsdFq4#WmOB0~5j1g3m!JSAs%3v0OllQ(W8*7cKRuhp~pu zVr<3mq#+a!GJ)CvQP8^U$C7iEnyso1z>wGJWh_gyA_?wVA&Tt!vJ0L@FJ3i)Iu_H~ z5PdFBL3^EX#-mDT%A3Z8MXZ*K{&CxYrbz!p8)m0N9R7$r0e3NpiVQ`EYQavogKczE z@wjC;rdmYfF;2^r5uQX0g*WvPi|*a4rSN_&g@!zY{i75`9iouxjvX`b5Ho1AS7`w;}yx9 z#y=KMDxN5@@l2DZw)3E_V5A!8kfIWWI4-QoCU$ug2lhIxmKK;u$S-gIr7%AViadh2+xcv0j0R<{j`TkP1vxug5-ti5?=QBF$L2u3>GrkD=I}W$_ep^*9Jk-Kq9$fvjk@F z`;ZF?s`_(W^iPCN%-zFBRcVDnEowi469~0&M*;yB*J)!FO3WlGZGi)B|&^hFj{5!w!!Zh8glLQ$+O=SLwcXcq~vNQe(_{#+gtjr=fxOAIGj z&X*W@q0zE$!KB}Lz3Le{y-svmoB_fgL41(zvY}H1E)}cU0|N0`3xgTcy zx?k%~{ML29*In?&RhH0!7H+-n6zB+MHzDaXc;i~j1l4cc#9fJZ4UNNSS`KyL8?8Kd z{10BIdMr5mX=UzU8E_eJl`1xu&yRA z8=={3KEg;ns32%NZ8$IR%5g#M6jM?5;zA=FbYai1Ef`vwg_nwE{+z1376CDv2^OR zof)TPW}LQTZL76Kt9DGdBtb<3C~{E=_Y)2vc;PO2zrVH5EeKv_I`jVjpZCoN&fa_N zwbowiS@xUARm)HD6+}%WM7;8QN zoep9yMrId;OylB~71Ua5(N`giG|^bayiZ-2l7K5W!AMQId@eOm0+n*>s`M`9#3;-c z+$2xTa3FXbD<9@qD*rRJ3nO4I2k2Jqgl;ZlQj#6I@1UlkN=$wPMr;+B{oD{Ih?}Ij z`iutL-5#H-Fq8uemBvIBiHlEG+WYadlL&GqAfSoYD;W^+@Xnl?GS||SWIK`PT=JcZ zJ23;TMLyH%`0Oj?v1>Fx@MGc{&knci|2_e?C|%Nuik~_Q6m&ew%V=NCOd#S@*bxjN zl{pAYKr)QmyD|f>xcWls0$2nJMmGngIw&5ghIu<2}xcDCz614ki`&(6yK1OyV+G#l(e_Y}jL<`~wr_r#hX7y!BY z{Vi7-nB16tM;-=y3^UU&@?&mcX528}1EoupXZBg>yBHjdG}psos#D1rq?3@~f*|g) zqy(j2cQA;9`96X{*xc`6(gC4Crso@C^!s8SyDm|hfW$Os$w9O*_$sxJWkp|(9}edD ze&I!DmZzveTaQ(06h}O!Qy;iIxNqWzme#Uu~9)+Vb5B&JV`4$r^oNK;euG6~ulja-HU{>X6+Hvb_u4kB8 zW+t4&DI&v&O)!QG=5$U!KjXQ=fb1wfBxDrYKzk4th-k)LI8687^@Zem=kj28_e2Z|tKRAD( zp^bl)d9Uz|3WugYZZ}15<#@G>Bp+KmMM>jTIR1)Lk_Md-zH!7~y1P*ss)z~SI6gHI zzEQhB70~YQnOvl3S0S3jY*HNefcO~p`|6vPfVd`0wxs)Hc~x0r zj4hhQC}S(O)nRO-Y-@BGMc=4ZRI!2KTg9uMeHBftpU3A6h+M4oQ{0!&=42M`)+qsb)g$lA(+cR7sAIFe(S+>L#|?varWzx82k0GVZV|{ zfmKyz)F$Gmw2qeI$8K!-#efkwjqa>)qOO&Vpg*Kay2E*8i`=j|1j1IhLni%)i=D`@ zWq2M-+jO4Zo@Hhbr&H5_xf4bY$CH{bnU(dx4$dU#T2CtHJ|rkgjE2Pg`JH&3hEUjO zGO3GTI-9puT!rXF16Ie z>%8@B;9&y;H1EjQ2~EnWke%PnFd;hys0RK+T6r%{@_|Dl*8yH92<*}*y^&JCaVW3i zu{%4c&KESXJ9T^JWG22?boXvp@6R%qp#wc8Gtcqa{8{*@S$bD)zA_k%2sdNXd(Epp^Vkl4;HWr`o&A^&aDF(jPaXc@uB-R|t?H=-5vr z=u9VB6d%1J7A&}v_B*a7QCj0fV`YkRl;EAz0M3tsoT5>et|Z3B#Hf!H>xxRf?vD=b z`6?xtKgx#U9a=*3?m(p8^eaqNAe22qtSY{0GdaogUyHALGnE=8PpJu2(+qSWrgz6T zsOI~heql^ZCdu%s*%~{Vyx0~+Q>z)sbjYyor1tf!yi$R|hefZ#Ccz$cBlTrv@MF`D3&Fp@{J%{0!c zY&D5au^)lfZY+_9?&Nffp^*Rq%LwRrpVStvA^CI9Q$o2CYP3fg#2TOTd8^8?X8@mt z|C0+P8DU48Bs@S)fT5TPM~zS$Q`SlSPT!AM2JhLQHb*WZEJ=Sw5p9k~5j8O5oBvZ$ zM6H4}%|YZJGZBR+1ras=EGEgc(=@r6Ta8}7pERh=1QGous{v;~_chp;MrFw%M2!aQ z_Of^gQRg`kLR8Nf+#1FJgWD|0XDlMu>)JDf=&c_cLex>peS8$riNJKhDk<}leA&@b zpz)XJ_$)C*W3}dex-gqoM0u(X_DI1Gv28M#^zR(R=ucGYc29+dnO1Lo_ zr$TP>l)^E{wMgYseIaA2r~!R_zBEkH_(rBtY{N?#4QR-~c7pFS_nD_e`II5)7NN{0 zP$nj`Jp^w^#+_vOKI#HjsbsW>xcI&0ToT&r7JlDZA8*Mf*hdFSh7Kd7ZH4J=rIJd_ zH1Snuc70#WE&;__k0S#zb{?cw-Yt>QCP>j5o{Yw$ayC=C;sd?BlX=PslujHOIYC{D z+j)R+g7CDSIfEl#OpFlcO%3JPAOVV(g_1uAMCc!LAY2lW6Eh2i+`xBXf+d865$3RO zoD~p4?oD36%vmAF&1{#Km{ye4{8X@paV)XXL>kYF4i>o==UmJnqMm>dX=G>QXIVpE zw-%p93=li&%0x0M$nVqhxunNYW>B92kMt2!rn?9GEaA@ExVV`M(I-JD1m>7h?2&y4 zxPc@${98UD{#Zr`^f z@0VKtwyrMX`x#+!eH^pH8I%nK0ZqT28&-valIuM^&LAVWqEm0=>1g~xQ?EB@8c73* zq-dIn5U<5*e4dtT(EI3Tl0kZga+L!tBO-L^uycd*D~P6e-%UhP1X6^)JfzdwkcX(` zM9V0_tE}v3N$G(dvo7;CH<}DVo=V`$79`6n6s&w@Bz>v;A8~wIeJ}Vai(gzR3e1XE zrNc7|BqwGu&omB>id&32YUmE@fz_w^=Cms)+d zr!VlOws&{R{)1uVGxKq(ntx+vWLEr^8;S7$-%hUa*y^UOS1!RWM(X?eWwy)Y>8rnFtp<0c5&Su9T8${;8b`C zy8DfN^h4ZRFgu4ynHlT_aZQ7gH?DFyalCrAk2BC2$18yaw&hi;reXLcj|SYoad>w8 zjGd6`@5CmliM9A1ACS*r1zvp@G?!}lAwM0Ox*MGyP=_IPjLnz-aF0~YL*X3e&&^fs z@lJ*3&QL+)gk+pgP58y#s$J|a)-sd6ylkFfV5Z=i`C(nH#(Em{!L%Y-en&w>>%OC5 zLqH?5V|bTNjBU6W69P9H{(%^7uk89awq1PtTl@Il0cbL{%NtqSe%CJG3D-d!6izJS zEOXSRSZ%)rL-W?0eleWr`X)8#0fd3_%YI+JP zF>=%LlrqyTL?ZN1)SxXr>^*hLpUk@@l)UcA@QXW(O4N};be7T z&PyV#6PZNJbzV{yhVmD4#TLoy)Ae=zOiS1A=*+ppsp)R!!je;&djyj)(!9j~4a4VqgkiAC~s93`gNTcBM zN$`8ffgfga=O^YM^zx7-aWem0kJM@dS2V3TtBqpSjqMrso$hwbH4xiy_83Mv>ohe* z2lzifkT2SdttjLGJYE}xHOBAr@5_f09M{M=aZSK`Y*H072ZGKV-R8_u*}97@ zO0FVS*x|UFsR#dhHzix&Gt&zXy+f%q>J{r28OJwcLegs8Dvddhx3u$k#JUw%WO}!W z#1mH4F=ei5r;8Y&wysmWP}I+EB8Ro^)dO+C6*1F|c`HhBwNWvJZEID>i@RJ?TOd0-z0!}D) z#W?DuTb)FUVKcyM<4&qDFdRR@_?f^Nrig5DDqhEmX5isE5E%0+b99B*nhMgpu70Fm zSUs6@ymT@HV$MVQq6xD=Gc_uNeebc~XvZcPQYUwIy>7vgcutmM&*~PMwX#MG_EN32 z=q2?9lk6~Gy2D`7c9viYK{$=+Qb0IFR3sUl@r$>`q`_m=OhUalX5>>}qU_)!O0y;t z%QgoiF~uLn9*hkw?k&bfVIAli+Yb@O%Cwg`9BrUmj#^QNfQoh)5$)(&p2Y?+#TtXv z-Ara(O>+sx(1)&PLUuACYnn08+N#5~wlP~H#!as|s5Ng^bJrT^vVeSu-pWyMAc)KC zm&HVf%#*XXOC{F21%STEu%jt=gMO{A4$u#VRfcb+3%G45-~`y4%~@$OaM&PQ4(B~k z+*f-EzXxiwhpj*(fY_^-lvGoH%We?xmNy1wsm?Pr} z{ae8~nXLyN<1Jy10I@lync!HHFfALpxppAjcde_f4|OtFCHb4WxMWQZ6)F#;fvdNfhBx4R`hs}k&}SO6)yodv+GblnrTXV?O>Yx zYVAd)6%WT@1wMAk)P*c9wb#<0aP4p)AuDzEFs&;fs6#tyFO!uUYYYtIlznY|kc&cs zw6rrstGhPysJ8@*0e6nqmeDFT0FyeR_!<~p3lMe+1BULX9SR~7TV~4M-$pMdJ*6CZGDh%GY(b4ZT`Kd>B!Q?q5;MU&sj{Juvbx942K<` zpHNv=o(qnsP=^YUmx;amajvTWn^H zHN5Pu3xOA=-R>RCz?WnI(?ABES6Ky)G|#Ll1;hs=aidjmUw%0$*b{bIId}vL$K9Y# z6>%duyg*KpRj+A>U-dF1ABqoJxbgI=#B*1(gT;F{tUI_Oa;wR+h9o$K%IzXjReKm2 zAtQs*MQuje0ybB^D`2u(DUetdYqT4m+}7?cfrCAv&KfuO#+?fPl&(A-nMgUJyFizi z9mn{byfa#EacC}8nX`M^q~su@arp>5z|3M`>$xWNx$7rvMVy&C7EU0|T8Blp-5E1DOWeh`!+QMQs5Wcp);Wk4} zxQO-4?J`ZCF44Xet}G-)-oh@g0_n`vXV zAS`#4wIm!z&n940=GHd!mlQNiI_C#-?E&uw9nZo#OSQH7pl??#FT*%8r0 zAPkh?87c;joyih_F}f1867JI>=TTnXnsjyD-Mp4{^7|OEz2e3#t>L&;|F^!jW^|+7 z{xznSBYKx_6P+Ypr1crvkEvYQ0LGU`GCKIbyC`)X<2p4!;iJ2b=_ zZ8>`8@Qk~iO(79T+%(TqJA&WPw6|eQbRSAP(H_+ulI{oQx)RMGVxTe3}g39yj)Bs;QCVuwFqDnh@$ zmiwD7%l&Pr()ZAx-^l;FJXXQ1a^l=q8>jRJ>X09}Rpke(E+a44H|u*8IA!I02$#b~ zef~jk7u+P|ElbUwCFYRU50+qliS%4v11xI?S$J7@vDQ6m*j9OE<7V>;A4RLYfw|U! zv+s&wYku9w`bQ3_%UJy#F<`E&CDz1@&E|f<4+Rj=ar6*o)MAYsGrhu_M-osSuvq6^ zti+z<|H}Tp_3cD|kDL2X+282;*$f-cj@$&HG_uP3^NhZ1E`bGcRAwsU+Ac5UH>@hh z19`7jHTS#X572SQsaS#m+=;QGKEmY#4nBbORg4kWVu2nC-JAl&SGX!Cuybt2I(j%U zTN)7zXwU9h{C13}gc-7TAS#i#TQNKhAwvu41S2^^s|G7xo|bj+Gak*-a$*u^=_R;| zx0r=jaC!LHR8(G)(>d`5Kb#JwKQrE-vnhhI@u^=5RjkD=2v%sY>*vBHBY(Py-4jAU zIoVy^s9Gky>$m6QB03ir(Z3@*pam=Y{Z#LUvX;QI!EsF4&4LVsU#`tW0(SYuysgzy zy8^8IX5=TvT!@e*!qG&=y;HHe5V&SF9`9o{&E~-u8dya^Pt%YA)Q-Bu=_H&a7;H%@fOuTG7w7G+qAG*DkU^fa- z!R|druoz!MciCjPM;DSf-^0(Ga(-r3)9no~LK_4qB=v5#Rs_^gd-(`kE-4^59)y7P z3h8R%dXcTQBbFaFjHs81{5qYom5eK4^Qn$)b?a*;uXgfqHM~Ntu?Bp>f9mD4#LyRm zTrK>s5i`~R;xb`kv7UdT=itL8+_QZlH$T(!gZYneK~KGmi~hKcMSFI<34fbNG_poE zx&Q*NNx}!k;wclkfhf81s>GMTF^*RbwvYJTHM5t~_87>0hEg5TQh@q1lZ_MQ0r*Kdz zS`8>3xsyyJRv6Pt03Qe*3}EyW>?#Z5v6PF#ce?5p<6Wu!`d)4EV>v9>J?-8xvF>qm`hl zxWrmMff?K!oxv~VUdjw!=?ghu6&YYZF+5-Rr7XTs)E}A*9p>}(n2rXw@ZH#?&MgZb zH}jW(J(NhA!qb+XIbT2Nx$DwjWGCAfa@LGX%Yp52b$3FKIR?)kJnW=i6tKU6wF4w_ zMIgAwA8ht^@9f(8^B(0B=eI7{U(G^-PD|%c+H*0CV0+3O^w24KNmLnD9@b7>^oL?w z3o&>;+9gFW0s*UPG_!zi!z7L_WER7xLM%oPmw

*(eXU$B%;gjq-)Yd(bi07nItw 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%0ABoS=k(=j2~pw8QQkQ*C=V83_7S|`kV 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