Edit ragdoll scene in testbed application
This commit is contained in:
parent
fa9f187632
commit
fb8ed81c98
testbed/scenes/ragdoll
|
@ -112,15 +112,17 @@ void RagdollScene::initBodiesPositions() {
|
|||
for (int i=0; i < NB_RAGDOLLS; i++) {
|
||||
|
||||
mHeadBox[i]->setTransform(rp3d::Transform(mHeadPos[i], rp3d::Quaternion::identity()));
|
||||
mTorsoBox[i]->setTransform(rp3d::Transform(mTorsoPos[i], rp3d::Quaternion::identity()));
|
||||
mLeftUpperArmBox[i]->setTransform(rp3d::Transform(mLeftUpperArmPos[i], rp3d::Quaternion::identity()));
|
||||
mLeftLowerArmBox[i]->setTransform(rp3d::Transform(mLeftLowerArmPos[i], rp3d::Quaternion::identity()));
|
||||
mLeftUpperLegBox[i]->setTransform(rp3d::Transform(mLeftUpperLegPos[i], rp3d::Quaternion::identity()));
|
||||
mLeftLowerLegBox[i]->setTransform(rp3d::Transform(mLeftLowerLegPos[i], rp3d::Quaternion::identity()));
|
||||
mRightUpperArmBox[i]->setTransform(rp3d::Transform(mRightUpperArmPos[i], rp3d::Quaternion::identity()));
|
||||
mRightLowerArmBox[i]->setTransform(rp3d::Transform(mRightLowerArmPos[i], rp3d::Quaternion::identity()));
|
||||
mRightUpperLegBox[i]->setTransform(rp3d::Transform(mRightUpperLegPos[i], rp3d::Quaternion::identity()));
|
||||
mRightLowerLegBox[i]->setTransform(rp3d::Transform(mRightLowerLegPos[i], rp3d::Quaternion::identity()));
|
||||
mChestCapsule[i]->setTransform(rp3d::Transform(mChestPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mWaistCapsule[i]->setTransform(rp3d::Transform(mWaistPos[i], rp3d::Quaternion::identity()));
|
||||
mHipCapsule[i]->setTransform(rp3d::Transform(mHipPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mLeftUpperArmCapsule[i]->setTransform(rp3d::Transform(mLeftUpperArmPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mLeftLowerArmCapsule[i]->setTransform(rp3d::Transform(mLeftLowerArmPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mLeftUpperLegCapsule[i]->setTransform(rp3d::Transform(mLeftUpperLegPos[i], rp3d::Quaternion::identity()));
|
||||
mLeftLowerLegCapsule[i]->setTransform(rp3d::Transform(mLeftLowerLegPos[i], rp3d::Quaternion::identity()));
|
||||
mRightUpperArmCapsule[i]->setTransform(rp3d::Transform(mRightUpperArmPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mRightLowerArmCapsule[i]->setTransform(rp3d::Transform(mRightLowerArmPos[i], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mRightUpperLegCapsule[i]->setTransform(rp3d::Transform(mRightUpperLegPos[i], rp3d::Quaternion::identity()));
|
||||
mRightLowerLegCapsule[i]->setTransform(rp3d::Transform(mRightLowerLegPos[i], rp3d::Quaternion::identity()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,15 +135,17 @@ void RagdollScene::destroyPhysicsWorld() {
|
|||
for (int i=0; i < NB_RAGDOLLS; i++) {
|
||||
|
||||
delete mHeadBox[i];
|
||||
delete mTorsoBox[i];
|
||||
delete mLeftUpperArmBox[i];
|
||||
delete mLeftLowerArmBox[i];
|
||||
delete mLeftUpperLegBox[i];
|
||||
delete mLeftLowerLegBox[i];
|
||||
delete mRightUpperArmBox[i];
|
||||
delete mRightLowerArmBox[i];
|
||||
delete mRightUpperLegBox[i];
|
||||
delete mRightLowerLegBox[i];
|
||||
delete mChestCapsule[i];
|
||||
delete mWaistCapsule[i];
|
||||
delete mHipCapsule[i];
|
||||
delete mLeftUpperArmCapsule[i];
|
||||
delete mLeftLowerArmCapsule[i];
|
||||
delete mLeftUpperLegCapsule[i];
|
||||
delete mLeftLowerLegCapsule[i];
|
||||
delete mRightUpperArmCapsule[i];
|
||||
delete mRightLowerArmCapsule[i];
|
||||
delete mRightUpperLegCapsule[i];
|
||||
delete mRightLowerLegCapsule[i];
|
||||
}
|
||||
|
||||
delete mFloor1;
|
||||
|
@ -168,6 +172,7 @@ void RagdollScene::createRagdolls() {
|
|||
|
||||
const float linearDamping = 0.02f;
|
||||
const float angularDamping = 0.02f;
|
||||
const float frictionCoeff = 0.4f;
|
||||
|
||||
// For each ragdoll
|
||||
for (int i=0; i < NB_RAGDOLLS_ROWS; i++) {
|
||||
|
@ -176,241 +181,294 @@ void RagdollScene::createRagdolls() {
|
|||
|
||||
int ragdollIndex = i * NB_RAGDOLLS_COLS + j;
|
||||
|
||||
const float ragdollDist = 15;
|
||||
const float ragdollDistX = 17;
|
||||
const float ragdollDistZ = 16;
|
||||
const float ragdollHeight = 31;
|
||||
|
||||
rp3d::Vector3 ragdollPosition((-(NB_RAGDOLLS_ROWS-1)/2.0 + i) * ragdollDist , ragdollHeight, -11 + (-(NB_RAGDOLLS_COLS-1)/2.0 + j) * ragdollDist);
|
||||
rp3d::Vector3 ragdollPosition((-(NB_RAGDOLLS_ROWS-1)/2.0 + i) * ragdollDistX , ragdollHeight, -6 + (-(NB_RAGDOLLS_COLS-1)/2.0 + j) * ragdollDistZ);
|
||||
|
||||
// --------------- Create the head box --------------- //
|
||||
mHeadPos[ragdollIndex] = ragdollPosition;
|
||||
mHeadBox[ragdollIndex] = new Box(true, Vector3(1.5, 1.5, 1.5) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mHeadBox[ragdollIndex] = new Sphere(true, 0.75f, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mHeadBox[ragdollIndex]->setTransform(rp3d::Transform(mHeadPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mHeadBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mHeadBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mHeadBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(7);
|
||||
mHeadBox[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mHeadBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mHeadBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mHeadBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mHeadBox[ragdollIndex]);
|
||||
|
||||
// --------------- Create the torso box --------------- //
|
||||
mTorsoPos[ragdollIndex] = mHeadPos[ragdollIndex] + rp3d::Vector3(0, -3.25, 0);
|
||||
mTorsoBox[ragdollIndex] = new Box(true, Vector3(3, 4, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mTorsoBox[ragdollIndex]->setTransform(rp3d::Transform(mTorsoPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mTorsoBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mTorsoBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mTorsoBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(9);
|
||||
mTorsoBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mTorsoBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mTorsoBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
//mTorsoBox->getRigidBody()->setType(rp3d::BodyType::STATIC);
|
||||
mPhysicsObjects.push_back(mTorsoBox[ragdollIndex]);
|
||||
// --------------- Create the chest capsule --------------- //
|
||||
mChestPos[ragdollIndex] = mHeadPos[ragdollIndex] + rp3d::Vector3(0, -1.75, 0);
|
||||
mChestCapsule[ragdollIndex] = new Capsule(true, 1, 1.5, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mChestCapsule[ragdollIndex]->setTransform(rp3d::Transform(mChestPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mChestCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mChestCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mChestCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(9);
|
||||
mChestCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mChestCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mChestCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mChestCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mChestCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the left upper arm box --------------- //
|
||||
mLeftUpperArmPos[ragdollIndex] = mTorsoPos[ragdollIndex] + rp3d::Vector3(2.75, 1.5, 0);
|
||||
mLeftUpperArmBox[ragdollIndex] = new Box(true, Vector3(2, 1, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftUpperArmBox[ragdollIndex]->setTransform(rp3d::Transform(mLeftUpperArmPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftUpperArmBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftUpperArmBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftUpperArmBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftUpperArmBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftUpperArmBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftUpperArmBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftUpperArmBox[ragdollIndex]);
|
||||
// --------------- Create the waist capsule --------------- //
|
||||
mWaistPos[ragdollIndex] = mChestPos[ragdollIndex] + rp3d::Vector3(0, -2, 0);
|
||||
mWaistCapsule[ragdollIndex] = new Capsule(true, 1, 1.5, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mWaistCapsule[ragdollIndex]->setTransform(rp3d::Transform(mWaistPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mWaistCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mWaistCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mWaistCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(9);
|
||||
mWaistCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mWaistCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mWaistCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mWaistCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
//mWaistCapsule[ragdollIndex]->getRigidBody()->setType(rp3d::BodyType::STATIC);
|
||||
mPhysicsObjects.push_back(mWaistCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the left lower arm box --------------- //
|
||||
mLeftLowerArmPos[ragdollIndex] = mLeftUpperArmPos[ragdollIndex] + rp3d::Vector3(2.25, 0, 0);
|
||||
mLeftLowerArmBox[ragdollIndex] = new Box(true, Vector3(2, 1, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftLowerArmBox[ragdollIndex]->setTransform(rp3d::Transform(mLeftLowerArmPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftLowerArmBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftLowerArmBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftLowerArmBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftLowerArmBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftLowerArmBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftLowerArmBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftLowerArmBox[ragdollIndex]);
|
||||
// --------------- Create the hips capsule --------------- //
|
||||
mHipPos[ragdollIndex] = mWaistPos[ragdollIndex] + rp3d::Vector3(0, -2, 0);
|
||||
mHipCapsule[ragdollIndex] = new Capsule(true, 1, 1, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mHipCapsule[ragdollIndex]->setTransform(rp3d::Transform(mHipPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mHipCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mHipCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mHipCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(9);
|
||||
mHipCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mHipCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mHipCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mHipCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mHipCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the left upper leg box --------------- //
|
||||
mLeftUpperLegPos[ragdollIndex] = mTorsoPos[ragdollIndex] + rp3d::Vector3(1, -3.75, 0);
|
||||
mLeftUpperLegBox[ragdollIndex] = new Box(true, Vector3(1, 3, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftUpperLegBox[ragdollIndex]->setTransform(rp3d::Transform(mLeftUpperLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftUpperLegBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftUpperLegBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftUpperLegBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftUpperLegBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftUpperLegBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftUpperLegBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftUpperLegBox[ragdollIndex]);
|
||||
// --------------- Create the left upper arm capsule --------------- //
|
||||
mLeftUpperArmPos[ragdollIndex] = mChestPos[ragdollIndex] + rp3d::Vector3(2.25, 0, 0);
|
||||
mLeftUpperArmCapsule[ragdollIndex] = new Capsule(true, 0.5, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->setTransform(rp3d::Transform(mLeftUpperArmPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mLeftUpperArmCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftUpperArmCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftUpperArmCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftUpperArmCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the left lower leg box --------------- //
|
||||
mLeftLowerLegPos[ragdollIndex] = mLeftUpperLegPos[ragdollIndex] + rp3d::Vector3(0, -3.25, 0);
|
||||
mLeftLowerLegBox[ragdollIndex] = new Box(true, Vector3(1, 3, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftLowerLegBox[ragdollIndex]->setTransform(rp3d::Transform(mLeftLowerLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftLowerLegBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftLowerLegBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftLowerLegBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftLowerLegBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftLowerLegBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftLowerLegBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftLowerLegBox[ragdollIndex]);
|
||||
// --------------- Create the left lower arm capsule --------------- //
|
||||
mLeftLowerArmPos[ragdollIndex] = mLeftUpperArmPos[ragdollIndex] + rp3d::Vector3(2.5, 0, 0);
|
||||
mLeftLowerArmCapsule[ragdollIndex] = new Capsule(true, 0.5, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->setTransform(rp3d::Transform(mLeftLowerArmPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mLeftLowerArmCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftLowerArmCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftLowerArmCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftLowerArmCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the right upper arm box --------------- //
|
||||
mRightUpperArmPos[ragdollIndex] = mTorsoPos[ragdollIndex] + rp3d::Vector3(-2.75, 1.5, 0);
|
||||
mRightUpperArmBox[ragdollIndex] = new Box(true, Vector3(2, 1, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightUpperArmBox[ragdollIndex]->setTransform(rp3d::Transform(mRightUpperArmPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightUpperArmBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightUpperArmBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightUpperArmBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightUpperArmBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightUpperArmBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightUpperArmBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightUpperArmBox[ragdollIndex]);
|
||||
// --------------- Create the left upper leg capsule --------------- //
|
||||
mLeftUpperLegPos[ragdollIndex] = mHipPos[ragdollIndex] + rp3d::Vector3(0.8, -1.5, 0);
|
||||
mLeftUpperLegCapsule[ragdollIndex] = new Capsule(true, 0.75, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->setTransform(rp3d::Transform(mLeftUpperLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftUpperLegCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftUpperLegCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftUpperLegCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftUpperLegCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the right lower arm box --------------- //
|
||||
mRightLowerArmPos[ragdollIndex] = mRightUpperArmPos[ragdollIndex] + rp3d::Vector3(-2.25, 0, 0);
|
||||
mRightLowerArmBox[ragdollIndex] = new Box(true, Vector3(2, 1, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightLowerArmBox[ragdollIndex]->setTransform(rp3d::Transform(mRightLowerArmPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightLowerArmBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightLowerArmBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightLowerArmBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightLowerArmBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightLowerArmBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightLowerArmBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightLowerArmBox[ragdollIndex]);
|
||||
// --------------- Create the left lower leg capsule --------------- //
|
||||
mLeftLowerLegPos[ragdollIndex] = mLeftUpperLegPos[ragdollIndex] + rp3d::Vector3(0, -3, 0);
|
||||
mLeftLowerLegCapsule[ragdollIndex] = new Capsule(true, 0.5, 3, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->setTransform(rp3d::Transform(mLeftLowerLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mLeftLowerLegCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(0.3);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mLeftLowerLegCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mLeftLowerLegCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mLeftLowerLegCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the right upper leg box --------------- //
|
||||
mRightUpperLegPos[ragdollIndex] = mTorsoPos[ragdollIndex] + rp3d::Vector3(-1, -3.75, 0);
|
||||
mRightUpperLegBox[ragdollIndex] = new Box(true, Vector3(1, 3, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightUpperLegBox[ragdollIndex]->setTransform(rp3d::Transform(mRightUpperLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightUpperLegBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightUpperLegBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightUpperLegBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightUpperLegBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightUpperLegBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightUpperLegBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightUpperLegBox[ragdollIndex]);
|
||||
// --------------- Create the right upper arm capsule --------------- //
|
||||
mRightUpperArmPos[ragdollIndex] = mChestPos[ragdollIndex] + rp3d::Vector3(-2.25, 0, 0);
|
||||
mRightUpperArmCapsule[ragdollIndex] = new Capsule(true, 0.5, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightUpperArmCapsule[ragdollIndex]->setTransform(rp3d::Transform(mRightUpperArmPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mRightUpperArmCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightUpperArmCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightUpperArmCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightUpperArmCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mRightUpperArmCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightUpperArmCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightUpperArmCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightUpperArmCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the right lower leg box --------------- //
|
||||
mRightLowerLegPos[ragdollIndex] = mRightUpperLegPos[ragdollIndex] + rp3d::Vector3(0, -3.25, 0);
|
||||
mRightLowerLegBox[ragdollIndex] = new Box(true, Vector3(1, 3, 1) , mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightLowerLegBox[ragdollIndex]->setTransform(rp3d::Transform(mRightLowerLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightLowerLegBox[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightLowerLegBox[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightLowerLegBox[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightLowerLegBox[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightLowerLegBox[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightLowerLegBox[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightLowerLegBox[ragdollIndex]);
|
||||
// --------------- Create the right lower arm capsule --------------- //
|
||||
mRightLowerArmPos[ragdollIndex] = mRightUpperArmPos[ragdollIndex] + rp3d::Vector3(-2.5, 0, 0);
|
||||
mRightLowerArmCapsule[ragdollIndex] = new Capsule(true, 0.5, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightLowerArmCapsule[ragdollIndex]->setTransform(rp3d::Transform(mRightLowerArmPos[ragdollIndex], rp3d::Quaternion::fromEulerAngles(0, 0, rp3d::PI_RP3D / 2.0)));
|
||||
mRightLowerArmCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightLowerArmCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightLowerArmCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightLowerArmCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mRightLowerArmCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightLowerArmCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightLowerArmCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightLowerArmCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the joint between head and torso --------------- //
|
||||
// --------------- Create the right upper leg capsule --------------- //
|
||||
mRightUpperLegPos[ragdollIndex] = mHipPos[ragdollIndex] + rp3d::Vector3(-0.8, -1.5, 0);
|
||||
mRightUpperLegCapsule[ragdollIndex] = new Capsule(true, 0.75, 2, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightUpperLegCapsule[ragdollIndex]->setTransform(rp3d::Transform(mRightUpperLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightUpperLegCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightUpperLegCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightUpperLegCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightUpperLegCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(frictionCoeff);
|
||||
mRightUpperLegCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightUpperLegCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightUpperLegCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightUpperLegCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the right lower leg capsule --------------- //
|
||||
mRightLowerLegPos[ragdollIndex] = mRightUpperLegPos[ragdollIndex] + rp3d::Vector3(0, -3, 0);
|
||||
mRightLowerLegCapsule[ragdollIndex] = new Capsule(true, 0.5, 3, mPhysicsCommon, mPhysicsWorld, mMeshFolderPath);
|
||||
mRightLowerLegCapsule[ragdollIndex]->setTransform(rp3d::Transform(mRightLowerLegPos[ragdollIndex], rp3d::Quaternion::identity()));
|
||||
mRightLowerLegCapsule[ragdollIndex]->setColor(mObjectColorDemo);
|
||||
mRightLowerLegCapsule[ragdollIndex]->setSleepingColor(mSleepingColorDemo);
|
||||
mRightLowerLegCapsule[ragdollIndex]->getCollider()->getMaterial().setMassDensity(8);
|
||||
mRightLowerLegCapsule[ragdollIndex]->getCollider()->getMaterial().setFrictionCoefficient(0.3);
|
||||
mRightLowerLegCapsule[ragdollIndex]->getRigidBody()->updateMassPropertiesFromColliders();
|
||||
mRightLowerLegCapsule[ragdollIndex]->getRigidBody()->setLinearDamping(linearDamping);
|
||||
mRightLowerLegCapsule[ragdollIndex]->getRigidBody()->setAngularDamping(angularDamping);
|
||||
mPhysicsObjects.push_back(mRightLowerLegCapsule[ragdollIndex]);
|
||||
|
||||
// --------------- Create the joint between head and chest --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
rp3d::RigidBody* body1 = mHeadBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::RigidBody* body2 = mTorsoBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo1(body1, body2, mHeadPos[ragdollIndex] + rp3d::Vector3(0, -0.82, 0));
|
||||
rp3d::RigidBody* body2 = mChestCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo1(body1, body2, mHeadPos[ragdollIndex] + rp3d::Vector3(0, -0.75, 0));
|
||||
jointInfo1.isCollisionEnabled = false;
|
||||
mHeadTorsoJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo1));
|
||||
mHeadTorsoJoint[ragdollIndex]->setConeLimitLocalAxisBody1(rp3d::Vector3(0, 1, 0));
|
||||
mHeadTorsoJoint[ragdollIndex]->setConeLimitLocalAxisBody2(rp3d::Vector3(0, 1, 0));
|
||||
mHeadTorsoJoint[ragdollIndex]->setConeLimitHalfAngle(40.0 * rp3d::PI_RP3D / 180.0);
|
||||
mHeadTorsoJoint[ragdollIndex]->enableConeLimit(true);
|
||||
mHeadChestJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo1));
|
||||
mHeadChestJoint[ragdollIndex]->setConeLimitHalfAngle(40.0 * rp3d::PI_RP3D / 180.0);
|
||||
mHeadChestJoint[ragdollIndex]->enableConeLimit(true);
|
||||
|
||||
// --------------- Create the joint between torso and left upper arm --------------- //
|
||||
// --------------- Create the joint between chest and left upper arm --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mTorsoBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftUpperArmBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo2(body1, body2, mLeftUpperArmPos[ragdollIndex] + rp3d::Vector3(-0.5, 0, 0));
|
||||
body1 = mChestCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftUpperArmCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo2(body1, body2, mLeftUpperArmPos[ragdollIndex] + rp3d::Vector3(-1, 0, 0));
|
||||
jointInfo2.isCollisionEnabled = false;
|
||||
mTorsoLeftUpperArmJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo2));
|
||||
mTorsoLeftUpperArmJoint[ragdollIndex]->setConeLimitLocalAxisBody1(rp3d::Vector3(1, 0, 0));
|
||||
mTorsoLeftUpperArmJoint[ragdollIndex]->setConeLimitLocalAxisBody2(rp3d::Vector3(1, 0, 0));
|
||||
mTorsoLeftUpperArmJoint[ragdollIndex]->setConeLimitHalfAngle(90.0 * rp3d::PI_RP3D / 180.0);
|
||||
mTorsoLeftUpperArmJoint[ragdollIndex]->enableConeLimit(true);
|
||||
mChestLeftUpperArmJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo2));
|
||||
mChestLeftUpperArmJoint[ragdollIndex]->setConeLimitHalfAngle(180.0 * rp3d::PI_RP3D / 180.0);
|
||||
mChestLeftUpperArmJoint[ragdollIndex]->enableConeLimit(true);
|
||||
|
||||
// --------------- Create the joint between left upper arm and left lower arm --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mLeftUpperArmBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftLowerArmBox[ragdollIndex]->getRigidBody();
|
||||
body1 = mLeftUpperArmCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftLowerArmCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 joint2WorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::Vector3 joint2WorldAxis(0, 0, 1);
|
||||
rp3d::HingeJointInfo jointInfo3(body1, body2, joint2WorldAnchor, joint2WorldAxis);
|
||||
jointInfo3.isCollisionEnabled = false;
|
||||
mLeftUpperLeftLowerArmJoint[ragdollIndex] = dynamic_cast<rp3d::HingeJoint*>(mPhysicsWorld->createJoint(jointInfo3));
|
||||
mLeftUpperLeftLowerArmJoint[ragdollIndex]->enableLimit(true);
|
||||
mLeftUpperLeftLowerArmJoint[ragdollIndex]->setMinAngleLimit(0.0 * rp3d::PI_RP3D / 180.0);
|
||||
mLeftUpperLeftLowerArmJoint[ragdollIndex]->setMaxAngleLimit(340.0 * rp3d::PI_RP3D / 180.0);
|
||||
|
||||
// --------------- Create the joint between torso and left upper leg --------------- //
|
||||
// --------------- Create the joint between chest and waist --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mTorsoBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftUpperLegBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo4(body1, body2, mTorsoPos[ragdollIndex] + rp3d::Vector3(1, -1.87, 0));
|
||||
body1 = mChestCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mWaistCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 jointChestWaistWorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::FixedJointInfo jointChestWaistInfo(body1, body2, jointChestWaistWorldAnchor);
|
||||
jointChestWaistInfo.isCollisionEnabled = false;
|
||||
mChestWaistJoint[ragdollIndex] = dynamic_cast<rp3d::FixedJoint*>(mPhysicsWorld->createJoint(jointChestWaistInfo));
|
||||
|
||||
// --------------- Create the joint between waist and hips --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mWaistCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mHipCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 jointWaistHipsWorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::FixedJointInfo jointWaistHipsInfo(body1, body2, jointWaistHipsWorldAnchor);
|
||||
jointWaistHipsInfo.isCollisionEnabled = false;
|
||||
mWaistHipsJoint[ragdollIndex] = dynamic_cast<rp3d::FixedJoint*>(mPhysicsWorld->createJoint(jointWaistHipsInfo));
|
||||
|
||||
// --------------- Create the joint between hip and left upper leg --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mHipCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftUpperLegCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo4(body1, body2, mHipPos[ragdollIndex] + rp3d::Vector3(0.8, 0, 0));
|
||||
jointInfo4.isCollisionEnabled = false;
|
||||
mTorsoLeftUpperLegJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo4));
|
||||
mTorsoLeftUpperLegJoint[ragdollIndex]->setConeLimitLocalAxisBody1(rp3d::Vector3(0, 1, 0));
|
||||
mTorsoLeftUpperLegJoint[ragdollIndex]->setConeLimitLocalAxisBody2(rp3d::Vector3(0, 1, 0));
|
||||
mTorsoLeftUpperLegJoint[ragdollIndex]->setConeLimitHalfAngle(90.0 * rp3d::PI_RP3D / 180.0);
|
||||
mTorsoLeftUpperLegJoint[ragdollIndex]->enableConeLimit(true);
|
||||
mHipLeftUpperLegJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo4));
|
||||
mHipLeftUpperLegJoint[ragdollIndex]->setConeLimitHalfAngle(80.0 * rp3d::PI_RP3D / 180.0);
|
||||
mHipLeftUpperLegJoint[ragdollIndex]->enableConeLimit(true);
|
||||
|
||||
// --------------- Create the joint between left upper leg and left lower leg --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mLeftUpperLegBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftLowerLegBox[ragdollIndex]->getRigidBody();
|
||||
body1 = mLeftUpperLegCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mLeftLowerLegCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 joint5WorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::Vector3 joint5WorldAxis(1, 0, 0);
|
||||
const rp3d::decimal joint5MinAngle = 0.0 * rp3d::PI_RP3D / 180.0;
|
||||
const rp3d::decimal joint5MaxAngle = 110.0 * rp3d::PI_RP3D / 180.0;
|
||||
const rp3d::decimal joint5MaxAngle = 140.0 * rp3d::PI_RP3D / 180.0;
|
||||
rp3d::HingeJointInfo jointInfo5(body1, body2, joint5WorldAnchor, joint5WorldAxis, joint5MinAngle, joint5MaxAngle);
|
||||
jointInfo5.isCollisionEnabled = false;
|
||||
mLeftUpperLeftLowerLegJoint[ragdollIndex] = dynamic_cast<rp3d::HingeJoint*>(mPhysicsWorld->createJoint(jointInfo5));
|
||||
|
||||
// --------------- Create the joint between torso and right upper arm --------------- //
|
||||
// --------------- Create the joint between chest and right upper arm --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mTorsoBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightUpperArmBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo6(body1, body2, mRightUpperArmPos[ragdollIndex] + rp3d::Vector3(0.5, 0, 0));
|
||||
body1 = mChestCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightUpperArmCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo6(body1, body2, mRightUpperArmPos[ragdollIndex] + rp3d::Vector3(1, 0, 0));
|
||||
jointInfo6.isCollisionEnabled = false;
|
||||
mTorsoRightUpperArmJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo6));
|
||||
mTorsoRightUpperArmJoint[ragdollIndex]->setConeLimitLocalAxisBody1(rp3d::Vector3(1, 0, 0));
|
||||
mTorsoRightUpperArmJoint[ragdollIndex]->setConeLimitLocalAxisBody2(rp3d::Vector3(1, 0, 0));
|
||||
mTorsoRightUpperArmJoint[ragdollIndex]->setConeLimitHalfAngle(90.0 * rp3d::PI_RP3D / 180.0);
|
||||
mTorsoRightUpperArmJoint[ragdollIndex]->enableConeLimit(true);
|
||||
mChestRightUpperArmJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo6));
|
||||
mChestRightUpperArmJoint[ragdollIndex]->setConeLimitHalfAngle(180.0 * rp3d::PI_RP3D / 180.0);
|
||||
mChestRightUpperArmJoint[ragdollIndex]->enableConeLimit(true);
|
||||
|
||||
// --------------- Create the joint between right upper arm and right lower arm --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mRightUpperArmBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightLowerArmBox[ragdollIndex]->getRigidBody();
|
||||
body1 = mRightUpperArmCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightLowerArmCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 joint7WorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::Vector3 joint7WorldAxis(0, 0, 1);
|
||||
rp3d::HingeJointInfo jointInfo7(body1, body2, joint7WorldAnchor, joint7WorldAxis);
|
||||
jointInfo7.isCollisionEnabled = false;
|
||||
mRightUpperRightLowerArmJoint[ragdollIndex] = dynamic_cast<rp3d::HingeJoint*>(mPhysicsWorld->createJoint(jointInfo7));
|
||||
mRightUpperRightLowerArmJoint[ragdollIndex]->enableLimit(true);
|
||||
mRightUpperRightLowerArmJoint[ragdollIndex]->setMinAngleLimit(0.0 * rp3d::PI_RP3D / 180.0);
|
||||
mRightUpperRightLowerArmJoint[ragdollIndex]->setMaxAngleLimit(340.0 * rp3d::PI_RP3D / 180.0);
|
||||
|
||||
// --------------- Create the joint between torso and right upper leg --------------- //
|
||||
// --------------- Create the joint between hips and right upper leg --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mTorsoBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightUpperLegBox[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo8(body1, body2, mTorsoPos[ragdollIndex] + rp3d::Vector3(-1, -1.87, 0));
|
||||
body1 = mHipCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightUpperLegCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::BallAndSocketJointInfo jointInfo8(body1, body2, mHipPos[ragdollIndex] + rp3d::Vector3(-0.8, 0, 0));
|
||||
jointInfo8.isCollisionEnabled = false;
|
||||
mTorsoRightUpperLegJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo8));
|
||||
mTorsoRightUpperLegJoint[ragdollIndex]->setConeLimitLocalAxisBody1(rp3d::Vector3(0, 1, 0));
|
||||
mTorsoRightUpperLegJoint[ragdollIndex]->setConeLimitLocalAxisBody2(rp3d::Vector3(0, 1, 0));
|
||||
mTorsoRightUpperLegJoint[ragdollIndex]->setConeLimitHalfAngle(90.0 * rp3d::PI_RP3D / 180.0);
|
||||
mTorsoRightUpperLegJoint[ragdollIndex]->enableConeLimit(true);
|
||||
mHipRightUpperLegJoint[ragdollIndex] = dynamic_cast<rp3d::BallAndSocketJoint*>(mPhysicsWorld->createJoint(jointInfo8));
|
||||
mHipRightUpperLegJoint[ragdollIndex]->setConeLimitHalfAngle(80.0 * rp3d::PI_RP3D / 180.0);
|
||||
mHipRightUpperLegJoint[ragdollIndex]->enableConeLimit(true);
|
||||
|
||||
// --------------- Create the joint between right upper leg and right lower leg --------------- //
|
||||
|
||||
// Create the joint info object
|
||||
body1 = mRightUpperLegBox[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightLowerLegBox[ragdollIndex]->getRigidBody();
|
||||
body1 = mRightUpperLegCapsule[ragdollIndex]->getRigidBody();
|
||||
body2 = mRightLowerLegCapsule[ragdollIndex]->getRigidBody();
|
||||
rp3d::Vector3 joint9WorldAnchor = (body1->getTransform().getPosition() + body2->getTransform().getPosition()) * 0.5f;
|
||||
rp3d::Vector3 joint9WorldAxis(1, 0, 0);
|
||||
const rp3d::decimal joint9MinAngle = 0.0 * rp3d::PI_RP3D / 180.0;
|
||||
const rp3d::decimal joint9MaxAngle = 110.0 * rp3d::PI_RP3D / 180.0;
|
||||
const rp3d::decimal joint9MaxAngle = 140.0 * rp3d::PI_RP3D / 180.0;
|
||||
rp3d::HingeJointInfo jointInfo9(body1, body2, joint9WorldAnchor, joint9WorldAxis, joint9MinAngle, joint9MaxAngle);
|
||||
jointInfo9.isCollisionEnabled = false;
|
||||
mRightUpperRightLowerLegJoint[ragdollIndex] = dynamic_cast<rp3d::HingeJoint*>(mPhysicsWorld->createJoint(jointInfo9));
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include "openglframework.h"
|
||||
#include <reactphysics3d/reactphysics3d.h>
|
||||
#include "Box.h"
|
||||
#include "Capsule.h"
|
||||
#include "Sphere.h"
|
||||
#include "SceneDemo.h"
|
||||
|
||||
namespace ragdollscene {
|
||||
|
@ -52,35 +54,41 @@ class RagdollScene : public SceneDemo {
|
|||
|
||||
// -------------------- Attributes -------------------- //
|
||||
|
||||
/// Head box
|
||||
Box* mHeadBox[NB_RAGDOLLS];
|
||||
/// Head sphere
|
||||
Sphere* mHeadBox[NB_RAGDOLLS];
|
||||
|
||||
/// Torso box
|
||||
Box* mTorsoBox[NB_RAGDOLLS];
|
||||
/// Chest
|
||||
Capsule* mChestCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Left upper arm box
|
||||
Box* mLeftUpperArmBox[NB_RAGDOLLS];
|
||||
/// Waist capsule
|
||||
Capsule* mWaistCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Left lower arm box
|
||||
Box* mLeftLowerArmBox[NB_RAGDOLLS];
|
||||
/// Hip capsule
|
||||
Capsule* mHipCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Left upper leg box
|
||||
Box* mLeftUpperLegBox[NB_RAGDOLLS];
|
||||
/// Left upper arm capsule
|
||||
Capsule* mLeftUpperArmCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Left lower leg box
|
||||
Box* mLeftLowerLegBox[NB_RAGDOLLS];
|
||||
/// Left lower arm capsule
|
||||
Capsule* mLeftLowerArmCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right upper arm box
|
||||
Box* mRightUpperArmBox[NB_RAGDOLLS];
|
||||
/// Left upper leg capsule
|
||||
Capsule* mLeftUpperLegCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right lower arm box
|
||||
Box* mRightLowerArmBox[NB_RAGDOLLS];
|
||||
/// Left lower leg capsule
|
||||
Capsule* mLeftLowerLegCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right upper leg box
|
||||
Box* mRightUpperLegBox[NB_RAGDOLLS];
|
||||
/// Right upper arm capsule
|
||||
Capsule* mRightUpperArmCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right lower leg box
|
||||
Box* mRightLowerLegBox[NB_RAGDOLLS];
|
||||
/// Right lower arm capsule
|
||||
Capsule* mRightLowerArmCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right upper leg capsule
|
||||
Capsule* mRightUpperLegCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Right lower leg capsule
|
||||
Capsule* mRightLowerLegCapsule[NB_RAGDOLLS];
|
||||
|
||||
/// Box for the floor 1
|
||||
Box* mFloor1;
|
||||
|
@ -95,34 +103,42 @@ class RagdollScene : public SceneDemo {
|
|||
Box* mInclinedPlaneBox;
|
||||
|
||||
/// Ball-And-Socket joint between head and torso
|
||||
rp3d::BallAndSocketJoint* mHeadTorsoJoint[NB_RAGDOLLS];
|
||||
rp3d::BallAndSocketJoint* mHeadChestJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Ball-And-Socket joint between torso and left upper arm
|
||||
rp3d::BallAndSocketJoint* mTorsoLeftUpperArmJoint[NB_RAGDOLLS];
|
||||
rp3d::BallAndSocketJoint* mChestLeftUpperArmJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Hinge joint between left upper and left lower arm
|
||||
rp3d::HingeJoint* mLeftUpperLeftLowerArmJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Fixed joint between chest and waist
|
||||
rp3d::FixedJoint* mChestWaistJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Fixed joint between waist and hips
|
||||
rp3d::FixedJoint* mWaistHipsJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Ball-And-Socket joint between torso and left upper leg
|
||||
rp3d::BallAndSocketJoint* mTorsoLeftUpperLegJoint[NB_RAGDOLLS];
|
||||
rp3d::BallAndSocketJoint* mHipLeftUpperLegJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Hinge joint between left upper and left lower leg
|
||||
rp3d::HingeJoint* mLeftUpperLeftLowerLegJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Ball-And-Socket joint between torso and right upper arm
|
||||
rp3d::BallAndSocketJoint* mTorsoRightUpperArmJoint[NB_RAGDOLLS];
|
||||
rp3d::BallAndSocketJoint* mChestRightUpperArmJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Hinge joint between left upper and right lower arm
|
||||
rp3d::HingeJoint* mRightUpperRightLowerArmJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Ball-And-Socket joint between torso and right upper leg
|
||||
rp3d::BallAndSocketJoint* mTorsoRightUpperLegJoint[NB_RAGDOLLS];
|
||||
rp3d::BallAndSocketJoint* mHipRightUpperLegJoint[NB_RAGDOLLS];
|
||||
|
||||
/// Hinge joint between left upper and left lower leg
|
||||
rp3d::HingeJoint* mRightUpperRightLowerLegJoint[NB_RAGDOLLS];
|
||||
|
||||
rp3d::Vector3 mChestPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mWaistPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mHipPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mHeadPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mTorsoPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mLeftUpperArmPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mLeftLowerArmPos[NB_RAGDOLLS];
|
||||
rp3d::Vector3 mLeftUpperLegPos[NB_RAGDOLLS];
|
||||
|
|
Loading…
Reference in New Issue
Block a user