void ObjectMotionState::handleEasyChanges(uint32_t flags, PhysicsEngine* engine) { if (flags & EntityItem::DIRTY_POSITION) { btTransform worldTrans; if (flags & EntityItem::DIRTY_ROTATION) { worldTrans.setRotation(glmToBullet(getObjectRotation())); } else { worldTrans = _body->getWorldTransform(); } worldTrans.setOrigin(glmToBullet(getObjectPosition())); _body->setWorldTransform(worldTrans); } else if (flags & EntityItem::DIRTY_ROTATION) { btTransform worldTrans = _body->getWorldTransform(); worldTrans.setRotation(glmToBullet(getObjectRotation())); _body->setWorldTransform(worldTrans); } if (flags & EntityItem::DIRTY_LINEAR_VELOCITY) { _body->setLinearVelocity(glmToBullet(getObjectLinearVelocity())); _body->setGravity(glmToBullet(getObjectGravity())); } if (flags & EntityItem::DIRTY_ANGULAR_VELOCITY) { _body->setAngularVelocity(glmToBullet(getObjectAngularVelocity())); } if (flags & EntityItem::DIRTY_MATERIAL) { updateBodyMaterialProperties(); } if (flags & EntityItem::DIRTY_MASS) { updateBodyMassProperties(); } }
void ObjectMotionState::handleEasyChanges(uint32_t flags) { if (flags & EntityItem::DIRTY_POSITION) { btTransform worldTrans; if (flags & EntityItem::DIRTY_ROTATION) { worldTrans.setRotation(glmToBullet(getObjectRotation())); } else { worldTrans = _body->getWorldTransform(); } worldTrans.setOrigin(glmToBullet(getObjectPosition())); _body->setWorldTransform(worldTrans); } else if (flags & EntityItem::DIRTY_ROTATION) { btTransform worldTrans = _body->getWorldTransform(); worldTrans.setRotation(glmToBullet(getObjectRotation())); _body->setWorldTransform(worldTrans); } if (flags & EntityItem::DIRTY_LINEAR_VELOCITY) { _body->setLinearVelocity(glmToBullet(getObjectLinearVelocity())); _body->setGravity(glmToBullet(getObjectGravity())); } if (flags & EntityItem::DIRTY_ANGULAR_VELOCITY) { _body->setAngularVelocity(glmToBullet(getObjectAngularVelocity())); } if (flags & EntityItem::DIRTY_MATERIAL) { updateBodyMaterialProperties(); } if (flags & EntityItem::DIRTY_MASS) { float mass = getMass(); btVector3 inertia(0.0f, 0.0f, 0.0f); _body->getCollisionShape()->calculateLocalInertia(mass, inertia); _body->setMassProps(mass, inertia); _body->updateInertiaTensor(); } }
void ObjectMotionState::updateBodyVelocities() { setBodyLinearVelocity(getObjectLinearVelocity()); setBodyAngularVelocity(getObjectAngularVelocity()); setBodyGravity(getObjectGravity()); _body->setActivationState(ACTIVE_TAG); }