hx3d  1
2D/3D Simple Game Framework
point_attractor.cpp
1 #include "hx3d/physics/2d/attractors/point_attractor.hpp"
2 
3 #include "hx3d/math/vector_utils.hpp"
4 
5 namespace hx3d {
6 namespace physics2d {
7 
8 PointAttractor::PointAttractor():
9  Attractor(Type::Point),
10  position(0, 0),
11  velocity(0, 0),
12  radius(0)
13  {}
14 
15 bool PointAttractor::overlaps(const Ptr<Collider>& collider) {
16  if (radius == 0) return false;
17 
18  float dx = position.x - collider->position.x;
19  float dy = position.y - collider->position.y;
20  return dx * dx + dy * dy <= radius * radius;
21 }
22 
23 void PointAttractor::computeForce(const Ptr<Collider>& collider, const float dt) {
24  glm::vec2 dir = math::normalize(position - collider->position);
25  dir *= velocity;
26  collider->gravityForce += dir;
27 }
28 
29 }
30 }
hx3d framework namespace
Definition: audio.hpp:26
virtual bool overlaps(const Ptr< Collider > &collider) override
Check if a collider overlaps the attractor.
virtual void computeForce(const Ptr< Collider > &collider, const float dt) override
Compute the gravity force on a collider.
glm::vec2 normalize(glm::vec2 vec)
Normalize a 2D vector.
std::shared_ptr< T > Ptr
Quick-typing shared ptr.
Definition: ptr.hpp:34