Package tripleplay.demo.particle

Source Code of tripleplay.demo.particle.FireworksDemo

//
// Triple Play - utilities for use in PlayN-based games
// Copyright (c) 2011-2014, Three Rings Design, Inc. - All rights reserved.
// http://github.com/threerings/tripleplay/blob/master/LICENSE

package tripleplay.demo.particle;

import react.UnitSlot;

import playn.core.CanvasImage;
import static playn.core.PlayN.graphics;

import tripleplay.particle.Emitter;
import tripleplay.particle.Generator;
import tripleplay.particle.Particles;
import tripleplay.particle.effect.Alpha;
import tripleplay.particle.effect.Drag;
import tripleplay.particle.effect.Gravity;
import tripleplay.particle.effect.Move;
import tripleplay.particle.init.Color;
import tripleplay.particle.init.Lifespan;
import tripleplay.particle.init.Transform;
import tripleplay.particle.init.Velocity;
import tripleplay.util.Interpolator;
import tripleplay.util.Randoms;

/**
* Does something extraordinary.
*/
public class FireworksDemo extends ParticleDemo
{
    @Override protected String name () {
        return "Fireworks";
    }
    @Override protected String title () {
        return "Particles: Fireworks";
    }

    @Override protected void createParticles (Particles parts, final Randoms rando) {
        CanvasImage image = graphics().createImage(2, 2);
        image.canvas().setFillColor(0xFFFFFFFF);
        image.canvas().fillRect(0, 0, 2, 2);

        final Emitter explode1 = createEmitter(parts, rando, image, 0xFFFFCD82, 0.975f);
        final Emitter explode2 = createEmitter(parts, rando, image, 0xFFF06969, 0.95f);
        note(explode1);
        note(explode2);

        float tx = 100 + rando.getFloat(graphics().width()-200);
        float ty = 100 + rando.getFloat(graphics().height()-200);
        explode1.layer.setTranslation(tx, ty);
        explode2.layer.setTranslation(tx, ty);

        explode1.onEmpty.connect(new UnitSlot() {
          @Override public void onEmit () {
            float tx = 100 + rando.getFloat(graphics().width()-200);
            float ty = 100 + rando.getFloat(graphics().height()-200);
            explode1.layer.setTranslation(tx, ty);
            explode2.layer.setTranslation(tx, ty);
            explode1.generator = Generator.impulse(200);
            explode2.generator = Generator.impulse(200);
        }});
    }

    protected Emitter createEmitter (Particles parts, Randoms rando, CanvasImage image,
                                     int color, float drag) {
        final Emitter explode = parts.createEmitter(200, image);
        explode.generator = Generator.impulse(200);
        explode.initters.add(Lifespan.random(rando, 1, 1.5f));
        explode.initters.add(Color.constant(color));
        // explode.initters.add(Color.constant(0xFFF06969));
        explode.initters.add(Transform.layer(explode.layer));
        explode.initters.add(Velocity.randomNormal(rando, 0, 70));
        explode.initters.add(Velocity.increment(0, 10));
        explode.effectors.add(Alpha.byAge(Interpolator.EASE_IN));
        explode.effectors.add(new Gravity(30));
        // explode.effectors.add(new Drag(0.95f));
        explode.effectors.add(new Drag(drag));
        explode.effectors.add(new Move());
        return explode;
    }
}
TOP

Related Classes of tripleplay.demo.particle.FireworksDemo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.