Browse Source

make sure absPos is sync in manual emit/update, fixed reversed V tcoords

ncannasse 11 years ago
parent
commit
e0ce5871ba
1 changed files with 16 additions and 9 deletions
  1. 16 9
      h3d/parts/Emitter.hx

+ 16 - 9
h3d/parts/Emitter.hx

@@ -85,6 +85,7 @@ class Emitter extends h3d.scene.Object {
 	public function update(dt:Float) {
 	public function update(dt:Float) {
 		var s = state;
 		var s = state;
 		var old = time;
 		var old = time;
+		if( posChanged ) syncPos();
 		time += dt * eval(s.globalSpeed, time, rand) / s.globalLife;
 		time += dt * eval(s.globalSpeed, time, rand) / s.globalLife;
 		var et = (time - old) * s.globalLife;
 		var et = (time - old) * s.globalLife;
 		if( time >= 1 && s.loop )
 		if( time >= 1 && s.loop )
@@ -96,7 +97,7 @@ class Emitter extends h3d.scene.Object {
 				emitCount += b.count;
 				emitCount += b.count;
 		while( emitCount > 0 ) {
 		while( emitCount > 0 ) {
 			if( count < s.maxParts ) {
 			if( count < s.maxParts ) {
-				emit();
+				emitParticle();
 				count++;
 				count++;
 			}
 			}
 			emitCount -= 1;
 			emitCount -= 1;
@@ -189,6 +190,11 @@ class Emitter extends h3d.scene.Object {
 	}
 	}
 	
 	
 	public function emit() {
 	public function emit() {
+		if( posChanged ) syncPos();
+		return emitParticle();
+	}
+	
+	function emitParticle() {
 		var p;
 		var p;
 		if( pool == null )
 		if( pool == null )
 			p = new Particle();
 			p = new Particle();
@@ -218,6 +224,7 @@ class Emitter extends h3d.scene.Object {
 				tail = p;
 				tail = p;
 			}
 			}
 		}
 		}
+		return p;
 	}
 	}
 	
 	
 	function kill(p:Particle) {
 	function kill(p:Particle) {
@@ -382,7 +389,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				// UV
 				// UV
 				tmp[pos++] = f.u;
 				tmp[pos++] = f.u;
-				tmp[pos++] = f.v;
+				tmp[pos++] = f.v2;
 				// RBGA
 				// RBGA
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
@@ -400,7 +407,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u;
 				tmp[pos++] = f.u;
-				tmp[pos++] = f.v2;
+				tmp[pos++] = f.v;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;
@@ -437,7 +444,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u2;
 				tmp[pos++] = f.u2;
-				tmp[pos++] = f.v;
+				tmp[pos++] = f.v2;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;
@@ -454,7 +461,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u2;
 				tmp[pos++] = f.u2;
-				tmp[pos++] = f.v2;
+				tmp[pos++] = f.v;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;
@@ -481,7 +488,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				// UV
 				// UV
 				tmp[pos++] = f.u;
 				tmp[pos++] = f.u;
-				tmp[pos++] = f.v;
+				tmp[pos++] = f.v2;
 				// RBGA
 				// RBGA
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
@@ -499,7 +506,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u;
 				tmp[pos++] = f.u;
-				tmp[pos++] = f.v2;
+				tmp[pos++] = f.v;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;
@@ -516,7 +523,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u2;
 				tmp[pos++] = f.u2;
-				tmp[pos++] = f.v;
+				tmp[pos++] = f.v2;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;
@@ -533,7 +540,7 @@ class Emitter extends h3d.scene.Object {
 				tmp[pos++] = p.size;
 				tmp[pos++] = p.size;
 				tmp[pos++] = ratio;
 				tmp[pos++] = ratio;
 				tmp[pos++] = f.u2;
 				tmp[pos++] = f.u2;
-				tmp[pos++] = f.v2;
+				tmp[pos++] = f.v;
 				if( hasColor ) {
 				if( hasColor ) {
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cr;
 					tmp[pos++] = p.cg;
 					tmp[pos++] = p.cg;