159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.effect.influencers;
259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.effect.Particle;
459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.effect.ParticleEmitter;
559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.effect.shapes.EmitterShape;
659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.Savable;
759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.Vector3f;
859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/**
1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * An interface that defines the methods to affect initial velocity of the particles.
1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Marcin Roguski (Kaelthas)
1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */
1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic interface ParticleInfluencer extends Savable, Cloneable {
1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * This method influences the particle.
1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @param particle
1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        particle to be influenced
1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @param emitterShape
2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        the shape of it emitter
2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    void influenceParticle(Particle particle, EmitterShape emitterShape);
2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * This method clones the influencer instance.
2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @return cloned instance
2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    public ParticleInfluencer clone();
2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @param initialVelocity
3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        Set the initial velocity a particle is spawned with,
3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        the initial velocity given in the parameter will be varied according
3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        to the velocity variation set in {@link ParticleEmitter#setVelocityVariation(float) }.
3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        A particle will move toward its velocity unless it is effected by the
3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        gravity.
3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    void setInitialVelocity(Vector3f initialVelocity);
3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * This method returns the initial velocity.
4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @return the initial velocity
4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    Vector3f getInitialVelocity();
4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @param variation
4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        Set the variation by which the initial velocity
4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        of the particle is determined. <code>variation</code> should be a value
5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        from 0 to 1, where 0 means particles are to spawn with exactly
5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        the velocity given in {@link ParticleEmitter#setStartVel(com.jme3.math.Vector3f) },
5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     *        and 1 means particles are to spawn with a completely random velocity.
5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    void setVelocityVariation(float variation);
5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta
5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    /**
5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * This method returns the velocity variation.
5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     * @return the velocity variation
5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta     */
6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta    float getVelocityVariation();
6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta}
62