@Override
 public void update(float tpf) {
   // TODO: moving effects
   for (Iterator<Entry<Long, EmitterData>> it = liveEmitters.entrySet().iterator();
       it.hasNext(); ) {
     Entry<Long, ClientEffectsManager.EmitterData> entry = it.next();
     EmitterData data = entry.getValue();
     if (data.curTime >= data.time) {
       stopEffect(data.id);
       emitters.get(data.effectName).add(data.emit);
       it.remove();
     }
     data.curTime += tpf;
   }
 }
 private long putToNew(EmitterData data) {
   long id = 0;
   while (liveEmitters.containsKey(id)) {
     id++;
   }
   data.id = id;
   liveEmitters.put(id, data);
   return id;
 }
 /**
  * plays an effect in the world
  *
  * @param id
  * @param effectName
  * @param location
  * @param endLocation
  * @param rotation
  * @param endRotation
  * @param time
  */
 public void playEffect(
     long id,
     String effectName,
     Vector3f location,
     Vector3f endLocation,
     Quaternion rotation,
     Quaternion endRotation,
     float time) {
   if (liveEmitters.containsKey(id)) {
     Logger.getLogger(ClientEffectsManager.class.getName())
         .log(Level.WARNING, "Trying to add effect with existing id");
     return;
   }
   Node effect = getEffect(effectName);
   EmitterData data =
       new EmitterData(effect, id, effectName, location, endLocation, rotation, endRotation, time);
   effect.setLocalTranslation(location);
   effect.setLocalRotation(rotation);
   data.curTime = 0;
   data.time = time;
   List<Spatial> children = effect.getChildren();
   for (Iterator<Spatial> it = children.iterator(); it.hasNext(); ) {
     Spatial spat = it.next();
     if (spat instanceof ParticleEmitter) {
       ParticleEmitter emitter = (ParticleEmitter) spat;
       emitter.emitAllParticles();
     } else if (spat instanceof AudioNode) {
       AudioNode audioNode = (AudioNode) spat;
       //                audioNode.setStatus(AudioNode.Status.Playing);
       audioRenderer.playSource(audioNode);
     }
   }
   worldManager.getWorldRoot().attachChild(effect);
   if (id == -1) {
     putToNew(data);
   } else {
     data.id = id;
     liveEmitters.put(id, data);
   }
 }