00001 00007 #include "SO3ParticleSystem.h" 00008 #include "SO3Scene.h" 00009 00010 namespace SO3 00011 { 00012 00013 SParticleSystem::SParticleSystem(SScene* parent, std::string particleSystemName, std::string particleTemplateName) : SNode(parent, particleSystemName, SNode::PARTICLE_SYSTEM_TYPE_ID) 00014 { 00015 O3ParticleSystem = currentScene->GetOgreScenePointer()->createParticleSystem(particleSystemName , particleTemplateName); 00016 O3SceneNode->attachObject(O3ParticleSystem); 00017 00018 templateName = particleTemplateName; 00019 speedFactor = O3ParticleSystem->getSpeedFactor(); 00020 isEnable = true; 00021 isPaused = false; 00022 00023 ogreMovableObject = O3ParticleSystem; 00024 } 00025 00026 SParticleSystem::SParticleSystem() : SNode(0, "", SNode::PARTICLE_SYSTEM_TYPE_ID) 00027 { 00028 // Forbiden (private) 00029 } 00030 00031 SParticleSystem::~SParticleSystem() 00032 { 00033 O3SceneNode->detachObject(O3ParticleSystem); 00034 currentScene->GetOgreScenePointer()->destroyParticleSystem(O3ParticleSystem); 00035 O3ParticleSystem = 0; 00036 ogreMovableObject = 0; 00037 00038 /*TODO 00039 Ogre::MaterialManager::getSingleton().unloadUnreferencedResources(false); 00040 Ogre::TextureManager::getSingleton().unloadUnreferencedResources(false);*/ 00041 } 00042 00043 Ogre::ParticleSystem* SParticleSystem::GetOgreParticleSystem() 00044 { 00045 return O3ParticleSystem; 00046 } 00047 00048 void SParticleSystem::SetRenderingDistance(float distance) 00049 { 00050 return O3ParticleSystem->setRenderingDistance(distance); 00051 } 00052 00053 float SParticleSystem::GetRenderingDistance() 00054 { 00055 return O3ParticleSystem->getRenderingDistance(); 00056 } 00057 00058 void SParticleSystem::SetScale(Ogre::Vector3 scale) 00059 { 00060 if(O3ParticleSystem->getKeepParticlesInLocalSpace()) 00061 O3SceneNode->setScale(scale); 00062 } 00063 00064 std::string SParticleSystem::GetParticleTemplateName() 00065 { 00066 return templateName; 00067 } 00068 00069 void SParticleSystem::SetSpeed(float speed) 00070 { 00071 speedFactor = speed; 00072 if(!isPaused) 00073 O3ParticleSystem->setSpeedFactor(speedFactor); 00074 } 00075 00076 float SParticleSystem::GetSpeed() 00077 { 00078 return speedFactor; 00079 } 00080 00081 void SParticleSystem::SetEnable(bool enable) 00082 { 00083 int numEmitters = O3ParticleSystem->getNumEmitters(); 00084 if(!enable) 00085 { 00086 for(int i = 0; i<numEmitters; i++) 00087 O3ParticleSystem->getEmitter(i)->setEnabled(false); 00088 } 00089 else 00090 { 00091 isPaused = false; 00092 O3ParticleSystem->setSpeedFactor(speedFactor); 00093 for(int i = 0; i<numEmitters; i++) 00094 O3ParticleSystem->getEmitter(i)->setEnabled(true); 00095 } 00096 isEnable = enable; 00097 } 00098 00099 bool SParticleSystem::GetEnable() 00100 { 00101 return isEnable; 00102 } 00103 00104 void SParticleSystem::SetPaused(bool pause) 00105 { 00106 if(!pause) 00107 { 00108 O3ParticleSystem->setSpeedFactor(speedFactor); 00109 } 00110 else 00111 { 00112 speedFactor = O3ParticleSystem->getSpeedFactor(); 00113 O3ParticleSystem->setSpeedFactor(0.0f); 00114 } 00115 isPaused = pause; 00116 } 00117 00118 bool SParticleSystem::GetPaused() 00119 { 00120 return isPaused; 00121 } 00122 00123 void SParticleSystem::ClearParticles() 00124 { 00125 O3ParticleSystem->clear(); 00126 } 00127 00128 }
1.6.3