10 : m_type(type), m_collider(collider), m_mass(mass), m_friction(friction)
19 btVector3 intertia(0, 0, 0);
22 m_collider->GetShape()->calculateLocalInertia(btScalar(mass), intertia);
25 btTransform transform;
26 transform.setIdentity();
27 btDefaultMotionState* motionState =
new btDefaultMotionState(transform);
29 btRigidBody::btRigidBodyConstructionInfo info(
31 motionState, m_collider->GetShape(), intertia
34 m_body = std::make_unique<btRigidBody>(info);
35 m_body->setFriction(friction);
36 m_body->setUserPointer(
this);
40 m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
41 m_body->setActivationState(DISABLE_DEACTIVATION);
80 auto& tr = m_body->getWorldTransform();
81 tr.setOrigin(btVector3(btScalar(pos.x), btScalar(pos.y), btScalar(pos.z)));
82 if (m_body->getMotionState())
84 m_body->getMotionState()->setWorldTransform(tr);
86 m_body->setWorldTransform(tr);
106 auto& tr = m_body->getWorldTransform();
107 tr.setRotation(btQuaternion(btScalar(rot.x), btScalar(rot.y), btScalar(rot.z), btScalar(rot.w)));
108 if (m_body->getMotionState())
110 m_body->getMotionState()->setWorldTransform(tr);
112 m_body->setWorldTransform(tr);
119 return glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
121 const auto& rot = m_body->getWorldTransform().getRotation();
122 return glm::quat(rot.w(), rot.x(), rot.y(), rot.z());
void SetRotation(const glm::quat &rot)
bool IsAddedToWorld() const
void ApplyImpulse(const glm::vec3 &impulse)
void SetPosition(const glm::vec3 &pos)
void SetAddedToWorld(bool added)
glm::quat GetRotation() const
RigidBody(BodyType type, const std::shared_ptr< Collider > &collider, float mass, float friction)
glm::vec3 GetPosition() const