27 #ifndef HX3D_PHYSICS_2D_WORLD 28 #define HX3D_PHYSICS_2D_WORLD 30 #include "hx3d/physics/2d/manifold.hpp" 31 #include "hx3d/physics/2d/collider.hpp" 32 #include "hx3d/physics/2d/collision_matrix.hpp" 34 #include "hx3d/physics/2d/attractors/global_attractor.hpp" 35 #include "hx3d/physics/2d/attractors/point_attractor.hpp" 36 #include "hx3d/physics/2d/attractors/zone_attractor.hpp" 37 #include "hx3d/physics/2d/collision_listener.hpp" 39 #include "hx3d/graphics/base_batch.hpp" 62 World(
const glm::vec2 globalGravity = {0, -9.81},
const unsigned int iterations = 10,
const float physRatio = 10.f);
97 void step(
float dt = 1.f/60.f);
129 unsigned int _iterations;
134 std::vector<Ptr<Attractor>> _attractors;
136 std::vector<Ptr<Collider>> _colliders;
138 std::vector<Ptr<CollisionListener>> _listeners;
140 std::vector<Manifold> _contacts;
143 std::set<Manifold> _inContact;
145 std::set<Manifold> _inPrevContact;
172 bool prevContactExists(
Manifold& m);
177 void checkOldContacts();
void addListener(const Ptr< CollisionListener > &listener)
Add a collision listener.
World(const glm::vec2 globalGravity={0,-9.81}, const unsigned int iterations=10, const float physRatio=10.f)
Create a world with a global gravity, iterations and the physical ratio.
void addAttractor(const Ptr< Attractor > &attractor)
Add an attractor.
CollisionMatrix & getCollisionMatrix()
Get the collision matrix.
void render(graphics::BaseBatch &batch)
Render a debug view of the physical simulation.
Collision matrix with masks and category.
Contact manifold definition.
Physical world. Manages colliders and attractors.
const Ptr< GlobalAttractor > getGlobalGravity()
Get the global attractor.
float getPhysRatio() const
Get the physical ratio.
Draw meshes and texts on screen.
void removeCollider(const Ptr< Collider > &collider)
Remove a collider.
void step(float dt=1.f/60.f)
Step the physical simulation.
std::shared_ptr< T > Ptr
Quick-typing shared ptr.
void addCollider(const Ptr< Collider > &collider)
Add a collider.