News

Collsions

Posted by Liesl Wigand on April 21, 2010 at 4:29 PM

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

Post a Comment

Oops!

Oops, you forgot something.

Oops!

The words you entered did not match the given text. Please try again.

Already a member? Sign In

0 Comments