24 #include "GameObject.h" 25 #include "TwoPhaseCollider.h" 28 this->broadPhaseCollider = broadPhaseCollider;
29 this->exactPhaseCollider = exactPhaseCollider;
38 triggerObjectEvents(exactCollisions);
41 std::stringstream timeMessage;
42 timeMessage <<
"Tested " << possibleCollision.size() <<
" possible collision in : " << timer.getElapsedTime() <<
" ms";
43 Logger::logDebug(timeMessage.str());
46 void TwoPhaseCollider::triggerObjectEvents(CollisionPairList exactCollisions) {
47 for(
auto i = exactCollisions.begin(); i != exactCollisions.end(); i++ ) {
48 CollisionPair pair = *i;
53 if(wasCollidingPreviously(object1, object2)) {
54 triggerObjectEvent(object1, object2, EventType::DuringCollision);
56 triggerObjectEvent(object1, object2, EventType::BeforeCollision);
60 callEventsForObjectsThatNoLongerCollides(exactCollisions);
63 void TwoPhaseCollider::callEventsForObjectsThatNoLongerCollides(CollisionPairList exactCollisions) {
64 CollisionPairList newCollidingList;
66 for(
auto i = exactCollisions.begin(); i != exactCollisions.end(); i++ ) {
67 CollisionPair pair = *i;
75 CollisionPair sortedPair(id1, id2);
76 if(std::find(collidingList.begin(), collidingList.end(), sortedPair) != collidingList.end()) {
77 collidingList.erase(std::remove(collidingList.begin(), collidingList.end(), sortedPair));
79 newCollidingList.push_back(sortedPair);
83 for(
auto i = collidingList.begin(); i != collidingList.end(); i++ ) {
84 CollisionPair pair = *i;
88 triggerObjectEvent(object1, object2, EventType::AfterCollision);
91 collidingList = newCollidingList;
95 void TwoPhaseCollider::triggerObjectEvent(
GameObject* object1,
GameObject* object2, EventType eventType) {
104 collidingList.push_back(CollisionPair(id1, id2));
111 collidingList.erase(std::remove(collidingList.begin(), collidingList.end(),
112 CollisionPair(id1, id2)));
119 return std::find(collidingList.begin(), collidingList.end(), CollisionPair(id1, id2)) != collidingList.end();
123 return object1->getId() < object2->getId() ? object1 : object2;
127 return object1->getId() > object2->getId() ? object1 : object2;
void updateCollision(Scene *scene) override
virtual CollisionPairList computeCollisionPairs(Scene *scene)=0
virtual CollisionPairList computeExactCollision(CollisionPairList possibleCollision)=0
A class for containing all information about a object in the game world.
void callEvent(EventType type, GameObject *data)