bool ParticlesEditorController::PerformMoveBetweenEmitters(EmitterParticleEditorNode* oldEmitterNode, EmitterParticleEditorNode* newEmitterNode, LayerParticleEditorNode* layerNodeToMove, LayerParticleEditorNode* layerNodeToInsertAbove) { ParticleEmitter* oldParentEmitter = oldEmitterNode->GetParticleEmitter(); ParticleEmitter* newParentEmitter = newEmitterNode->GetParticleEmitter(); if (!oldParentEmitter || !newParentEmitter) { return false; } // Move the Editor node. layerNodeToInsertAbove is allowed to be NULL. newEmitterNode->AddChildNodeAbove(layerNodeToMove, layerNodeToInsertAbove); oldEmitterNode->RemoveChildNode(layerNodeToMove, false); // Move the Particle Layers themselves. ParticleLayer* layerToMove = layerNodeToMove->GetLayer(); ParticleLayer* layerToInsertAbove = NULL; if (layerNodeToInsertAbove) { layerToInsertAbove = layerNodeToInsertAbove->GetLayer(); } SafeRetain(layerToMove); oldParentEmitter->RemoveLayer(layerToMove); newParentEmitter->AddLayer(layerToMove, layerToInsertAbove); SafeRelease(layerToMove); // Update the emitter. layerNodeToMove->UpdateEmitterEditorNode(newEmitterNode); return true; }
void ParticlesEditorController::RemoveParticleLayerNode(LayerParticleEditorNode* layerToRemove) { if (!layerToRemove) { return; } EmitterParticleEditorNode* emitterNode = layerToRemove->GetEmitterEditorNode(); if (!emitterNode) { return; } ParticleEmitter* emitter = emitterNode->GetParticleEmitter(); if (!emitter) { return; } // Lookup for the layer to be removed. int32 layerIndex = layerToRemove->GetLayerIndex(); if (layerIndex == -1) { return; } // Reset the selected node in case it is one to be removed. CleanupSelectedNodeIfDeleting(layerToRemove); // Remove the node from the layers list and also from the emitter. emitter->RemoveLayer(layerIndex); emitterNode->RemoveChildNode(layerToRemove); }