Swap two components in the array
| 326 | |
| 327 | // Swap two components in the array |
| 328 | void HingeJointComponents::swapComponents(uint32 index1, uint32 index2) { |
| 329 | |
| 330 | // Copy component 1 data |
| 331 | Entity jointEntity1(mJointEntities[index1]); |
| 332 | HingeJoint* joint1 = mJoints[index1]; |
| 333 | Vector3 localAnchorPointBody1(mLocalAnchorPointBody1[index1]); |
| 334 | Vector3 localAnchorPointBody2(mLocalAnchorPointBody2[index1]); |
| 335 | Vector3 r1World1(mR1World[index1]); |
| 336 | Vector3 r2World1(mR2World[index1]); |
| 337 | Matrix3x3 i11(mI1[index1]); |
| 338 | Matrix3x3 i21(mI2[index1]); |
| 339 | Vector3 impulseTranslation1(mImpulseTranslation[index1]); |
| 340 | Vector2 impulseRotation1(mImpulseRotation[index1]); |
| 341 | Matrix3x3 inverseMassMatrixTranslation1(mInverseMassMatrixTranslation[index1]); |
| 342 | Matrix2x2 inverseMassMatrixRotation1(mInverseMassMatrixRotation[index1]); |
| 343 | Vector3 biasTranslation1(mBiasTranslation[index1]); |
| 344 | Vector2 biasRotation1(mBiasRotation[index1]); |
| 345 | Quaternion initOrientationDifferenceInv1(mInitOrientationDifferenceInv[index1]); |
| 346 | Vector3 hingeLocalAxisBody1(mHingeLocalAxisBody1[index1]); |
| 347 | Vector3 hingeLocalAxisBody2(mHingeLocalAxisBody2[index1]); |
| 348 | Vector3 a1(mA1[index1]); |
| 349 | Vector3 b2CrossA1(mB2CrossA1[index1]); |
| 350 | Vector3 c2CrossA1(mC2CrossA1[index1]); |
| 351 | decimal impulseLowerLimit(mImpulseLowerLimit[index1]); |
| 352 | decimal impulseUpperLimit(mImpulseUpperLimit[index1]); |
| 353 | decimal impulseMotor(mImpulseMotor[index1]); |
| 354 | decimal inverseMassMatrixLimitMotor(mInverseMassMatrixLimitMotor[index1]); |
| 355 | decimal inverseMassMatrixMotor(mInverseMassMatrixMotor[index1]); |
| 356 | decimal bLowerLimit(mBLowerLimit[index1]); |
| 357 | decimal bUpperLimit(mUpperLimit[index1]); |
| 358 | bool isLimitEnabled(mIsLimitEnabled[index1]); |
| 359 | bool isMotorEnabled(mIsMotorEnabled[index1]); |
| 360 | decimal lowerLimit(mLowerLimit[index1]); |
| 361 | decimal upperLimit(mUpperLimit[index1]); |
| 362 | bool isLowerLimitViolated(mIsLowerLimitViolated[index1]); |
| 363 | bool isUpperLimitViolated(mIsUpperLimitViolated[index1]); |
| 364 | decimal motorSpeed(mMotorSpeed[index1]); |
| 365 | decimal maxMotorTorque(mMaxMotorTorque[index1]); |
| 366 | |
| 367 | // Destroy component 1 |
| 368 | destroyComponent(index1); |
| 369 | |
| 370 | moveComponentToIndex(index2, index1); |
| 371 | |
| 372 | // Reconstruct component 1 at component 2 location |
| 373 | new (mJointEntities + index2) Entity(jointEntity1); |
| 374 | mJoints[index2] = joint1; |
| 375 | new (mLocalAnchorPointBody1 + index2) Vector3(localAnchorPointBody1); |
| 376 | new (mLocalAnchorPointBody2 + index2) Vector3(localAnchorPointBody2); |
| 377 | new (mR1World + index2) Vector3(r1World1); |
| 378 | new (mR2World + index2) Vector3(r2World1); |
| 379 | new (mI1 + index2) Matrix3x3(i11); |
| 380 | new (mI2 + index2) Matrix3x3(i21); |
| 381 | new (mImpulseTranslation + index2) Vector3(impulseTranslation1); |
| 382 | new (mImpulseRotation + index2) Vector2(impulseRotation1); |
| 383 | new (mInverseMassMatrixTranslation + index2) Matrix3x3(inverseMassMatrixTranslation1); |
| 384 | new (mInverseMassMatrixRotation + index2) Matrix2x2(inverseMassMatrixRotation1); |
| 385 | new (mBiasTranslation + index2) Vector3(biasTranslation1); |