diff --git a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/Bundle.properties b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/Bundle.properties index 4898b7d08..1f24b4d73 100644 --- a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/Bundle.properties +++ b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/Bundle.properties @@ -35,7 +35,6 @@ SceneComposerTopComponent.cursorToSelectionButton.toolTipText=snap cursor to sel SceneComposerTopComponent.createPhysicsMeshButton.text=add collision shape SceneComposerTopComponent.createPhysicsMeshButton.toolTipText=Makes the Spatial physics enabled and generates a CollisionShape SceneComposerTopComponent.jLabel3.text= -SceneComposerTopComponent.sceneInfoPanel.border.title=no scene loaded SceneComposerTopComponent.palettePanel.border.title=no spatial selected Templates/JME3/Scene.j3o=Empty jME3 Scene SceneComposerTopComponent.jPanel4.border.title=Utilities @@ -52,3 +51,7 @@ SceneComposerTopComponent.selectButton.toolTipText=Select SceneComposerTopComponent.moveButton.toolTipText=Move SceneComposerTopComponent.rotateButton.toolTipText=Rotate (in-development) SceneComposerTopComponent.scaleButton.toolTipText=Scale (in-development) +SceneComposerTopComponent.sceneInfoPanel.border.title=no scene loaded +SceneComposerTopComponent.jLabel5.text=Effects : +SceneComposerTopComponent.emitButton.toolTipText=Emit all particles of all particle emitters from the selected Node +SceneComposerTopComponent.emitButton.text=Emit All Particles diff --git a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.form b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.form index 9a1a0cf7b..87fd247ba 100644 --- a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.form +++ b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.form @@ -70,8 +70,8 @@ - - + + @@ -473,8 +473,21 @@ - - + + + + + + + + + + + + + + + @@ -483,7 +496,14 @@ - + + + + + + + + @@ -594,6 +614,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.java b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.java index 2dd46dc8d..c0d9710c5 100644 --- a/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.java +++ b/sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.java @@ -5,6 +5,7 @@ package com.jme3.gde.scenecomposer; import com.jme3.asset.AssetManager; +import com.jme3.effect.ParticleEmitter; import com.jme3.gde.core.assets.AssetDataObject; import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.SpatialAssetDataObject; @@ -21,6 +22,7 @@ import com.jme3.math.Vector3f; import com.jme3.scene.Node; import com.jme3.scene.Spatial; import java.util.Collection; +import java.util.concurrent.Callable; import java.util.logging.Logger; import javax.swing.ButtonGroup; import javax.swing.border.TitledBorder; @@ -119,6 +121,9 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce fixedCheckBox = new javax.swing.JCheckBox(); radiusSpinner = new javax.swing.JSpinner(); heightSpinner = new javax.swing.JSpinner(); + jSeparator6 = new javax.swing.JSeparator(); + jLabel5 = new javax.swing.JLabel(); + emitButton = new javax.swing.JButton(); setBackground(new java.awt.Color(204, 204, 204)); @@ -133,8 +138,8 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce sceneInfoPanel.setLayout(sceneInfoPanelLayout); sceneInfoPanelLayout.setHorizontalGroup( sceneInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(sceneInfoLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE) - .addComponent(sceneInfoLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE) + .addComponent(sceneInfoLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE) + .addComponent(sceneInfoLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE) ); sceneInfoPanelLayout.setVerticalGroup( sceneInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -399,12 +404,32 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce heightSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.8f), null, null, Float.valueOf(0.1f))); jToolBar3.add(heightSpinner); + org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(SceneComposerTopComponent.class, "SceneComposerTopComponent.jLabel5.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(emitButton, org.openide.util.NbBundle.getMessage(SceneComposerTopComponent.class, "SceneComposerTopComponent.emitButton.text")); // NOI18N + emitButton.setToolTipText(org.openide.util.NbBundle.getMessage(SceneComposerTopComponent.class, "SceneComposerTopComponent.emitButton.toolTipText")); // NOI18N + emitButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + emitButtonActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jToolBar2, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE) - .addComponent(jToolBar3, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE) + .addComponent(jToolBar2, javax.swing.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE) + .addComponent(jToolBar3, javax.swing.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE) + .addGroup(jPanel4Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel4Layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(jLabel5) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(emitButton, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE)) + .addComponent(jSeparator6, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE)) + .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -412,7 +437,13 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce .addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jToolBar3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(83, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jSeparator6, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel5) + .addComponent(emitButton)) + .addContainerGap(38, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); @@ -521,12 +552,24 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce MoveTool tool = new MoveTool(); toolController.showEditTool(tool); }//GEN-LAST:event_moveButtonActionPerformed + +private void emitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_emitButtonActionPerformed + SceneApplication.getApplication().enqueue(new Callable() { + + public Object call() throws Exception { + emit(editorController.getSelectedSpat().getLookup().lookup(Spatial.class)); + return null; + } + }); + +}//GEN-LAST:event_emitButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addCursorButton; private javax.swing.JButton addObjectButton; private javax.swing.JButton camToCursorSelectionButton; private javax.swing.JButton createPhysicsMeshButton; private javax.swing.JButton cursorToSelectionButton; + private javax.swing.JButton emitButton; private javax.swing.JCheckBox fixedCheckBox; private javax.swing.JSpinner heightSpinner; private javax.swing.JButton jButton1; @@ -535,6 +578,7 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel5; private javax.swing.JList jList1; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; @@ -544,6 +588,7 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce private javax.swing.JToolBar.Separator jSeparator3; private javax.swing.JToolBar.Separator jSeparator4; private javax.swing.JToolBar.Separator jSeparator5; + private javax.swing.JSeparator jSeparator6; private javax.swing.JTextField jTextField1; private javax.swing.JToolBar jToolBar1; private javax.swing.JToolBar jToolBar2; @@ -564,6 +609,19 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce private javax.swing.ButtonGroup spatialModButtonGroup; // End of variables declaration//GEN-END:variables + private void emit(Spatial root) { + if (root instanceof ParticleEmitter) { + ((ParticleEmitter) root).killAllParticles(); + ((ParticleEmitter) root).emitAllParticles(); + } else if (root instanceof Node) { + Node n = (Node) root; + for (Spatial child : n.getChildren()) { + emit(child); + } + } + + } + /** * Gets default instance. Do not use directly: reserved for *.settings files only, * i.e. deserialization routines; otherwise you could get a non-deserialized instance. @@ -689,7 +747,7 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce if (node == null) { jList1.setListData(new String[]{}); } else if (node) { - jList1.setListData(new String[]{"Node", "Particle Emitter", "Audio Node", "Picture", "Point Light" ,"Spot Light", "Directional Light", "Ambient Light"}); + jList1.setListData(new String[]{"Node", "Particle Emitter", "Audio Node", "Picture", "Point Light", "Spot Light", "Directional Light", "Ambient Light"}); } else { jList1.setListData(new String[]{"Point Light", "Spot Light", "Directional Light", "Ambient Light"}); } @@ -808,6 +866,7 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce } private void selectSpatial(JmeSpatial spatial) { + if (spatial == null) { setSelectedObjectText(null); setSelectionData(null);