Jet  v1.3.3
collider2.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_COLLIDER2_H_
8 #define INCLUDE_JET_COLLIDER2_H_
9 
10 #include <jet/surface2.h>
11 #include <functional>
12 
13 namespace jet {
14 
24 class Collider2 {
25  public:
32  typedef std::function<void(Collider2*, double, double)>
34 
37 
39  virtual ~Collider2();
40 
42  virtual Vector2D velocityAt(const Vector2D& point) const = 0;
43 
53  double radius,
54  double restitutionCoefficient,
55  Vector2D* position,
56  Vector2D* velocity);
57 
59  double frictionCoefficient() const;
60 
67  void setFrictionCoefficient(double newFrictionCoeffient);
68 
70  const Surface2Ptr& surface() const;
71 
73  void update(double currentTimeInSeconds, double timeIntervalInSeconds);
74 
86 
87  protected:
89  struct ColliderQueryResult final {
90  double distance;
94  };
95 
97  void setSurface(const Surface2Ptr& newSurface);
98 
101  const Surface2Ptr& surface,
102  const Vector2D& queryPoint,
103  ColliderQueryResult* result) const;
104 
107  const ColliderQueryResult& colliderPoint,
108  const Vector2D& position,
109  double radius);
110 
111  private:
112  Surface2Ptr _surface;
113  double _frictionCoeffient = 0.0;
114  OnBeginUpdateCallback _onUpdateCallback;
115 };
116 
118 typedef std::shared_ptr<Collider2> Collider2Ptr;
119 
120 } // namespace jet
121 
122 #endif // INCLUDE_JET_COLLIDER2_H_
surface2.h
jet::Collider2
Abstract base class for generic collider object.
Definition: collider2.h:24
jet::Collider2::isPenetrating
bool isPenetrating(const ColliderQueryResult &colliderPoint, const Vector2D &position, double radius)
Returns true if given point is in the opposite side of the surface.
jet::Collider2::ColliderQueryResult::distance
double distance
Definition: collider2.h:90
jet::Collider2::setSurface
void setSurface(const Surface2Ptr &newSurface)
Assigns the surface instance from the subclass.
jet::Collider2::setFrictionCoefficient
void setFrictionCoefficient(double newFrictionCoeffient)
Sets the friction coefficient.
jet::Collider2::ColliderQueryResult
Internal query result structure.
Definition: collider2.h:89
jet
Definition: advection_solver2.h:18
jet::Collider2::surface
const Surface2Ptr & surface() const
Returns the surface instance.
jet::Collider2::frictionCoefficient
double frictionCoefficient() const
Returns friction coefficent.
jet::Collider2::OnBeginUpdateCallback
std::function< void(Collider2 *, double, double)> OnBeginUpdateCallback
Callback function type for update calls.
Definition: collider2.h:33
jet::Surface2Ptr
std::shared_ptr< Surface2 > Surface2Ptr
Shared pointer for the Surface2 type.
Definition: surface2.h:109
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::Collider2::resolveCollision
void resolveCollision(double radius, double restitutionCoefficient, Vector2D *position, Vector2D *velocity)
jet::Collider2::Collider2
Collider2()
Default constructor.
jet::Collider2Ptr
std::shared_ptr< Collider2 > Collider2Ptr
Shared pointer type for the Collider2.
Definition: collider2.h:118
jet::Collider2::ColliderQueryResult::point
Vector2D point
Definition: collider2.h:91
jet::Collider2::setOnBeginUpdateCallback
void setOnBeginUpdateCallback(const OnBeginUpdateCallback &callback)
Sets the callback function to be called when Collider2::update function is invoked.
jet::Collider2::velocityAt
virtual Vector2D velocityAt(const Vector2D &point) const =0
Returns the velocity of the collider at given point.
jet::Collider2::ColliderQueryResult::normal
Vector2D normal
Definition: collider2.h:92
jet::Collider2::ColliderQueryResult::velocity
Vector2D velocity
Definition: collider2.h:93
jet::Collider2::update
void update(double currentTimeInSeconds, double timeIntervalInSeconds)
Updates the collider state.
jet::Collider2::~Collider2
virtual ~Collider2()
Default destructor.
jet::Collider2::getClosestPoint
void getClosestPoint(const Surface2Ptr &surface, const Vector2D &queryPoint, ColliderQueryResult *result) const
Outputs closest point's information.