| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- $PE_EMITTEREDITOR_DEFAULT_FILENAME = "art/particles/managedParticleEmitterData.cs";
- //=============================================================================================
- // PE_EmitterEditor.
- //=============================================================================================
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::guiSync( %this )
- {
- %data = PE_EmitterEditor.currEmitter;
-
- // Sync up sliders and number boxes.
-
- if( PE_EmitterEditor-->PEE_infiniteLoop.isStateOn() )
- {
- PE_EmitterEditor-->PEE_lifetimeMS_slider.setActive( false );
- PE_EmitterEditor-->PEE_lifetimeMS_textEdit.setActive( false );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_slider.setActive( false );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.setActive( false );
- }
- else
- {
- PE_EmitterEditor-->PEE_lifetimeMS_slider.setActive( true );
- PE_EmitterEditor-->PEE_lifetimeMS_textEdit.setActive( true );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_slider.setActive( true );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.setActive( true );
-
- PE_EmitterEditor-->PEE_lifetimeMS_slider.setValue( %data.lifetimeMS );
- PE_EmitterEditor-->PEE_lifetimeMS_textEdit.setText( %data.lifetimeMS );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_slider.setValue( %data.lifetimeVarianceMS );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.setText( %data.lifetimeVarianceMS );
- }
-
- PE_EmitterEditor-->PEE_ejectionPeriodMS_slider.setValue( %data.ejectionPeriodMS );
- PE_EmitterEditor-->PEE_ejectionPeriodMS_textEdit.setText( %data.ejectionPeriodMS );
- PE_EmitterEditor-->PEE_periodVarianceMS_slider.setValue( %data.periodVarianceMS );
- PE_EmitterEditor-->PEE_periodVarianceMS_textEdit.setText( %data.periodVarianceMS );
-
- PE_EmitterEditor-->PEE_ejectionVelocity_slider.setValue( %data.ejectionVelocity );
- PE_EmitterEditor-->PEE_ejectionVelocity_textEdit.setText( %data.ejectionVelocity );
-
- PE_EmitterEditor-->PEE_velocityVariance_slider.setValue( %data.velocityVariance );
- PE_EmitterEditor-->PEE_velocityVariance_textEdit.setText( %data.velocityVariance );
-
- PE_EmitterEditor-->PEE_orientParticles.setValue( %data.orientParticles );
- PE_EmitterEditor-->PEE_alignParticles.setValue( %data.alignParticles );
- PE_EmitterEditor-->PEE_alignDirection.setText( %data.alignDirection );
-
- PE_EmitterEditor-->PEE_thetaMin_slider.setValue( %data.thetaMin );
- PE_EmitterEditor-->PEE_thetaMin_textEdit.setText( %data.thetaMin );
-
- PE_EmitterEditor-->PEE_thetaMax_slider.setValue( %data.thetaMax );
- PE_EmitterEditor-->PEE_thetaMax_textEdit.setText( %data.thetaMax );
-
- PE_EmitterEditor-->PEE_phiVariance_slider.setValue( %data.phiVariance );
- PE_EmitterEditor-->PEE_phiVariance_textEdit.setText( %data.phiVariance );
-
- PE_EmitterEditor-->PEE_ejectionOffset_slider.setValue( %data.ejectionOffset );
- PE_EmitterEditor-->PEE_ejectionOffset_textEdit.setText( %data.ejectionOffset );
-
- PE_EmitterEditor-->PEE_ejectionOffsetVariance_slider.setValue( %data.ejectionOffsetVariance );
- PE_EmitterEditor-->PEE_ejectionOffsetVariance_textEdit.setText( %data.ejectionOffsetVariance );
-
- %blendTypeId = PE_EmitterEditor-->PEE_blendType.findText( %data.blendStyle );
- PE_EmitterEditor-->PEE_blendType.setSelected( %blendTypeId, false );
-
- PE_EmitterEditor-->PEE_softnessDistance_slider.setValue( %data.softnessDistance );
- PE_EmitterEditor-->PEE_softnessDistance_textEdit.setText( %data.softnessDistance );
-
- PE_EmitterEditor-->PEE_ambientFactor_slider.setValue( %data.ambientFactor );
- PE_EmitterEditor-->PEE_ambientFactor_textEdit.setText( %data.ambientFactor );
-
- PE_EmitterEditor-->PEE_softParticles.setValue( %data.softParticles );
- PE_EmitterEditor-->PEE_reverseOrder.setValue( %data.reverseOrder );
- PE_EmitterEditor-->PEE_useEmitterSizes.setValue( %data.useEmitterSizes );
- PE_EmitterEditor-->PEE_useEmitterColors.setValue( %data.useEmitterColors );
-
- PE_EmitterEditor-->PEE_glow.setValue( %data.glow );
- // Sync up particle selectors.
-
- for( %index = 0; %index < 4; %index ++ )
- {
- %ctrl = "PEE_EmitterParticle" @ ( %index + 1 );
- %popup = %ctrl-->PopUpMenu;
- %particle = getWord( %data.particles, %index );
- if( isObject( %particle ) )
- %popup.setSelected( %particle.getId(), false );
- else
- %popup.setSelected( 0, false ); // Select "None".
- }
- }
- //---------------------------------------------------------------------------------------------
- // Generic updateEmitter method
- function PE_EmitterEditor::updateEmitter( %this, %propertyField, %value, %isSlider, %onMouseUp )
- {
- PE_EmitterEditor.setEmitterDirty();
-
- %emitter = PE_EmitterEditor.currEmitter;
-
- %last = Editor.getUndoManager().getUndoAction(Editor.getUndoManager().getUndoCount() - 1);
- if( (%isSlider) && (%last.isSlider) && (!%last.onMouseUp) )
- {
- %last.field = %propertyField;
- %last.isSlider = %isSlider;
- %last.onMouseUp = %onMouseUp;
- %last.newValue = %value;
- }
- else
- {
- %action = ParticleEditor.createUndo(ActionUpdateActiveEmitter, "Update Active Emitter");
- %action.emitter = %emitter;
- %action.field = %propertyField;
- %action.isSlider = %isSlider;
- %action.onMouseUp = %onMouseUp;
- %action.newValue = %value;
- %action.oldValue = %emitter.getFieldValue( %propertyField );
-
- ParticleEditor.submitUndo( %action );
- }
-
- %emitter.setFieldValue( %propertyField, %value );
- %emitter.reload();
- }
- //---------------------------------------------------------------------------------------------
- // Special case updateEmitter methods
- function PE_EmitterEditor::updateLifeFields( %this, %isRandom, %value, %isSlider, %onMouseUp )
- {
- PE_EmitterEditor.setEmitterDirty();
-
- %emitter = PE_EmitterEditor.currEmitter;
-
- // Transfer values over to gui controls.
-
- if( %isRandom )
- {
- if( %value > 0 )
- %value++;
-
- if( %value > PE_EmitterEditor-->PEE_lifetimeMS_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_lifetimeMS_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_lifetimeMS_slider.setValue( %value );
- }
- }
- else
- {
- if( %value > 0 )
- %value --;
-
- if( %value < PE_EmitterEditor-->PEE_lifetimeVarianceMS_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_lifetimeVarianceMS_slider.setValue( %value );
- }
- }
-
- // Submit undo.
-
- %last = Editor.getUndoManager().getUndoAction(Editor.getUndoManager().getUndoCount() - 1);
- if( (%isSlider) && (%last.isSlider) && (!%last.onMouseUp) )
- {
- %last.isSlider = %isSlider;
- %last.onMouseUp = %onMouseUp;
- %last.newValueLifetimeMS = PE_EmitterEditor-->PEE_lifetimeMS_textEdit.getText();
- %last.newValueLifetimeVarianceMS = PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.getText();
- }
- else
- {
- %action = ParticleEditor.createUndo(ActionUpdateActiveEmitterLifeFields, "Update Active Emitter");
- %action.emitter = %emitter;
- %action.isSlider = %isSlider;
- %action.onMouseUp = %onMouseUp;
-
- %action.newValueLifetimeMS = PE_EmitterEditor-->PEE_lifetimeMS_textEdit.getText();
- %action.oldValueLifetimeMS = %emitter.lifetimeMS;
-
- %action.newValueLifetimeVarianceMS = PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.getText();
- %action.oldValueLifetimeVarianceMS = %emitter.lifetimeVarianceMS;
-
- ParticleEditor.submitUndo( %action );
- }
-
- // Set the values on the current emitter.
-
- %emitter.lifetimeMS = PE_EmitterEditor-->PEE_lifetimeMS_textEdit.getText();
- %emitter.lifetimeVarianceMS = PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.getText();
- %emitter.reload();
-
- // Keep the infiniteLoop checkbox up to date.
-
- PE_EmitterEditor-->PEE_infiniteLoop.setStateOn(
- %emitter.lifetimeMS == 0
- );
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::updateLifeFieldsInfiniteLoop( %this )
- {
- %emitter = PE_EmitterEditor.currEmitter;
- %isEnabled = PE_EmitterEditor-->PEE_infiniteLoop.isStateOn();
-
- // Submit undo.
-
- %action = ParticleEditor.createUndo( ActionUpdateActiveEmitterLifeFields, "Update Active Emitter" );
- %action.emitter = %emitter;
-
- if( %isEnabled )
- {
- %action.newValueLifetimeMS = 0;
- %action.newvalueLifetimeVarianceMS = 0;
- %action.oldValueLifetimeMS = PE_EmitterEditor-->PEE_lifetimeMS_textEdit.getText();
- %action.oldValueLifetimeVarianceMS = PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.getText();
- }
- else
- {
- %action.newValueLifetimeMS = PE_EmitterEditor-->PEE_lifetimeMS_textEdit.getText();
- %action.newvalueLifetimeVarianceMS = PE_EmitterEditor-->PEE_lifetimeVarianceMS_textEdit.getText();
- %action.oldValueLifetimeMS = 0;
- %action.oldValueLifetimeVarianceMS = 0;
- }
-
- ParticleEditor.submitUndo( %action );
-
- // Execute action.
-
- %action.redo();
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::updateAmountFields( %this, %isRandom, %value, %isSlider, %onMouseUp )
- {
- PE_EmitterEditor.setEmitterDirty();
- %emitter = PE_EmitterEditor.currEmitter;
-
- // Transfer values over to gui controls.
-
- if( %isRandom )
- {
- %value ++;
- if( %value > PE_EmitterEditor-->PEE_ejectionPeriodMS_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_ejectionPeriodMS_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_ejectionPeriodMS_slider.setValue( %value );
- }
- }
- else
- {
- %value --;
- if( %value < PE_EmitterEditor-->PEE_periodVarianceMS_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_periodVarianceMS_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_periodVarianceMS_slider.setValue( %value );
- }
- }
-
- // Submit undo.
-
- %last = Editor.getUndoManager().getUndoAction(Editor.getUndoManager().getUndoCount() - 1);
- if( (%isSlider) && (%last.isSlider) && (!%last.onMouseUp) )
- {
- %last.isSlider = %isSlider;
- %last.onMouseUp = %onMouseUp;
- %last.newValueEjectionPeriodMS = PE_EmitterEditor-->PEE_ejectionPeriodMS_textEdit.getText();
- %last.newValuePeriodVarianceMS = PE_EmitterEditor-->PEE_periodVarianceMS_textEdit.getText();
- }
- else
- {
- %action = ParticleEditor.createUndo(ActionUpdateActiveEmitterAmountFields, "Update Active Emitter");
- %action.emitter = %emitter;
- %action.isSlider = %isSlider;
- %action.onMouseUp = %onMouseUp;
-
- %action.newValueEjectionPeriodMS = PE_EmitterEditor-->PEE_ejectionPeriodMS_textEdit.getText();
- %action.oldValueEjectionPeriodMS = %emitter.ejectionPeriodMS;
-
- %action.newValuePeriodVarianceMS = PE_EmitterEditor-->PEE_periodVarianceMS_textEdit.getText();
- %action.oldValuePeriodVarianceMS = %emitter.periodVarianceMS;
-
- ParticleEditor.submitUndo( %action );
- }
-
- // Set the values on the current emitter.
-
- %emitter.ejectionPeriodMS = PE_EmitterEditor-->PEE_ejectionPeriodMS_textEdit.getText();
- %emitter.periodVarianceMS = PE_EmitterEditor-->PEE_periodVarianceMS_textEdit.getText();
- %emitter.reload();
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::updateSpeedFields( %this, %isRandom, %value, %isSlider, %onMouseUp )
- {
- PE_EmitterEditor.setEmitterDirty();
- %emitter = PE_EmitterEditor.currEmitter;
-
- // Transfer values over to gui controls.
-
- if( %isRandom )
- {
- if( %value > PE_EmitterEditor-->PEE_ejectionVelocity_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_ejectionVelocity_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_ejectionVelocity_slider.setValue( %value );
- }
- }
- else
- {
- if( %value < PE_EmitterEditor-->PEE_velocityVariance_slider.getValue() )
- {
- PE_EmitterEditor-->PEE_velocityVariance_textEdit.setText( %value );
- PE_EmitterEditor-->PEE_velocityVariance_slider.setValue( %value );
- }
- }
-
- // Submit undo.
-
- %last = Editor.getUndoManager().getUndoAction(Editor.getUndoManager().getUndoCount() - 1);
- if( (%isSlider) && (%last.isSlider) && (!%last.onMouseUp) )
- {
- %last.isSlider = %isSlider;
- %last.onMouseUp = %onMouseUp;
- %last.newValueEjectionVelocity = PE_EmitterEditor-->PEE_ejectionVelocity_textEdit.getText();
- %last.newValueVelocityVariance = PE_EmitterEditor-->PEE_velocityVariance_textEdit.getText();
- }
- else
- {
- %action = ParticleEditor.createUndo(ActionUpdateActiveEmitterSpeedFields, "Update Active Emitter");
- %action.emitter = %emitter;
- %action.isSlider = %isSlider;
- %action.onMouseUp = %onMouseUp;
-
- %action.newValueEjectionVelocity = PE_EmitterEditor-->PEE_ejectionVelocity_textEdit.getText();
- %action.oldValueEjectionVelocity = %emitter.ejectionVelocity;
-
- %action.newValueVelocityVariance = PE_EmitterEditor-->PEE_velocityVariance_textEdit.getText();
- %action.oldValueVelocityVariance = %emitter.velocityVariance;
-
- ParticleEditor.submitUndo( %action );
- }
-
- // Set the values on the current emitter.
-
- %emitter.ejectionVelocity = PE_EmitterEditor-->PEE_ejectionVelocity_textEdit.getText();
- %emitter.velocityVariance = PE_EmitterEditor-->PEE_velocityVariance_textEdit.getText();
- %emitter.reload();
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::updateParticlesFields( %this )
- {
- %particles = "";
- for( %i = 1; %i < 5; %i ++ )
- {
- %emitterParticle = "PEE_EmitterParticle" @ %i;
- %popup = %emitterParticle-->PopUpMenu;
- %text = %popup.getText();
-
- if( %text $= "" || %text $= "None" )
- continue;
-
- if( %particles $= "" )
- %particles = %text;
- else
- %particles = %particles SPC %text;
- }
-
- %changedEditParticle = 1;
- %currParticle = PE_ParticleEditor.currParticle.getName();
- foreach$( %particleName in %particles )
- {
- if( %particleName $= %currParticle )
- {
- %changedEditParticle = 0;
- break;
- }
- }
-
- // True only if the currently edited particle has not been found and the
- // ParticleEditor is dirty.
-
- if( %changedEditParticle && PE_ParticleEditor.dirty )
- {
- MessageBoxYesNoCancel("Save Particle Changes?",
- "Do you wish to save the changes made to the <br>current particle before changing the particle?",
- "PE_ParticleEditor.saveParticle( " @ PE_ParticleEditor.currParticle.getName() @ " ); PE_EmitterEditor.updateEmitter( \"particles\"," @ %particles @ ");",
- "PE_ParticleEditor.saveParticleDialogDontSave( " @ PE_ParticleEditor.currParticle.getName() @ " ); PE_EmitterEditor.updateEmitter( \"particles\"," @ %particles @ ");",
- "PE_EmitterEditor.guiSync();" );
- }
- else
- {
- PE_EmitterEditor.updateEmitter( "particles", %particles );
- }
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::onNewEmitter( %this )
- {
- if( isObject( PE_EmitterEditor.currEmitter )
- && PE_EmitterEditor.currEmitter $= PEE_EmitterSelector.getSelected() )
- return;
-
- //FIXME: disregards particle tab dirty state
-
- if( PE_EmitterEditor.dirty )
- {
-
- if( PE_ParticleEditor.dirty )
- {
- MessageBoxYesNo("Save Existing Particle?",
- "Do you want to save changes to <br><br>" @ PE_ParticleEditor.currParticle.getName(),
- "PE_ParticleEditor.saveParticle(" @ PE_ParticleEditor.currParticle @ ");"
- );
- }
-
- %savedEmitter = PE_EmitterEditor.currEmitter;
- MessageBoxYesNoCancel("Save Existing Emitter?",
- "Do you want to save changes to <br><br>" @ %savedEmitter.getName(),
- "PE_EmitterEditor.saveEmitter(" @ %savedEmitter@ "); PE_EmitterEditor.loadNewEmitter();",
- "PE_EmitterEditor.saveEmitterDialogDontSave(" @ %savedEmitter @ "); PE_EmitterEditor.loadNewEmitter();"
- );
-
- }
- else
- {
- PE_EmitterEditor.loadNewEmitter();
- }
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::loadNewEmitter( %this, %emitter )
- {
- if( isObject( %emitter ) )
- %current = %emitter.getId();
- else
- %current = PEE_EmitterSelector.getSelected();
-
- PE_EmitterEditor.currEmitter = %current;
- PE_EmitterEditor_NotDirtyEmitter.assignFieldsFrom( %current );
- PE_EmitterEditor_NotDirtyEmitter.originalName = %current.name;
-
- PE_EmitterEditor.guiSync();
- PE_EmitterEditor.setEmitterNotDirty();
-
- PE_ParticleEditor.loadNewParticle( getWord( %current.particles, 0 ) );
-
- ParticleEditor.updateEmitterNode();
-
- PE_EmitterEditor-->PEE_infiniteLoop.setStateOn( %current.lifetimeMS == 0 );
- }
-
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::setEmitterDirty( %this )
- {
- PE_EmitterEditor.text = "Emitter *";
- PE_EmitterEditor.dirty = true;
-
- %emitter = PE_EmitterEditor.currEmitter;
-
- if( %emitter.getFilename() $= "" || %emitter.getFilename() $= "tools/particleEditor/particleEmitterEditor.ed.cs" )
- PE_EmitterSaver.setDirty( %emitter, $PE_EMITTEREDITOR_DEFAULT_FILENAME );
- else
- PE_EmitterSaver.setDirty( %emitter );
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::setEmitterNotDirty( %this )
- {
- PE_EmitterEditor.text = "Emitter";
- PE_EmitterEditor.dirty = false;
-
- PE_EmitterSaver.clearAll();
- }
- //---------------------------------------------------------------------------------------------
- // Create Functionality
- function PE_EmitterEditor::showNewDialog( %this )
- {
- //FIXME: disregards particle tab dirty state
- // Open a dialog if the current emitter is dirty.
-
- if( PE_ParticleEditor.dirty )
- {
- MessageBoxYesNo("Save Existing Particle?",
- "Do you want to save changes to <br><br>" @ PE_ParticleEditor.currParticle.getName(),
- "PE_ParticleEditor.saveParticle(" @ PE_ParticleEditor.currParticle @ ");"
- );
- }
-
- if( PE_EmitterEditor.dirty )
- {
- MessageBoxYesNoCancel("Save Emitter Changes?",
- "Do you wish to save the changes made to the <br>current emitter before changing the emitter?",
- "PE_EmitterEditor.saveEmitter( " @ PE_EmitterEditor.currEmitter.getName() @ " ); PE_EmitterEditor.createEmitter();",
- "PE_EmitterEditor.saveEmitterDialogDontSave( " @ PE_EmitterEditor.currEmitter.getName() @ " ); PE_EmitterEditor.createEmitter();"
- );
- }
- else
- {
- PE_EmitterEditor.createEmitter();
- }
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::createEmitter( %this )
- {
- // Create a new emitter.
- %emitter = getUniqueName( "newEmitter" );
- datablock ParticleEmitterData( %emitter : DefaultEmitter )
- {
- };
-
- // Submit undo.
-
- %action = ParticleEditor.createUndo( ActionCreateNewEmitter, "Create New Emitter" );
- %action.prevEmitter = PE_EmitterEditor.currEmitter;
- %action.emitter = %emitter.getId();
- %action.emitterName = %emitter;
- ParticleEditor.submitUndo( %action );
- // Execute action.
-
- %action.redo();
-
- PE_ParticleEditor.createParticle(false);
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::showDeleteDialog( %this )
- {
- if( PE_EmitterEditor.currEmitter.getName() $= "DefaultEmitter" )
- {
- MessageBoxOK( "Error", "Cannot delete DefaultEmitter");
- return;
- }
-
- if( isObject( PE_EmitterEditor.currEmitter ) )
- {
- MessageBoxYesNoCancel("Delete Emitter?",
- "Are you sure you want to delete<br><br>" @ PE_EmitterEditor.currEmitter.getName() @ "<br><br> Emitter deletion won't take affect until the level is exited.",
- "PE_EmitterEditor.saveEmitterDialogDontSave( " @ PE_EmitterEditor.currEmitter.getName() @ " ); PE_EmitterEditor.deleteEmitter();"
- );
- }
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::deleteEmitter( %this )
- {
- %emitter = PE_EmitterEditor.currEmitter;
-
- // Create undo.
-
- %action = ParticleEditor.createUndo( ActionDeleteEmitter, "Delete Emitter" );
- %action.emitter = %emitter;
- %action.emitterFname = %emitter.getFilename();
- ParticleEditor.submitUndo( %action );
-
- // Execute action.
- %action.redo();
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::saveEmitter( %this, %emitter )
- {
-
-
- if ( %emitter $= "" )
- %newName = PEE_EmitterSelector_Control->TextEdit.getText();
- else
- %newName = %emitter.getName();
-
- PE_EmitterEditor.currEmitter.setName( %newName );
- PE_EmitterEditor_NotDirtyEmitter.assignFieldsFrom( %emitter );
- PE_EmitterEditor_NotDirtyEmitter.originalName = %newName;
-
- PE_EmitterSaver.saveDirty();
-
- PE_EmitterEditor.currEmitter = %newName.getId();
- PE_EmitterEditor.setEmitterNotDirty();
-
- ParticleEditor.createParticleList();
- }
- //---------------------------------------------------------------------------------------------
- function PE_EmitterEditor::saveEmitterDialogDontSave( %this, %emitter)
- {
- %emitter.setName( PE_EmitterEditor_NotDirtyEmitter.originalName );
- %emitter.assignFieldsFrom( PE_EmitterEditor_NotDirtyEmitter );
- PE_EmitterEditor.setEmitterNotDirty();
- }
- //=============================================================================================
- // PEE_EmitterSelector_Control.
- //=============================================================================================
- //---------------------------------------------------------------------------------------------
- function PEE_EmitterSelector_Control::onRenameItem( %this )
- {
- Parent::onRenameItem( %this );
-
- //FIXME: need to check for validity of name and name clashes
- PE_EmitterEditor.setEmitterDirty();
-
- // Resort menu.
-
- %this-->PopupMenu.sort();
- }
|