|
|
how about we add yet another class to gui for collisions? a collisions class. We could use spheres as well as boxes, but the boxes are closer for more of the time. Spheres have a constant issue with empty space around the mesh.
Here's some kinda bad c++/ogre code I found. We need to remove the framelistener stuff
class CollisionManager :
public PersistentFrameListener
{
public:
~CollisionManager();
static CollisionManager& Instance()
{
static CollisionManager instance;
return instance;
}
void Startup();
void Shutdown();
void AddCollisionObject(CollisionObject* object);
void RemoveCollisionObject(CollisionObject* object);
bool FrameEnded(const FrameEvent& evt);
protected:
CollisionManager();
void AddNewObjects();
void RemoveDeletedObjects();
CollisionObjectList collisionObjectList;
CollisionObjectList newObjects;
CollisionObjectList deletedObjects;
};
void CollisionManager::AddCollisionObject(CollisionObject* object)
{
newObjects.push_back(object);
}
void CollisionManager::RemoveCollisionObject(CollisionObject* object)
{
deletedObjects.push_back(object);
}
void CollisionManager::AddNewObjects()
{
for (CollisionObjectList::iterator iter = newObjects.begin();
iter != newObjects.end(); ++iter)
{
collisionObjectList.push_back(*iter);
}
newObjects.clear();
}
void CollisionManager::RemoveDeletedObjects()
{
for (CollisionObjectList::iterator iter = deletedObjects.begin();
iter != deletedObjects.end(); ++iter)
{
collisionObjectList.remove(*iter);
}
deletedObjects.clear();
}
bool CollisionManager::FrameEnded(const FrameEvent& evt)
{
AddNewObjects();
RemoveDeletedObjects();
for (CollisionObjectList::iterator iter1 = collisionObjectList.begin();
iter1 != collisionObjectList.end(); ++iter1)
{
CollisionObjectList::iterator iter2 = iter1;
++iter2;
for ( ; iter2 != collisionObjectList.end(); ++iter2)
{
CollisionObject* const object1 = *iter1;
CollisionObject* const object2 = *iter2;
if (object1->IsStarted() && object2->IsStarted())
{
const Sphere& object1Sphere = object1->GetBoundingSphere();
const Sphere& object2Sphere = object2->GetBoundingSphere();
if (object1Sphere.intersects(object2Sphere))
{
object1->Collision(object2);
object2->Collision(object1);
}
}
}
}
return true;
}
Categories: None
The words you entered did not match the given text. Please try again.
Oops!
Oops, you forgot something.