public ParticleEmitter newExampleEmitter (String name, boolean select) { final ParticleEmitter emitter = new ParticleEmitter(); emitter.getDuration().setLow(3000); emitter.getEmission().setHigh(250); emitter.getLife().setHigh(500, 1000); emitter.getLife().setTimeline(new float[] {0, 0.66f, 1}); emitter.getLife().setScaling(new float[] {1, 1, 0.3f}); emitter.getXScale().setHigh(32, 32); emitter.getRotation().setLow(1, 360); emitter.getRotation().setHigh(180, 180); emitter.getRotation().setTimeline(new float[] {0, 1}); emitter.getRotation().setScaling(new float[] {0, 1}); emitter.getRotation().setRelative(true); emitter.getAngle().setHigh(45, 135); emitter.getAngle().setLow(90); emitter.getAngle().setTimeline(new float[] {0, 0.5f, 1}); emitter.getAngle().setScaling(new float[] {1, 0, 0}); emitter.getAngle().setActive(true); emitter.getVelocity().setHigh(30, 300); emitter.getVelocity().setActive(true); emitter.getTint().setColors(new float[] {1, 0.12156863f, 0.047058824f}); emitter.getTransparency().setHigh(1, 1); emitter.getTransparency().setTimeline(new float[] {0, 0.2f, 0.8f, 1}); emitter.getTransparency().setScaling(new float[] {0, 1, 0.75f, 0}); emitter.setMaxParticleCount(200); emitter.setImagePaths(new Array<String>(new String[] { ParticleEditor.DEFAULT_PARTICLE })); addEmitter(name, select, emitter); return emitter; }
public void loadEmitterImages (TextureAtlas atlas, String atlasPrefix) { for (int i = 0, n = emitters.size; i < n; i++) { ParticleEmitter emitter = emitters.get(i); if (emitter.getImagePaths().size == 0) continue; Array<Sprite> sprites = new Array<Sprite>(); for (String imagePath : emitter.getImagePaths()) { String imageName = new File(imagePath.replace('\\', '/')).getName(); int lastDotIndex = imageName.lastIndexOf('.'); if (lastDotIndex != -1) imageName = imageName.substring(0, lastDotIndex); if (atlasPrefix != null) imageName = atlasPrefix + imageName; Sprite sprite = atlas.createSprite(imageName); if (sprite == null) throw new IllegalArgumentException("SpriteSheet missing image: " + imageName); sprites.add(sprite); } emitter.setSprites(sprites); } }
accumulator += delta * 1000; if (accumulator < 1) { draw(batch); return; if (active[i]) { Particle particle = particles[i]; if (updateParticle(particle, delta, deltaMillis)) particle.draw(batch); else { addParticle(); else { if (!continuous || allowCompletion) return; restart(); emissionDelta -= emitCount * emissionTime; emissionDelta %= emissionTime; addParticles(emitCount); if (activeCount < minParticleCount) addParticles(minParticleCount - activeCount);
public ParticleEmitter newEmitter (String name, boolean select) { final ParticleEmitter emitter = new ParticleEmitter(); emitter.getDuration().setLow(1000); emitter.getEmission().setHigh(50); emitter.getLife().setHigh(500); emitter.getXScale().setHigh(32, 32); emitter.getTint().setColors(new float[] {1, 0.12156863f, 0.047058824f}); emitter.getTransparency().setHigh(1); emitter.setMaxParticleCount(25); emitter.setImagePaths(new Array<String>(new String[] { ParticleEditor.DEFAULT_PARTICLE })); addEmitter(name, select, emitter); return emitter; }
@Override public void actionPerformed (ActionEvent e) { int index = imageList.getSelectedIndex(); if (index <= 0) return; final ParticleEmitter emitter = editor.getEmitter(); String imagePath = emitter.getImagePaths().removeIndex(index); emitter.getImagePaths().insert(index - 1, imagePath); emitter.getSprites().clear(); updateImageList(emitter.getImagePaths()); imageList.setSelectedIndex(index - 1); } });
@Override public void actionPerformed (ActionEvent e) { final ParticleEmitter emitter = editor.getEmitter(); emitter.setImagePaths(new Array<String>(new String[] { ParticleEditor.DEFAULT_PARTICLE })); emitter.getSprites().clear(); updateImageList(emitter.getImagePaths()); } });
addRow(new CountPanel(ParticleEditor.this, "Count", "Min number of particles at all times, max number of particles allowed.")); addRow(new RangedNumericPanel(emitter.getDelay(), "Delay", "Time from beginning of effect to emission start, in milliseconds.")); addRow(new RangedNumericPanel(emitter.getDuration(), "Duration", "Time particles will be emitted, in milliseconds.")); addRow(new ScaledNumericPanel(emitter.getEmission(), "Duration", "Emission", "Number of particles emitted per second.")); addRow(new ScaledNumericPanel(emitter.getLife(), "Duration", "Life", "Time particles will live, in milliseconds.")); addRow(new ScaledNumericPanel(emitter.getLifeOffset(), "Duration", "Life Offset", "Particle starting life consumed, in milliseconds.")); addRow(new RangedNumericPanel(emitter.getXOffsetValue(), "X Offset", "Amount to offset a particle's starting X location, in world units.")); addRow(new RangedNumericPanel(emitter.getYOffsetValue(), "Y Offset", "Amount to offset a particle's starting Y location, in world units.")); addRow(new SpawnPanel(ParticleEditor.this, emitter.getSpawnShape(), "Spawn", "Shape used to spawn particles.")); addRow(new ScaledNumericPanel(emitter.getSpawnWidth(), "Duration", "Spawn Width", "Width of the spawn shape, in world units.")); addRow(new ScaledNumericPanel(emitter.getSpawnHeight(), "Duration", "Spawn Height", "Height of the spawn shape, in world units.")); addRow(new ScaledNumericPanel(emitter.getXScale(), "Life", "X Size", "Particle x size, in world units. If Y Size is not active, this also controls the y size")); addRow(new ScaledNumericPanel(emitter.getYScale(), "Life", "Y Size", "Particle y size, in world units.")); addRow(new ScaledNumericPanel(emitter.getVelocity(), "Life", "Velocity", "Particle speed, in world units per second.")); addRow(new ScaledNumericPanel(emitter.getAngle(), "Life", "Angle", "Particle emission angle, in degrees.")); addRow(new ScaledNumericPanel(emitter.getRotation(), "Life", "Rotation", "Particle rotation, in degrees.")); addRow(new ScaledNumericPanel(emitter.getWind(), "Life", "Wind", "Wind strength, in world units per second.")); addRow(new ScaledNumericPanel(emitter.getGravity(), "Life", "Gravity", "Gravity strength, in world units per second.")); addRow(new GradientPanel(emitter.getTint(), "Tint", "", false)); addRow(new PercentagePanel(emitter.getTransparency(), "Life", "Transparency", "")); addRow(new OptionsPanel(ParticleEditor.this, "Options", ""));
public boolean keyDown (int keycode) { ParticleEmitter emitter = emitters.get(emitterIndex); if (keycode == Input.Keys.DPAD_UP) particleCount += 5; else if (keycode == Input.Keys.PLUS) { emitter = new ParticleEmitter(emitter); } else if (keycode == Input.Keys.DPAD_DOWN) particleCount -= 5; else if (keycode == Input.Keys.SPACE) { emitterIndex = (emitterIndex + 1) % emitters.size; emitter = emitters.get(emitterIndex); // if we've previously stopped the emitter reset it if (emitter.isComplete()) emitter.reset(); particleCount = (int)(emitter.getEmission().getHighMax() * emitter.getLife().getHighMax() / 1000f); } else if (keycode == Input.Keys.ENTER) { emitter = emitters.get(emitterIndex); if (emitter.isComplete()) emitter.reset(); else emitter.allowCompletion(); } else return false; particleCount = Math.max(0, particleCount); if (particleCount > emitter.getMaxParticleCount()) emitter.setMaxParticleCount(particleCount * 2); emitter.getEmission().setHigh(particleCount / emitter.getLife().getHighMax() * 1000); effect.getEmitters().clear(); effect.getEmitters().add(emitter); return false; }
boolean complete = true; for (ParticleEmitter emitter : effect.getEmitters()) { if (emitter.getSprites().size == 0 && emitter.getImagePaths().size > 0) loadImages(emitter); boolean enabled = isEnabled(emitter); if (enabled) { if (emitter.getSprites().size > 0) emitter.draw(spriteBatch, delta); activeCount += emitter.getActiveCount(); if (!emitter.isComplete()) complete = false; font.draw(spriteBatch, "Count: " + activeCount, 5, 35); font.draw(spriteBatch, "Max: " + lastMaxActive, 5, 55); font.draw(spriteBatch, (int)(getEmitter().getPercentComplete() * 100) + "%", 5, 75);
public void load (BufferedReader reader) throws IOException { try { name = readString(reader, "name"); reader.readLine(); delayValue.load(reader); durationValue.load(reader); reader.readLine(); setMinParticleCount(readInt(reader, "minParticleCount")); setMaxParticleCount(readInt(reader, "maxParticleCount")); reader.readLine(); emissionValue.load(reader); transparencyValue.load(reader); reader.readLine(); attached = readBoolean(reader, "attached"); continuous = readBoolean(reader, "continuous"); aligned = readBoolean(reader, "aligned"); additive = readBoolean(reader, "additive"); behind = readBoolean(reader, "behind"); premultipliedAlpha = readBoolean(line); line = reader.readLine(); spriteMode = SpriteMode.valueOf(readString(line)); line = reader.readLine(); setImagePaths(imagePaths); } catch (RuntimeException ex) { if (name == null) throw ex;
name = emitter.name; imagePaths = new Array<String>(emitter.imagePaths); setMaxParticleCount(emitter.maxParticleCount); minParticleCount = emitter.minParticleCount; delayValue.load(emitter.delayValue); cleansUpBlendFunction = emitter.cleansUpBlendFunction; spriteMode = emitter.spriteMode; setPosition(emitter.getX(),emitter.getY());
public boolean touchDown (int x, int y, int pointer, int newParam) { // effect.setPosition(x, Gdx.graphics.getHeight() - y); ParticleEmitter emitter = emitters.get(emitterIndex); particleCount += 100; System.out.println(particleCount); particleCount = Math.max(0, particleCount); if (particleCount > emitter.getMaxParticleCount()) emitter.setMaxParticleCount(particleCount * 2); emitter.getEmission().setHigh(particleCount / emitter.getLife().getHighMax() * 1000); effect.getEmitters().clear(); effect.getEmitters().add(emitter); return false; }
protected ParticleEmitter newEmitter (ParticleEmitter emitter) { return new ParticleEmitter(emitter); }
public void stateChanged (ChangeEvent event) { editor.getEmitter().setMaxParticleCount((int)maxSlider.getValue()); } });
public void draw (Batch spriteBatch) { for (int i = 0, n = emitters.size; i < n; i++) emitters.get(i).draw(spriteBatch); }
public void setDuration (int duration) { for (int i = 0, n = emitters.size; i < n; i++) { ParticleEmitter emitter = emitters.get(i); emitter.setContinuous(false); emitter.duration = duration; emitter.durationTimer = 0; } }
public void setEnabled (ParticleEmitter emitter, boolean enabled) { ParticleData data = particleData.get(emitter); if (data == null) particleData.put(emitter, data = new ParticleData()); data.enabled = enabled; emitter.reset(); }
emitter.setName((String)emitterTableModel.getValueAt(index++, 0)); Array<String> imagePaths = emitter.getImagePaths(); for (int i = 0; i < imagePaths.size; i++) { String imagePath = imagePaths.get(i);
modesPanel.add(label); ButtonGroup checkboxGroup = new ButtonGroup(); JRadioButton singleCheckbox = new JRadioButton("Single", editor.getEmitter().getSpriteMode() == SpriteMode.single); modesPanel.add(singleCheckbox); checkboxGroup.add(singleCheckbox); JRadioButton randomCheckbox = new JRadioButton("Random", editor.getEmitter().getSpriteMode() == SpriteMode.random); modesPanel.add(randomCheckbox); checkboxGroup.add(randomCheckbox); JRadioButton animatedCheckbox = new JRadioButton("Animated", editor.getEmitter().getSpriteMode() == SpriteMode.animated); modesPanel.add(animatedCheckbox); checkboxGroup.add(animatedCheckbox); updateImageList(editor.getEmitter().getImagePaths());
public boolean isComplete () { for (int i = 0, n = emitters.size; i < n; i++) { ParticleEmitter emitter = emitters.get(i); if (!emitter.isComplete()) return false; } return true; }