Hymn to Beauty
C++ 3D Engine
TriggerObserver.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <BulletCollision/CollisionDispatch/btCollisionWorld.h>
4#include <functional>
5
6class btCollisionObject;
7
8namespace Physics {
11
16class TriggerObserver : public btCollisionWorld::ContactResultCallback {
17 public:
19 enum class IntersectionPhase {
21 Enter,
25 Leave,
27 None,
28 };
29
30 public:
32
35 explicit TriggerObserver(btCollisionObject& body);
36
38
41 btCollisionObject* GetBulletCollisionObject();
42
44
49
53
56
59 void OnEnter(const std::function<void()>& handler);
60
63 void ForgetEnter();
64
67
70 void OnRetain(const std::function<void()>& handler);
71
74 void ForgetRetain();
75
78
81 void OnLeave(const std::function<void()>& handler);
82
85 void ForgetLeave();
86
87 private:
88 // Overridden from btCollisionWorld::ContactResultCallback for
89 // custom intersection handling.
90 btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1) override;
91
93 btCollisionObject& rigidBody;
94
95 // Control value to determine whether an intersection happened
96 // during this frame. This is used to determine the new phase.
97 bool didCallback = false;
98
99 std::function<void()> enterHandler;
100 std::function<void()> retainHandler;
101 std::function<void()> leaveHandler;
102};
103} // namespace Physics
Definition: TriggerObserver.hpp:16
void PostIntersectionTest()
Definition: TriggerObserver.cpp:16
void ForgetRetain()
Definition: TriggerObserver.cpp:92
void OnEnter(const std::function< void()> &handler)
Definition: TriggerObserver.cpp:80
void OnRetain(const std::function< void()> &handler)
Definition: TriggerObserver.cpp:88
btCollisionObject * GetBulletCollisionObject()
Get the Bullet collision object of the observing body.
Definition: TriggerObserver.cpp:8
IntersectionPhase
The type of intersection this observer has to its trigger.
Definition: TriggerObserver.hpp:19
@ Retained
Intersection after previous enter.
@ Leave
Stopped intersecting this frame.
@ Enter
Intersected during this frame.
TriggerObserver(btCollisionObject &body)
Constructor.
Definition: TriggerObserver.cpp:6
void ForgetLeave()
Definition: TriggerObserver.cpp:100
IntersectionPhase GetPhase() const
Get the intersection phase of the observer.
Definition: TriggerObserver.cpp:12
void ForgetEnter()
Definition: TriggerObserver.cpp:84
void OnLeave(const std::function< void()> &handler)
Definition: TriggerObserver.cpp:96
Definition: IShapeEditor.hpp:7