29#ifndef SC_ACTOR_PAIR_H
30#define SC_ACTOR_PAIR_H
32#include "ScRigidSim.h"
33#include "ScContactStream.h"
34#include "ScNPhaseCore.h"
35#if PX_SUPPORT_GPU_PHYSX
36#include "ScSoftBodySim.h"
48 mStrmResetStamp (0xffffffff),
49 mActorAID (0xffffffff),
50 mActorBID (0xffffffff),
56 PxU32 mStrmResetStamp;
74 eIS_REPORT_PAIR = (1<<0),
81 PX_FORCE_INLINE PxIntBool isReportPair()
const {
return (mInternalFlags & eIS_REPORT_PAIR); }
83 PX_FORCE_INLINE void incTouchCount() { mTouchCount++; PX_ASSERT(mTouchCount); }
84 PX_FORCE_INLINE void decTouchCount() { PX_ASSERT(mTouchCount); mTouchCount--; }
87 PX_FORCE_INLINE void incRefCount() { ++mRefCount; PX_ASSERT(mRefCount>0); }
88 PX_FORCE_INLINE PxU32 decRefCount() { PX_ASSERT(mRefCount>0);
return --mRefCount; }
113 enum ActorPairReportFlags
115 eIS_IN_CONTACT_REPORT_ACTOR_PAIR_SET = ActorPair::eNEXT_FREE
125 PX_INLINE PxU32 getActorAID()
const { PX_ASSERT(mReportData);
return mReportData->mActorAID; }
126 PX_INLINE PxU32 getActorBID()
const { PX_ASSERT(mReportData);
return mReportData->mActorBID; }
127 PX_INLINE PxActor* getPxActorA()
const { PX_ASSERT(mReportData);
return mReportData->mPxActorA; }
128 PX_INLINE PxActor* getPxActorB()
const { PX_ASSERT(mReportData);
return mReportData->mPxActorB; }
129 PX_INLINE bool streamResetStamp(PxU32 cmpStamp);
131 PX_FORCE_INLINE PxU16 isInContactReportActorPairSet()
const {
return PxU16(mInternalFlags & eIS_IN_CONTACT_REPORT_ACTOR_PAIR_SET); }
132 PX_FORCE_INLINE void setInContactReportActorPairSet() { mInternalFlags |= eIS_IN_CONTACT_REPORT_ACTOR_PAIR_SET; }
133 PX_FORCE_INLINE void clearInContactReportActorPairSet() { mInternalFlags &= ~eIS_IN_CONTACT_REPORT_ACTOR_PAIR_SET; }
138 PX_FORCE_INLINE void convert(
ActorPair& aPair) { PX_ASSERT(!aPair.isReportPair()); mTouchCount = PxU16(aPair.getTouchCount()); mRefCount = PxU16(aPair.getRefCount()); }
153PX_FORCE_INLINE Sc::ActorPairReport::ActorPairReport(ActorSim& actor0, ActorSim& actor1) : ActorPair(),
158 PX_ASSERT(mInternalFlags == 0);
159 mInternalFlags = ActorPair::eIS_REPORT_PAIR;
164 PX_ASSERT(mReportData == NULL);
167PX_INLINE bool Sc::ActorPairReport::streamResetStamp(PxU32 cmpStamp)
169 PX_ASSERT(mReportData);
170 const bool ret = (cmpStamp != mReportData->mStrmResetStamp);
171 mReportData->mStrmResetStamp = cmpStamp;
175PX_INLINE Sc::ContactStreamManager& Sc::ActorPairReport::createContactStreamManager(NPhaseCore& npCore)
179 createContactReportData(npCore);
181 return mReportData->mContactStreamManager;
184PX_FORCE_INLINE void Sc::ActorPairReport::createContactReportData(NPhaseCore& npCore)
186 PX_ASSERT(!mReportData);
187 Sc::ActorPairContactReportData* reportData = npCore.createActorPairContactReportData();
188 mReportData = reportData;
192 const ActorCore& actorCoreA = mActorA.getActorCore();
193 const ActorCore& actorCoreB = mActorB.getActorCore();
195 reportData->mActorAID = mActorA.getActorID();
196 reportData->mActorBID = mActorB.getActorID();
198#if PX_SUPPORT_GPU_PHYSX
200 reportData->mPxActorA =
static_cast<const SoftBodyCore&
>(actorCoreA).getPxActor();
203 reportData->mPxActorA =
static_cast<const RigidCore&
>(actorCoreA).getPxActor();
205#if PX_SUPPORT_GPU_PHYSX
207 reportData->mPxActorB =
static_cast<const SoftBodyCore&
>(actorCoreB).getPxActor();
210 reportData->mPxActorB =
static_cast<const RigidCore&
>(actorCoreB).getPxActor();
214PX_FORCE_INLINE void Sc::ActorPairReport::releaseContactReportData(NPhaseCore& npCore)
220 npCore.releaseActorPairContactReportData(mReportData);
PxActor is the base class for the main simulation objects in the physics SDK.
Definition PxActor.h:201
Class shared by all shape interactions for a pair of actors if contact reports are requested.
Definition ScActorPair.h:110
Class shared by all shape interactions for a pair of actors.
Definition ScActorPair.h:69
Definition ScActorSim.h:83
Definition ScNPhaseCore.h:193
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
#define PX_INLINE
Definition PxPreprocessor.h:320
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
@ eSOFTBODY
A FEM-based soft body.
Definition PxActor.h:144