/// <summary> /// When contact debugging is enabled, prims will forward all their contact information to this debug /// manager instance. /// </summary> /// <param name="contactPairHeader"></param> /// <param name="pairs"></param> public void AnalyzeContactChange(PhysX.ContactPairHeader contactPairHeader, PhysX.ContactPair[] pairs) { if (_contactDebugStartedAt == 0) { return; } if (contactPairHeader.Actors[0] == null || contactPairHeader.Actors[1] == null) { return; } foreach (var pair in pairs) { if ((pair.Events & PhysX.PairFlag.NotifyTouchFound) != 0 || (pair.Events & PhysX.PairFlag.NotifyTouchPersists) != 0) { int currCount = pair.ContactCount; if (_contactCounts.TryGetValue(contactPairHeader.Actors[0], out currCount)) { currCount += pair.ContactCount; } _contactCounts[contactPairHeader.Actors[0]] = currCount; if (_contactCounts.TryGetValue(contactPairHeader.Actors[1], out currCount)) { currCount += pair.ContactCount; } _contactCounts[contactPairHeader.Actors[1]] = currCount; } } }
public override void OnContact(PhysX.ContactPairHeader contactPairHeader, PhysX.ContactPair[] pairs) { if (OnContactCallback != null) { OnContactCallback(contactPairHeader, pairs); } }
private bool TryInformPrimOfContactChange(PhysX.ContactPairHeader contactPairHeader, PhysX.ContactPair[] pairs, int actorIndex) { PhysxPrim prim = contactPairHeader.Actors[actorIndex].UserData as PhysxPrim; if (prim != null) { prim.OnContactChangeSync(contactPairHeader, pairs, actorIndex); return(true); } else { return(false); } }
private bool TryInformCharacterOfContactChange(PhysX.ContactPairHeader contactPairHeader, PhysX.ContactPair[] pairs, int actorIndex) { PhysxCharacter character = contactPairHeader.Actors[actorIndex].UserData as PhysxCharacter; if (character != null) { character.OnContactChangeSync(contactPairHeader, pairs, actorIndex); return(true); } else { return(false); } }
private void OnContact(PhysX.ContactPairHeader contactPairHeader, PhysX.ContactPair[] pairs) { if ((contactPairHeader.Flags & PhysX.ContactPairHeaderFlag.DeletedActor0) == 0) { bool wasPrim = TryInformPrimOfContactChange(contactPairHeader, pairs, 0); if (!wasPrim) { TryInformCharacterOfContactChange(contactPairHeader, pairs, 0); } } if ((contactPairHeader.Flags & PhysX.ContactPairHeaderFlag.DeletedActor1) == 0) { bool wasPrim = TryInformPrimOfContactChange(contactPairHeader, pairs, 1); if (!wasPrim) { TryInformCharacterOfContactChange(contactPairHeader, pairs, 1); } } }