Files
2025-05-29 22:31:40 +03:00

41 lines
1.5 KiB
C#

#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS)
using Unity.Collections;
namespace Obi
{
public struct ContactProvider : IConstraintProvider
{
public NativeArray<BurstContact> contacts;
public NativeArray<BurstContact> sortedContacts;
public NativeArray<int> 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