123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import h3d.mat.Texture;
- import h2d.Graphics;
- import h2d.Particles;
- import hxd.Res;
- class Particles2d extends SampleApp {
- var g : ParticleGroup;
- var particles : Particles;
- var movableParticleGroup : ParticleGroup;
- var time : Float;
- var arrow : Texture;
- var square : Texture;
- var moving : Bool = false;
- override function init() {
- super.init();
- square = null;// h2d.Tile.fromColor(0xFFFFFF, 16, 16).getTexture();
- arrow = Res.arrow.toTexture();
- particles = new Particles(s2d);
- g = new ParticleGroup(particles);
- particles.addGroup(g);
- addSlider("Amount", function() return g.nparts, function(v) g.nparts = Std.int(v), 1, 1000);
- addCheck("Sort", function() return g.sortMode == Dynamic, function(v) g.sortMode = v ? Dynamic : None);
- addCheck("Loop", function() return g.emitLoop, function(v) { g.emitLoop = v; });
- addCheck("Move", function() return moving, function(v) moving = v);
- addCheck("Relative", function() return g.isRelative, function(v) g.isRelative = v);
- addCheck("Dir as Angle", function() return g.emitDirectionAsAngle, function(v) { g.emitDirectionAsAngle = v; g.texture = v ? arrow : square; });
- addCheck("RebuildMode", function() return g.rebuildOnChange, function(v) { g.rebuildOnChange = v; });
- addChoice("EmitMode", ["Point A", "Point B", "Cone", "Box", "Dir A", "Dir B"], function (v) {
- switch(v) {
- case 0: changeToPointDemo();
- case 1: changeToPointAndDirectionAsAngleDemo();
- case 2: changeToConeDemo();
- case 3: changeToBoxDemo();
- case 4: changeToDirectionDemo();
- case 5: changeToDirectionAndDirectionAsAngleDemo();
- }
- });
- // addButton("PartEmitMode.Point Demo", changeToPointDemo);
- // addButton("PartEmitMode.Point + emitDirectionAsAngle Demo", changeToPointAndDirectionAsAngleDemo);
- // addButton("PartEmitMode.Cone Demo", changeToConeDemo);
- // addButton("PartEmitMode.Box Demo", changeToBoxDemo);
- // addButton("PartEmitMode.Direction Demo", changeToDirectionDemo);
- // addButton("PartEmitMode.Direction + emitDirectionAsAngle Demo", changeToDirectionAndDirectionAsAngleDemo);
- changeToPointDemo();
- }
- function changeToPointDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.sizeRand = .2;
- g.life = 1;
- g.speed = 100;
- g.speedRand = 3;
- g.rotSpeed = 2;
- g.emitMode = PartEmitMode.Point;
- g.emitDist = 0;
- g.fadeIn = 0;
- g.fadeOut = 0;
- g.dx = cast s2d.width / 2;
- g.dy = cast s2d.height / 2;
- // particles.addGroup(g);
- }
- function changeToPointAndDirectionAsAngleDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.size = .8;
- g.sizeRand = .2;
- g.life = .5;
- g.speed = 100;
- g.speedRand = 3;
- g.emitMode = PartEmitMode.Point;
- g.emitDist = 0;
- g.fadeIn = 0;
- g.fadeOut = 0;
- g.dx = cast s2d.width / 2;
- g.dy = cast s2d.height / 2;
- // particles.addGroup(g);
- }
- function changeToConeDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.size = .2;
- g.gravity = 1;
- g.life = 5;
- g.speed = 100;
- g.speedRand = 3;
- g.emitMode = PartEmitMode.Cone;
- g.emitAngle = Math.PI;
- g.emitDist = 0;
- g.emitDistY = 0;
- g.fadeIn = 1;
- g.fadeOut = 1;
- g.dx = cast s2d.width / 2;
- g.dy = cast s2d.height / 2;
- // particles.addGroup(g);
- }
- function changeToBoxDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.size = .2;
- g.gravity = 1;
- g.life = 5;
- g.speed = 100;
- g.speedRand = 3;
- g.emitMode = PartEmitMode.Box;
- g.emitAngle = Math.PI;
- g.emitDist = s2d.width;
- g.emitDistY = s2d.height;
- g.dx = cast s2d.width / 2;
- // particles.addGroup(g);
- }
- function changeToDirectionDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.size = .2;
- g.gravity = 1;
- g.life = 5;
- g.speed = 100;
- g.speedRand = 3;
- g.emitMode = PartEmitMode.Direction;
- g.emitDist = s2d.width;
- g.emitAngle = Math.PI / 2;
- g.fadeOut = .5;
- // particles.addGroup(g);
- }
- function changeToDirectionAndDirectionAsAngleDemo() {
- // clear();
- reset();
- // g = new ParticleGroup(particles);
- g.size = .8;
- g.sizeRand = .2;
- g.life = 6;
- g.speed = 200;
- g.speedRand = 3;
- g.emitMode = PartEmitMode.Direction;
- g.emitDist = s2d.height;
- g.emitAngle = Math.PI / 4;
- g.fadeIn = 0;
- g.fadeOut = 0;
- // particles.addGroup(g);
- }
- static function main() {
- Res.initEmbed();
- new Particles2d();
- }
- function reset() {
- g.dx = 0;
- g.dy = 0;
- g.emitDist = 50.;
- g.emitDistY = 50.;
- g.emitAngle = -.5;
- g.emitSync = 0;
- g.emitDelay = 0;
- g.emitStartDist = 0.;
- g.life = 1;
- g.lifeRand = 0;
- g.sizeIncr = 0;
- g.incrX = true;
- g.incrY = true;
- g.size = 1;
- g.sizeRand = 0;
- g.speed = 50.;
- g.speedRand = 0;
- g.speedIncr = 0;
- g.gravity = 0;
- g.gravityAngle = 0;
- g.rotInit = 0;
- g.rotSpeed = 0;
- g.rotSpeedRand = 0;
- g.rotAuto = false;
- g.fadeIn = .2;
- g.fadeOut = .8;
- g.fadePower = 1;
- particles.x = 0;
- particles.y = 0;
- }
- function clear():Void {
- time = 0;
- if (movableParticleGroup != null) movableParticleGroup = null;
- if (g != null) particles.removeGroup(g);
- }
- override function update(dt:Float) {
- super.update(dt);
- if( moving ) {
- time += dt * 0.6;
- particles.x = Math.cos(time) * (s2d.width / 4);
- particles.y = Math.sin(time) * (s2d.height / 4);
- }
- // if (movableParticleGroup != null)
- // {
- // time += dt * 0.01;
- // movableParticleGroup.dx = cast s2d.width / 2 + Math.cos(time) * 200;
- // movableParticleGroup.dy = cast s2d.height / 2 + Math.sin(time) * 200;
- // }
- }
- }
|