void SampleParticles::Raygun::updateRayCapsule(PxRigidDynamic* actor, const PxTransform& pose, float radiusMaxMultiplier) { // move and resize capsule actor->setGlobalPose(pose); // scale force (represented with capsule RB) if (mForceTimer < RAYGUN_FORCE_GROW_TIME) { float newRadius = PxMax(RAYGUN_FORCE_SIZE_MAX*radiusMaxMultiplier*mForceTimer/RAYGUN_FORCE_GROW_TIME, RAYGUN_FORCE_SIZE_MIN); PxShape* shape; actor->getShapes(&shape, 1); shape->setGeometry(PxCapsuleGeometry(newRadius, 150.0f)); } }
bool BoxController::updateKinematicProxy() { // Set extents for kinematic proxy if(mKineActor) { PxShape* shape = getKineShape(); PX_ASSERT(shape->getGeometryType() == PxGeometryType::eBOX); PxBoxGeometry bg; shape->getBoxGeometry(bg); bg.halfExtents = CCTtoProxyExtents(mHalfHeight, mHalfSideExtent, mHalfForwardExtent, mProxyScaleCoeff); shape->setGeometry(bg); } return true; }
bool CapsuleController::setRadius(PxF32 r) { // Set radius for CCT volume mRadius = r; // Set radius for kinematic proxy if(mKineActor) { PxShape* shape = getKineShape(); PX_ASSERT(shape->getGeometryType() == PxGeometryType::eCAPSULE); PxCapsuleGeometry cg; shape->getCapsuleGeometry(cg); cg.radius = CCTtoProxyRadius(r, mProxyScaleCoeff); shape->setGeometry(cg); } return true; }
bool CapsuleController::setHeight(PxF32 h) { // Set height for CCT volume mHeight = h; // Set height for kinematic proxy if(mKineActor) { PxShape* shape = getKineShape(); PX_ASSERT(shape->getGeometryType() == PxGeometryType::eCAPSULE); PxCapsuleGeometry cg; shape->getCapsuleGeometry(cg); cg.halfHeight = CCTtoProxyHeight(h, mProxyScaleCoeff); shape->setGeometry(cg); } return true; }