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); }
void CommandSaveParticleEmitterToYaml::Execute() { BaseParticleEditorNode* selectedNode = ParticlesEditorController::Instance()->GetSelectedNode(); EmitterParticleEditorNode* emitterNode = dynamic_cast<EmitterParticleEditorNode*>(selectedNode); if (!emitterNode || !emitterNode->GetEmitterNode()) { return; } ParticleEmitter * emitter = emitterNode->GetParticleEmitter(); if (!emitter) { return; } FilePath yamlPath = emitter->GetConfigPath(); if (this->forceAskFilename || yamlPath.IsEmpty() ) { QString projectPath = QString(EditorSettings::Instance()->GetParticlesConfigsPath().GetAbsolutePathname().c_str()); QString filePath = QFileDialog::getSaveFileName(NULL, QString("Save Particle Emitter YAML file"), projectPath, QString("YAML File (*.yaml)")); if (filePath.isEmpty()) { return; } yamlPath = FilePath(filePath.toStdString()); } emitter->SaveToYaml(yamlPath); }
LayerParticleEditorNode* ParticlesEditorController::CloneParticleLayerNode(LayerParticleEditorNode* layerToClone) { if (!layerToClone || !layerToClone->GetLayer()) { return NULL; } EmitterParticleEditorNode* emitterNode = layerToClone->GetEmitterEditorNode(); if (!emitterNode) { return NULL; } ParticleEmitter* emitter = emitterNode->GetParticleEmitter(); if (!emitter) { return NULL; } ParticleLayer* clonedLayer = layerToClone->GetLayer()->Clone(); emitter->AddLayer(clonedLayer); LayerParticleEditorNode* clonedEditorNode = new LayerParticleEditorNode(emitterNode, clonedLayer); emitterNode->AddChildNode(clonedEditorNode); return clonedEditorNode; }
void CommandLoadParticleEmitterFromYaml::Execute() { BaseParticleEditorNode* selectedNode = ParticlesEditorController::Instance()->GetSelectedNode(); EmitterParticleEditorNode* emitterNode = dynamic_cast<EmitterParticleEditorNode*>(selectedNode); if (!emitterNode || !emitterNode->GetEmitterNode()) { return; } QString projectPath = QString(EditorSettings::Instance()->GetParticlesConfigsPath().GetAbsolutePathname().c_str()); Logger::Debug("Project path: %s", projectPath.toStdString().c_str()); QString filePath = QFileDialog::getOpenFileName(NULL, QString("Open Particle Emitter Yaml file"), projectPath, QString("YAML File (*.yaml)")); if (filePath.isEmpty()) { return; } // In case this emitter already has Editor Nodes - remove them before loading. ParticlesEditorController::Instance()->CleanupParticleEmitterEditorNode(emitterNode); ParticleEmitter* emitter = emitterNode->GetParticleEmitter(); if(!emitter) { return; } emitter->LoadFromYaml(filePath.toStdString()); // Perform the validation of the Yaml file loaded. String validationMessage; if (ParticlesEditorSceneDataHelper::ValidateParticleEmitter(emitter, validationMessage) == false) { ShowErrorDialog(validationMessage); } QtMainWindowHandler::Instance()->RefreshSceneGraph(); }