hx3d  1
2D/3D Simple Game Framework
zone_attractor.cpp
1 #include "hx3d/physics/2d/attractors/zone_attractor.hpp"
2 
3 namespace hx3d {
4 namespace physics2d {
5 
6 ZoneAttractor::Definition::Definition():
7  unitCoef(1/30.f)
8  {}
9 
11  Attractor(Type::Zone),
12  position(0, 0),
13  velocity(0, 0),
14  width(0),
15  height(0)
16  {}
17 
20  {
21  useDefinition(def);
22  }
23 
25  position = def.position * def.unitCoef;
26  width = def.width * def.unitCoef;
27  height = def.height * def.unitCoef;
28 
29  velocity = def.velocity;
30 }
31 
32 bool ZoneAttractor::overlaps(const Ptr<Collider>& collider) {
33  bool x_overlap = (collider->position.x >= position.x - width / 2 && collider->position.x <= position.x + width / 2);
34  if (x_overlap) {
35  bool y_overlap = (collider->position.y >= position.y - height / 2 && collider->position.y <= position.y + height / 2);
36  if (y_overlap) {
37  return true;
38  }
39  }
40 
41  return false;
42 }
43 
44 void ZoneAttractor::computeForce(const Ptr<Collider>& collider, const float dt) {
45  collider->gravityForce += velocity;
46 }
47 
48 } /* physics2d */
49 }
virtual bool overlaps(const Ptr< Collider > &collider) override
Check if a collider overlaps the attractor.
Type
Attractor type.
Definition: attractor.hpp:39
glm::vec2 position
Zone position.
void useDefinition(const Definition &def)
Use a definition on the zone attractor.
hx3d framework namespace
Definition: audio.hpp:26
virtual void computeForce(const Ptr< Collider > &collider, const float dt) override
Compute the gravity force on a collider.
glm::vec2 velocity
Point velocity.
ZoneAttractor()
Create an empty zone attractor.
glm::vec2 position
Point position.
glm::vec2 velocity
Zone velocity.
Physical gravity attractor.
Definition: attractor.hpp:34
std::shared_ptr< T > Ptr
Quick-typing shared ptr.
Definition: ptr.hpp:34