20 auto capsule =
new btCapsuleShape(m_radius, m_height);
22 m_ghost = std::make_unique<btPairCachingGhostObject>();
25 start.setOrigin(btVector3(position.x, position.y, position.z));
26 m_ghost->setWorldTransform(start);
27 m_ghost->setCollisionShape(capsule);
28 m_ghost->setCollisionFlags(m_ghost->getCollisionFlags() | btCollisionObject::CF_CHARACTER_OBJECT);
29 m_ghost->setUserPointer(
this);
31 world->getBroadphase()->getOverlappingPairCache()->setInternalGhostPairCallback(
new btGhostPairCallback());
34 m_controller = std::make_unique<btKinematicCharacterController>(m_ghost.get(), capsule, stepHeight);
36 m_controller->setMaxSlope(btRadians(50.0F));
37 m_controller->setGravity(world->getGravity());
39 world->addCollisionObject(
41 btBroadphaseProxy::CharacterFilter,
42 btBroadphaseProxy::AllFilter & ~btBroadphaseProxy::SensorTrigger
44 world->addAction(m_controller.get());