00001 #include "ObjectManager.h" 00002 #include "Application.h" 00003 #include "TrackPhysicalObject.h" 00004 00005 ObjectManager::ObjectManager() 00006 { 00007 m_renderableVisitor = new Visitor(); 00008 // New track in viewer space. 00009 m_track = new Track(Application::getSingleton()->getViewerManager()); 00010 addObject(m_track); 00011 } 00012 00013 ObjectManager::~ObjectManager() 00014 { 00015 std::list<GameObject*>::iterator iterator; 00016 for (iterator = m_objects.begin(); iterator != m_objects.end(); ++iterator) 00017 { 00018 delete (*iterator); 00019 } 00020 m_objects.clear(); 00021 00022 delete m_renderableVisitor; 00023 } 00024 00025 void ObjectManager::addObject(GameObject *_val) 00026 { 00027 m_objects.push_back(_val); 00028 } 00029 00030 void ObjectManager::removeObject(GameObject *_val) 00031 { 00032 std::list<GameObject*>::iterator iterator; 00033 for (iterator = m_objects.begin(); iterator != m_objects.end(); ++iterator) 00034 { 00035 if ((*iterator) == _val) 00036 { 00037 m_objects.erase(iterator); 00038 break; 00039 } 00040 } 00041 } 00042 00043 void ObjectManager::update(Ogre::Real _time) 00044 { 00045 std::list<GameObject*>::iterator iterator; 00046 for (iterator = m_objects.begin(); iterator != m_objects.end(); ++iterator) 00047 { 00048 try 00049 { 00050 (*iterator)->move(_time); 00051 } 00052 catch (...) 00053 { 00054 // Object doesn't have a move function. 00055 } 00056 try 00057 { 00058 TrackPhysicalObject* _trackObject = 0; 00059 if (dynamic_cast<TrackPhysicalObject*>(*iterator)) 00060 { 00061 _trackObject = dynamic_cast<TrackPhysicalObject*>(*iterator); 00062 try 00063 { 00064 if (_trackObject->getStaticGeometry() != 0) 00065 { 00066 _trackObject->getStaticGeometry()->visitRenderables(m_renderableVisitor); 00067 } 00068 // And that should be that. 00069 } 00070 catch (...) 00071 { 00072 // For some reason, we couldn't visit. It's likely that the _trackObject isn't actually a TrackPhysicalObject. No matter. 00073 } 00074 } 00075 } 00076 catch (...) 00077 { 00078 // Object doesn't care about the player craft's position. 00079 } 00080 } 00081 00082 } 00083 00084 Track* ObjectManager::getTrack() 00085 { 00086 return m_track; 00087 } 00088 00089 Track* ObjectManager::getIntroTrack() 00090 { 00091 return m_introTrack; 00092 } 00093 00094 void ObjectManager::setTrack(Track* _val) 00095 { 00096 m_track = _val; 00097 } 00098 00099 void ObjectManager::setIntroTrack(Track* _val) 00100 { 00101 m_introTrack = _val; 00102 } 00103 00104 void ObjectManager::setCraftPtr(SelectableObject* _val) 00105 { 00106 m_craftPtr = _val; 00107 } 00108 00109 SelectableObject* ObjectManager::getCraftPtr() 00110 { 00111 return m_craftPtr; 00112 }