#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using Unity.Collections; namespace Obi { public struct ContactProvider : IConstraintProvider { public NativeArray contacts; public NativeArray sortedContacts; public NativeArray simplices; public SimplexCounts simplexCounts; public int GetConstraintCount() { return contacts.Length; } public int GetParticleCount(int constraintIndex) { simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyA, out int simplexSizeA); simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyB, out int simplexSizeB); return simplexSizeA + simplexSizeB; } public int GetParticle(int constraintIndex, int index) { int simplexStartA = simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyA, out int simplexSizeA); int simplexStartB = simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyB, out int simplexSizeB); if (index < simplexSizeA) return simplices[simplexStartA + index]; else return simplices[simplexStartB + index - simplexSizeA]; } public void WriteSortedConstraint(int constraintIndex, int sortedIndex) { sortedContacts[sortedIndex] = contacts[constraintIndex]; } } } #endif