Kaynağa Gözat

Added a trigger method to the particle system, added an accessor for the top level resource pool in the entity instance

Ivan Safrin 12 yıl önce
ebeveyn
işleme
5345dbe0f1

+ 2 - 0
Core/Contents/Include/PolyParticleEmitter.h

@@ -67,6 +67,8 @@ namespace Polycode {
             void updateParticles();
             void rebuildParticles();
         
+            void triggerParticles(bool allAtOnce);
+        
             void enableParticleSystem(bool val);
         
             void setUseFloorPlane(bool val);

+ 2 - 0
Core/Contents/Include/PolySceneEntityInstance.h

@@ -66,6 +66,8 @@ class SceneEntityInstance : public Entity {
         void unlinkResourcePool(ResourcePool *pool);
     
 		SceneEntityInstanceResourceEntry *getResourceEntry();
+    
+        ResourcePool *getTopLevelResourcePool();
 
 		
 		String getFileName() const;

+ 11 - 0
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -257,6 +257,17 @@ void SceneParticleEmitter::setParticleLifetime(Number lifetime) {
     }
 }
 
+void SceneParticleEmitter::triggerParticles(bool allAtOnce) {
+    for(int i=0; i < particles.size(); i++) {
+        resetParticle(i);
+        if(allAtOnce) {
+            particles[i].lifetime = 0.0;
+        } else {
+            particles[i].lifetime = RANDOM_NUMBER * -lifetime;
+        }
+    }
+}
+
 Vector3 SceneParticleEmitter::getDirectionDeviation() const {
     return directionDeviation;
 }

+ 6 - 1
Core/Contents/Source/PolySceneEntityInstance.cpp

@@ -57,18 +57,19 @@ SceneEntityInstance *SceneEntityInstance::BlankSceneEntityInstance(Scene *parent
 SceneEntityInstance::SceneEntityInstance(Scene *parentScene, const String& fileName) : Entity() {
     this->parentScene = parentScene;
 	resourceEntry = new SceneEntityInstanceResourceEntry(this);
+    topLevelResourcePool = CoreServices::getInstance()->getResourceManager()->getGlobalPool();
 	loadFromFile(fileName);
 	resourceEntry->setResourceName(fileName);
 	resourceEntry->setResourcePath(fileName);
 	cloneUsingReload = false;
 	ownsChildren = true;
-    topLevelResourcePool = CoreServices::getInstance()->getResourceManager()->getGlobalPool();
 }
 
 SceneEntityInstance::SceneEntityInstance(Scene *parentScene) : Entity() {
     this->parentScene = parentScene;
 	cloneUsingReload = true;
 	ownsChildren = true;
+    topLevelResourcePool = CoreServices::getInstance()->getResourceManager()->getGlobalPool();    
 	resourceEntry = new SceneEntityInstanceResourceEntry(this);
 }
 
@@ -491,6 +492,10 @@ String SceneEntityInstance::getFileName() const {
 	return fileName;
 }
 
+ResourcePool *SceneEntityInstance::getTopLevelResourcePool() {
+    return topLevelResourcePool;
+}
+
 void SceneEntityInstance::clearInstance() {
     
     resourcePools.clear();