From b8c1bab4ae35fa4fcad5fae48c2e7537c7ef60ba Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 27 Feb 2014 17:52:35 -0800 Subject: [PATCH] Using pre-computed Model shapes for collisions ...instead of generating collision shapes on the fly --- interface/src/renderer/Model.cpp | 4 ++++ libraries/shared/src/CollisionInfo.cpp | 4 ++++ libraries/shared/src/CollisionInfo.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 64b078291a..47a6013b5f 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -525,6 +525,10 @@ bool Model::findSphereCollisions(const glm::vec3& sphereCenter, float sphereRadi } } if (ShapeCollider::shapeShape(&sphere, _shapes[i], collisions)) { + CollisionInfo* collision = collisions.getLastCollision(); + collision->_type = MODEL_COLLISION; + collision->_data = (void*)(this); + collision->_flags = i; collided = true; } outerContinue: ; diff --git a/libraries/shared/src/CollisionInfo.cpp b/libraries/shared/src/CollisionInfo.cpp index e54ff12f47..f6c0d057a1 100644 --- a/libraries/shared/src/CollisionInfo.cpp +++ b/libraries/shared/src/CollisionInfo.cpp @@ -24,6 +24,10 @@ CollisionInfo* CollisionList::getCollision(int index) { return (index > -1 && index < _size) ? &(_collisions[index]) : NULL; } +CollisionInfo* CollisionList::getLastCollision() { + return (_size > 0) ? &(_collisions[_size - 1]) : NULL; +} + void CollisionList::clear() { for (int i = 0; i < _size; ++i) { // we only clear the important stuff diff --git a/libraries/shared/src/CollisionInfo.h b/libraries/shared/src/CollisionInfo.h index 2de13e30d1..868d259ce3 100644 --- a/libraries/shared/src/CollisionInfo.h +++ b/libraries/shared/src/CollisionInfo.h @@ -80,6 +80,9 @@ public: /// \return pointer to collision by index. NULL if index out of bounds. CollisionInfo* getCollision(int index); + /// \return pointer to last collision on the list. NULL if list is empty + CollisionInfo* getLastCollision(); + /// \return true if list is full bool isFull() const { return _size == _maxSize; }