EffectParticleEditorNode* ParticlesEditorController::RegisterParticleEffectNode(Entity* effectNode, bool autoStart) { if (!effectNode) { Logger::Warning("ParticlesEditorController::RegisterParticleEffectNode(): node is NULL!"); return NULL; } EffectParticleEditorNode* rootNode = new EffectParticleEditorNode(effectNode); this->particleEffectNodes[effectNode] = rootNode; if (autoStart) { ParticleEffectComponent * effectComponent = cast_if_equal<ParticleEffectComponent*>(effectNode->GetComponent(Component::PARTICLE_EFFECT_COMPONENT)); DVASSERT(effectComponent); effectComponent->Start(); } return rootNode; }
void SpritePackerHelper::EnumerateSpritesForReloading(SceneData* sceneData, Map<String, Sprite *> &sprites) { List<Entity*> particleEffects; sceneData->GetAllParticleEffects(particleEffects); for (auto it = particleEffects.begin(); it != particleEffects.end(); ++it) { Entity* curNode = (*it); ParticleEffectComponent * effectComponent = cast_if_equal<ParticleEffectComponent*>(curNode->GetComponent(Component::PARTICLE_EFFECT_COMPONENT)); if (!effectComponent) { continue; } bool isStopped = effectComponent->IsStopped(); if (!isStopped) { effectComponent->Stop(); } // All the children of this Scene Node must have Emitter components. int32 emittersCount = curNode->GetChildrenCount(); for (int32 i = 0; i < emittersCount; i ++) { Entity* childNode = curNode->GetChild(i); ParticleEmitter * emitter = GetEmitter(childNode); EnumerateSpritesForParticleEmitter(emitter, sprites); } if (!isStopped) { effectComponent->Start(); } } }