24 static float toMeters (
const float v);
25 static btVector3
toMeters (
const Tempest::Vec3& v);
28 using btDiscreteDynamicsWorld::operator
new;
29 using btDiscreteDynamicsWorld::operator
delete;
35 void tick(uint64_t dt);
36 void setBBox(
const btVector3& min,
const btVector3& max);
37 void setItemHitCallback(std::function<
void(
Item& itm, zenkit::MaterialGroup mat,
float impulse,
float mass)> f);
42 bool hasCollision(
const btCollisionObject &it, Tempest::Vec3& normal);
45 std::unique_ptr<CollisionBody>
addCollisionBody(btCollisionShape& shape,
const Tempest::Matrix4x4& tr,
float friction);
46 std::unique_ptr<DynamicBody>
addDynamicBody (btCollisionShape& shape,
const Tempest::Matrix4x4& tr,
float friction,
float mass);
48 void rayCast(
const Tempest::Vec3& b,
const Tempest::Vec3& e, RayResultCallback& cb);
74 bool tick(
float step, btRigidBody& body);
76 void saveKinematicState(btScalar timeStep)
override;
78 std::unique_ptr<btCollisionConfiguration> conf;
79 std::unique_ptr<btCollisionDispatcher> disp;
80 std::unique_ptr<btBroadphaseInterface> broad;
81 std::unique_ptr<btSequentialImpulseConstraintSolver> solver;
83 std::function<void(
Item& itm, zenkit::MaterialGroup mat,
float impulse,
float mass)> hitItem;
85 std::vector<btRigidBody*> rigid;
86 btVector3 gravity = btVector3(0,0,0);
87 btVector3 bbox[2] = {btVector3(0,0,0), btVector3(0,0,0)};
89 mutable uint32_t aabbChanged = 0;
friend class CollisionWorld::DynamicBody