/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.graphics.effects;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.graphics.g2d.ParticleEmitter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.happydroids.droidtowers.entities.GameObject;
import com.happydroids.droidtowers.utils.Random;
import java.util.Iterator;
public class ParticleEffectManager extends GameObject {
private final ParticleEffect activeEffect;
private final Iterator<float[]> colorsIterator;
private final Rectangle worldBounds;
private float playbackDuration;
private float playbackTime;
private boolean stopped;
public ParticleEffectManager(ParticleEffect activeEffect, Iterator<float[]> colorsIterator, Rectangle worldBounds) {
super();
this.activeEffect = activeEffect;
this.colorsIterator = colorsIterator;
this.worldBounds = worldBounds;
stopped = true;
}
public void resetEffect() {
stopped = false;
playbackTime = 0f;
playbackDuration = 1f + Random.randomInt(1.75f, 4.5f);
activeEffect.setPosition(Random.randomInt(worldBounds.x, worldBounds.width + 1), Random.randomInt(worldBounds.y, worldBounds.height + 1));
for (ParticleEmitter emitter : activeEffect.getEmitters()) {
emitter.reset();
if (!emitter.getName().contains("smoke")) {
emitter.getTint().setColors(colorsIterator.next());
}
}
}
@Override
public void update(float timeDelta) {
playbackTime += timeDelta;
if (!stopped && playbackDuration <= playbackTime) {
resetEffect();
}
if (!activeEffect.isComplete()) {
activeEffect.update(timeDelta);
}
}
@Override
public void draw(SpriteBatch spriteBatch) {
if (!activeEffect.isComplete()) {
activeEffect.draw(spriteBatch);
}
}
public void stop() {
stopped = true;
}
}