void ParticlesEditorController::AddParticleEmitterNodeToScene(Entity* emitterSceneNode) { // We are adding new Emitter to the Particle Effect node just selected. Entity* effectNode = NULL; BaseParticleEditorNode* selectedNode = GetSelectedNode(); if (selectedNode) { effectNode = selectedNode->GetRootNode(); } EffectParticleEditorNode* effectEditorNode = GetRootForParticleEffectNode(effectNode); if (effectNode && effectEditorNode) { EmitterParticleEditorNode* emitterEditorNode = new EmitterParticleEditorNode(effectNode, emitterSceneNode, QString::fromStdString(emitterSceneNode->GetName())); ParticleEmitter * emitter = GetEmitter(emitterSceneNode); if (!emitter) { return; } emitter->SetLifeTime(LIFETIME_FOR_NEW_PARTICLE_EMITTER); effectNode->AddNode(emitterSceneNode); effectEditorNode->AddChildNode(emitterEditorNode); } }
Entity* ParticlesEditorSceneModelHelper::PreprocessSceneNode(Entity* rawNode) { // There is one and only preprocessing case - if the "raw" node is "orphaned" Particles Emitter // (without the ParticlesEffectNode parent), we'll create the new Particles Effect node and // move the raw Emitter node to it. ParticleEmitter * emitter = GetEmitter(rawNode); if (!emitter) { return rawNode; } //ParticleEmitterNode* emitterNode = static_cast<ParticleEmitterNode*>(rawNode); //emitterNode->SetEmitter(emitterComponent->GetParticleEmitter()); Entity* curParentNode = rawNode->GetParent(); ParticleEffectComponent * effectComponent = cast_if_equal<ParticleEffectComponent*>(curParentNode->GetComponent(Component::PARTICLE_EFFECT_COMPONENT)); // If the Emitter Node has parent, but its parent is not ParticleEffectNode, we need to // "adopt" this node by creating ParticleEffect node and attaching. if (curParentNode && (effectComponent == NULL)) { Entity* newParentNodeParticleEffect = CreateParticleEffectNode(); curParentNode->AddNode(newParentNodeParticleEffect); // Add the emitter node to the new Effect (this will also remove it from the scene). newParentNodeParticleEffect->AddNode(rawNode); // Register the Particle Editor structure for the new node. EffectParticleEditorNode* effectEditorNode = ParticlesEditorController::Instance()->RegisterParticleEffectNode(newParentNodeParticleEffect); EmitterParticleEditorNode* emitterEditorNode = new EmitterParticleEditorNode(newParentNodeParticleEffect, rawNode, QString::fromStdString(rawNode->GetName())); effectEditorNode->AddChildNode(emitterEditorNode); return newParentNodeParticleEffect; } // No preprocessing needed. return rawNode; }