random_racer/src/ReloadPlane.cpp

Go to the documentation of this file.
00001 #include <stdio.h>
00002 
00003 #include <vrs/sg/scenething.h>
00004 
00005 #include <vrsode/PlaneShape.h>
00006 
00007 #include "ReloadPlane.h"
00008 
00009 using namespace VRS;
00010 using namespace vrsode;
00011 
00012 
00013 namespace random_racer
00014 {
00015 
00016 ReloadPlane::PlaneWrapper::PlaneWrapper(
00017     SO<SceneThing> p_parent,
00018     SO<vrsode::Shape> p_shape,
00019     SO<ReloadPlane> p_reloadPlane) : CollisionBody(p_parent, p_shape)
00020 {
00021     m_reloadPlane = p_reloadPlane;
00022 }
00023 
00024 ReloadPlane::PlaneWrapper::~PlaneWrapper()
00025 {
00026 }
00027 
00028 void
00029 ReloadPlane::PlaneWrapper::handleCollision(SO<CollisionBody> p_partner)
00030 {
00031     m_reloadPlane->handleCollisionFromThread();
00032 }
00033 
00034 
00035 ReloadPlane::ReloadPlane(
00036     SO<SceneThing> p_parentThing,
00037     SO<Callback1<unsigned int> > p_collisionCallback,
00038     unsigned int p_id,
00039     bool p_propagate)
00040 {
00041     m_parentThing   = p_parentThing;
00042     m_callback      = p_collisionCallback;
00043     m_planeId       = p_id;
00044     m_propagate     = p_propagate;
00045 
00046     m_sceneThing    = new SceneThing(m_parentThing);
00047     m_shape         = new PlaneShape(Vector(0,1,0),0.0);
00048 
00049     m_ownBody       = new PlaneWrapper(m_sceneThing, m_shape, this);
00050 
00051     m_ownBody->surface()->setGhostMode(true);
00052     m_ownBody->setCollisionPartnerCategories(1);
00053 
00054     m_collidedRecently = false;
00055     
00056     m_gotIt = false;
00057 }
00058 
00059 ReloadPlane::~ReloadPlane()
00060 {
00061     m_parentThing->remove(m_sceneThing);
00062 }
00063 
00064 void
00065 ReloadPlane::handleCollisionFromThread()
00066 {
00067     if(m_propagate)
00068     {
00069         lock();
00070 
00071             if(m_gotIt == false)
00072                 m_collidedRecently = true;
00073 
00074             else
00075             {
00076                 m_gotIt = false;
00077                 // std::cout << "ALSO PWNED!!!!11" << std::endl;
00078             }
00079 
00080         unlock();
00081     }
00082     else
00083         m_callback->callback(m_planeId);
00084 }
00085 
00086 void
00087 ReloadPlane::checkForCollision()
00088 {
00089     bool wasLocked = false;
00090 
00091     lock();
00092 
00093     if(m_collidedRecently)
00094     {
00095         m_collidedRecently = false;
00096 
00097         if(m_gotIt == false)
00098         {
00099             wasLocked = true;
00100             m_gotIt = true;
00101         }
00102         // else
00103         //     std::cout << "PWNED!!!11" << std::endl;
00104     }
00105 
00106     unlock();
00107     
00108     if(wasLocked)
00109         m_callback->callback(m_planeId);
00110 }
00111 
00112 } // namespace random_racer

Generated on Fri May 11 21:01:58 2007 for Random Racer by  doxygen 1.5.1