diff --git a/docs/examples/images/spaceship.json b/docs/examples/images/spaceship.json
new file mode 100644
index 00000000..a069b1c1
--- /dev/null
+++ b/docs/examples/images/spaceship.json
@@ -0,0 +1 @@
+{"frames":{"hullFront":{"frame":{"x":0,"y":69,"w":44,"h":88},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":44,"h":88},"sourceSize":{"w":44,"h":88}},"hullRear":{"frame":{"x":24,"y":0,"w":48,"h":58},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":48,"h":58},"sourceSize":{"w":48,"h":58}},"leftEngine":{"frame":{"x":45,"y":69,"w":23,"h":68},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":23,"h":68},"sourceSize":{"w":23,"h":68}},"leftWing":{"frame":{"x":73,"y":0,"w":44,"h":52},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":44,"h":52},"sourceSize":{"w":44,"h":52}},"rightEngine":{"frame":{"x":0,"y":0,"w":23,"h":68},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":23,"h":68},"sourceSize":{"w":23,"h":68}},"rightWing":{"frame":{"x":73,"y":101,"w":44,"h":52},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":44,"h":52},"sourceSize":{"w":44,"h":52}},"weaponPod":{"frame":{"x":73,"y":53,"w":30,"h":47},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":30,"h":47},"sourceSize":{"w":30,"h":47}}},"meta":{"app":"https://www.leshylabs.com/apps/sstool/","version":"Leshy SpriteSheet Tool v0.8.4","image":"spaceship.png","size":{"w":117,"h":157},"scale":1}}
\ No newline at end of file
diff --git a/docs/examples/images/spaceship.png b/docs/examples/images/spaceship.png
new file mode 100644
index 00000000..da8a23a8
Binary files /dev/null and b/docs/examples/images/spaceship.png differ
diff --git a/docs/examples/index.html b/docs/examples/index.html
index e9561e8a..dc5fe19a 100644
--- a/docs/examples/index.html
+++ b/docs/examples/index.html
@@ -37,6 +37,7 @@
Emitter Examples
Fountain
Animated Coins
Animated Bubbles
+ Spaceship Destruction
Particle Container Performance
diff --git a/docs/examples/spaceshipDestruction.html b/docs/examples/spaceshipDestruction.html
new file mode 100644
index 00000000..93c1f935
--- /dev/null
+++ b/docs/examples/spaceshipDestruction.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+ Spaceship Destruction
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Click Anywhere
+
+
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
index a36979c3..102318a3 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,7 @@
"electron": "^4.0.6",
"eslint": "^4.18.2",
"gh-pages": "^2.0.0",
- "http-server": "*",
+ "http-server": "^0.11.1",
"ncp": "^2.0.0",
"pixi.js": "^4.2.2",
"rimraf": "^2.5.4",
diff --git a/src/Emitter.ts b/src/Emitter.ts
index 9d41541b..025bec73 100644
--- a/src/Emitter.ts
+++ b/src/Emitter.ts
@@ -279,13 +279,6 @@ export class Emitter
* Setting this to false requires calling the update function manually.
*/
protected _autoUpdate: boolean;
- /**
- * If the emmitter is emitting arts in order as provided in `particleImages`.
- * Effective only when `particleImages` has multiple arts.
- * This is particularly useful for PathParticles, in case you need to emit a body in an order.
- * For example: dragon - [Head, body1, body2, ..., tail]
- */
- public orderedArt: boolean;
/**
* A number keeping index of currently applied image. Used to emit arts in order.
*/
@@ -368,7 +361,6 @@ export class Emitter
this._origConfig = null;
this._origArt = null;
this._autoUpdate = false;
- this.orderedArt = false;
this._currentImageIndex = -1;
this._destroyWhenComplete = false;
this._completeCallback = null;
@@ -387,6 +379,17 @@ export class Emitter
this.updateOwnerPos = this.updateOwnerPos;
}
+ /**
+ * If the emitter is using particle art in order as provided in `particleImages`.
+ * Effective only when `particleImages` has multiple art options.
+ * This is particularly useful ensuring that each art shows up once, in case you need to emit a body in an order.
+ * For example: dragon - [Head, body1, body2, ..., tail]
+ */
+ public get orderedArt() { return this._currentImageIndex !== -1; }
+ public set orderedArt(value) {
+ this._currentImageIndex = value ? 0 : -1;
+ }
+
/**
* Time between particle spawns in seconds. If this value is not a number greater than 0,
* it will be set to 1 (particle per second) to prevent infinite loops.
@@ -884,19 +887,23 @@ export class Emitter
//set a random texture if we have more than one
if(this.particleImages.length > 1)
{
- if(this.orderedArt)
+ // if using ordered art
+ if(this._currentImageIndex !== -1)
{
- this._currentImageIndex++;
+ // get current art index, then increment for the next particle
+ p.applyArt(this.particleImages[this._currentImageIndex++]);
+ // loop around if needed
if(this._currentImageIndex < 0 || this._currentImageIndex >= this.particleImages.length)
{
- this._currentImageIndex = 0;
+ this._currentImageIndex = 0;
}
}
+ // otherwise grab a random one
else
{
- this._currentImageIndex = Math.floor(Math.random() * this.particleImages.length);
+ p.applyArt(this.particleImages[Math.floor(Math.random() * this.particleImages.length)]);
}
- p.applyArt(this.particleImages[this._currentImageIndex]);
+
}
else
{
diff --git a/yarn.lock b/yarn.lock
index b8ad93b9..0fa403fd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -525,12 +525,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0:
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-async@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
- integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-
-async@^2.6.1:
+async@^2.6.1, async@^2.6.2:
version "2.6.3"
resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
@@ -733,7 +728,7 @@ color-name@1.1.3:
colors@1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+ resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
combined-stream@^1.0.6, combined-stream@~1.0.6:
@@ -780,7 +775,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
corser@~2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
+ resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
@@ -820,7 +815,7 @@ debug@2.6.9, debug@^2.1.3, debug@^2.2.0:
dependencies:
ms "2.0.0"
-debug@^3.0.0, debug@^3.1.0, debug@^3.2.6:
+debug@^3.0.0, debug@^3.1.0, debug@^3.1.1:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
@@ -897,9 +892,9 @@ ecc-jsbn@~0.1.1:
safer-buffer "^2.1.0"
ecstatic@^3.0.0:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.3.2.tgz#6d1dd49814d00594682c652adb66076a69d46c48"
- integrity sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.1.tgz#1196a74d63d71d28dea807ed2b6183062671a206"
+ integrity sha512-BAdHx9LOCG1fwxY8MIydUBskl8UUQrYeC3WE14FA1DPlBzqoG1aOgEkypcSpmiiel8RAj8gW1s40RrclfrpGUg==
dependencies:
he "^1.1.1"
mime "^1.6.0"
@@ -1143,16 +1138,16 @@ eventemitter3@^2.0.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=
-eventemitter3@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
- integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
-
eventemitter3@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
+eventemitter3@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
+ integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
+
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@@ -1290,11 +1285,11 @@ flat-cache@^1.2.1:
write "^0.2.1"
follow-redirects@^1.0.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
- integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
+ version "1.9.0"
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f"
+ integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==
dependencies:
- debug "^3.2.6"
+ debug "^3.0.0"
forever-agent@~0.6.1:
version "0.6.1"
@@ -1445,7 +1440,7 @@ has-flag@^3.0.0:
he@^1.1.1:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
highlight.js@^9.13.1:
@@ -1459,17 +1454,17 @@ hosted-git-info@^2.1.4:
integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
http-proxy@^1.8.1:
- version "1.17.0"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
- integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
+ version "1.18.0"
+ resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
+ integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
dependencies:
- eventemitter3 "^3.0.0"
+ eventemitter3 "^4.0.0"
follow-redirects "^1.0.0"
requires-port "^1.0.0"
-http-server@*:
+http-server@^0.11.1:
version "0.11.1"
- resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.11.1.tgz#2302a56a6ffef7f9abea0147d838a5e9b6b6a79b"
+ resolved "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz#2302a56a6ffef7f9abea0147d838a5e9b6b6a79b"
integrity sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==
dependencies:
colors "1.0.3"
@@ -1839,7 +1834,7 @@ mime-types@^2.1.12, mime-types@~2.1.19:
mime@^1.6.0:
version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mimic-fn@^1.0.0:
@@ -1874,7 +1869,7 @@ minimist@~0.0.1:
resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
-mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1:
+mkdirp@0.5.1, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
@@ -1992,12 +1987,12 @@ onetime@^2.0.0:
opener@~1.4.0:
version "1.4.3"
- resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
+ resolved "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=
optimist@0.6.x, optimist@^0.6.1:
version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
dependencies:
minimist "~0.0.1"
@@ -2215,13 +2210,13 @@ pluralize@^7.0.0:
integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
portfinder@^1.0.13:
- version "1.0.20"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a"
- integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==
+ version "1.0.25"
+ resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
+ integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
dependencies:
- async "^1.5.2"
- debug "^2.2.0"
- mkdirp "0.5.x"
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.1"
prelude-ls@~1.1.2:
version "1.1.2"
@@ -2286,7 +2281,7 @@ punycode@^2.1.0:
qs@~2.3.3:
version "2.3.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
+ resolved "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
integrity sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=
qs@~6.5.2:
@@ -2435,7 +2430,7 @@ require-uncached@^1.0.3:
requires-port@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
resolve-from@^1.0.0:
@@ -3004,7 +2999,7 @@ uglify-js@^3.1.4:
union@~0.4.3:
version "0.4.6"
- resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0"
+ resolved "https://registry.npmjs.org/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0"
integrity sha1-GY+9rrolTniLDvy2MLwR8kopWeA=
dependencies:
qs "~2.3.3"
@@ -3028,7 +3023,7 @@ urix@^0.1.0:
url-join@^2.0.5:
version "2.0.5"
- resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
+ resolved "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=
url@^0.11.0: