diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plArmatureMod.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plArmatureMod.cpp index 051219c7..32828049 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plArmatureMod.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plArmatureMod.cpp @@ -2006,7 +2006,7 @@ hsBool plArmatureMod::ValidatePhysics() return false; if (!fController) - fController = plPhysicalControllerCore::Create(GetTarget(0)->GetKey(), fPhysHeight, fPhysWidth); + fController = plPhysicalControllerCore::Create(GetTarget(0)->GetKey(), fPhysHeight, fPhysWidth, (fBodyType == kBoneBaseMale || fBodyType == kBoneBaseFemale)); if (fController) { diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h index 4fd2806e..c4477ee4 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h @@ -150,7 +150,7 @@ public: hsScalar GetHeight() const { return fHeight; } // Create a new controller instance - Implemented in the physics system - static plPhysicalControllerCore* Create(plKey ownerSO, hsScalar height, hsScalar radius); + static plPhysicalControllerCore* Create(plKey ownerSO, hsScalar height, hsScalar radius, bool human); protected: virtual void IHandleEnableChanged() = 0; diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.cpp index d615f60c..90483b35 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.cpp @@ -155,23 +155,24 @@ public: } } gControllerHitReport; -plPhysicalControllerCore* plPhysicalControllerCore::Create(plKey ownerSO, hsScalar height, hsScalar width) +plPhysicalControllerCore* plPhysicalControllerCore::Create(plKey ownerSO, hsScalar height, hsScalar width, bool human) { if (!plPXPhysicalControllerCore::fPXControllersMax || gControllers.size() < plPXPhysicalControllerCore::fPXControllersMax) { hsScalar radius = width / 2.0f; hsScalar realHeight = height - width; - return TRACKED_NEW plPXPhysicalControllerCore(ownerSO, realHeight, radius); + return TRACKED_NEW plPXPhysicalControllerCore(ownerSO, realHeight, radius, human); } return nil; } -plPXPhysicalControllerCore::plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius) +plPXPhysicalControllerCore::plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius, bool human) : plPhysicalControllerCore(ownerSO, height, radius), fController(nil), fActor(nil), fProxyGen(nil), - fKinematicCCT(true) + fKinematicCCT(true), + fHuman(human) { ICreateController(fLocalPosition); fActor->raiseActorFlag(NX_AF_DISABLE_COLLISION); @@ -724,10 +725,14 @@ void plPXPhysicalControllerCore::ICreateController(const hsPoint3& pos) // In PhysX 2, the kinematic actors scale factor isn't exposed. // It is hardcoded at 0.8 which doesn't suit, so we have to manually adjust its dimensions. float kineRadius = fRadius + kCCTSkinWidth; - float kineHeight = fHeight + kPhysHeightCorrection; + float kineHeight = fHeight; NxCapsuleShape* capShape = shape->isCapsule(); + if (fHuman) + { + kineHeight += kPhysHeightCorrection; + capShape->setLocalPosition(NxVec3(0.0f, (kPhysHeightCorrection / 2.0f), 0.0f)); + } capShape->setDimensions(kineRadius, kineHeight); - capShape->setLocalPosition(NxVec3(0.0f, (kPhysHeightCorrection / 2.0f), 0.0f)); } else { diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.h index 4697d66b..039c1e71 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysicalControllerCore.h @@ -65,7 +65,7 @@ public: class plPXPhysicalControllerCore: public plPhysicalControllerCore { public: - plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius); + plPXPhysicalControllerCore(plKey ownerSO, hsScalar height, hsScalar radius, bool human); ~plPXPhysicalControllerCore(); // An ArmatureMod has its own idea about when physics should be enabled/disabled. @@ -169,4 +169,5 @@ protected: plPhysicalProxy* fProxyGen; bool fKinematicCCT; + bool fHuman; };