Jet  v1.3.3
collider3.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_COLLIDER3_H_
8 #define INCLUDE_JET_COLLIDER3_H_
9 
10 #include <jet/surface3.h>
11 #include <functional>
12 
13 namespace jet {
14 
24 class Collider3 {
25  public:
32  typedef std::function<void(Collider3*, double, double)>
34 
37 
39  virtual ~Collider3();
40 
42  virtual Vector3D velocityAt(const Vector3D& point) const = 0;
43 
53  double radius,
54  double restitutionCoefficient,
55  Vector3D* position,
56  Vector3D* velocity);
57 
59  double frictionCoefficient() const;
60 
67  void setFrictionCoefficient(double newFrictionCoeffient);
68 
70  const Surface3Ptr& 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 Surface3Ptr& newSurface);
98 
101  const Surface3Ptr& surface,
102  const Vector3D& queryPoint,
103  ColliderQueryResult* result) const;
104 
107  const ColliderQueryResult& colliderPoint,
108  const Vector3D& position,
109  double radius);
110 
111  private:
112  Surface3Ptr _surface;
113  double _frictionCoeffient = 0.0;
114  OnBeginUpdateCallback _onUpdateCallback;
115 };
116 
118 typedef std::shared_ptr<Collider3> Collider3Ptr;
119 
120 } // namespace jet
121 
122 #endif // INCLUDE_JET_COLLIDER3_H_
jet::Collider3::setOnBeginUpdateCallback
void setOnBeginUpdateCallback(const OnBeginUpdateCallback &callback)
Sets the callback function to be called when Collider2::update function is invoked.
jet::Collider3
Abstract base class for generic collider object.
Definition: collider3.h:24
jet::Collider3::Collider3
Collider3()
Default constructor.
jet::Collider3::ColliderQueryResult::normal
Vector3D normal
Definition: collider3.h:92
jet::Collider3::getClosestPoint
void getClosestPoint(const Surface3Ptr &surface, const Vector3D &queryPoint, ColliderQueryResult *result) const
Outputs closest point's information.
surface3.h
jet::Collider3::surface
const Surface3Ptr & surface() const
Returns the surface instance.
jet::Collider3::resolveCollision
void resolveCollision(double radius, double restitutionCoefficient, Vector3D *position, Vector3D *velocity)
jet::Collider3::ColliderQueryResult
Internal query result structure.
Definition: collider3.h:89
jet::Surface3Ptr
std::shared_ptr< Surface3 > Surface3Ptr
Shared pointer for the Surface3 type.
Definition: surface3.h:109
jet::Collider3::ColliderQueryResult::distance
double distance
Definition: collider3.h:90
jet
Definition: advection_solver2.h:18
jet::Collider3::frictionCoefficient
double frictionCoefficient() const
Returns friction coefficent.
jet::Collider3::ColliderQueryResult::velocity
Vector3D velocity
Definition: collider3.h:93
jet::Collider3::setSurface
void setSurface(const Surface3Ptr &newSurface)
Assigns the surface instance from the subclass.
jet::Collider3::OnBeginUpdateCallback
std::function< void(Collider3 *, double, double)> OnBeginUpdateCallback
Callback function type for update calls.
Definition: collider3.h:33
jet::Collider3::ColliderQueryResult::point
Vector3D point
Definition: collider3.h:91
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::Collider3::setFrictionCoefficient
void setFrictionCoefficient(double newFrictionCoeffient)
Sets the friction coefficient.
jet::Collider3::velocityAt
virtual Vector3D velocityAt(const Vector3D &point) const =0
Returns the velocity of the collider at given point.
jet::Collider3Ptr
std::shared_ptr< Collider3 > Collider3Ptr
Shared pointer type for the Collider2.
Definition: collider3.h:118
jet::Collider3::update
void update(double currentTimeInSeconds, double timeIntervalInSeconds)
Updates the collider state.
jet::Collider3::isPenetrating
bool isPenetrating(const ColliderQueryResult &colliderPoint, const Vector3D &position, double radius)
Returns true if given point is in the opposite side of the surface.
jet::Collider3::~Collider3
virtual ~Collider3()
Default destructor.