@tawaship/pixi-animate-runtime 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @tawaship/pixi-animate-runtime - v0.1.0
2
+ * @tawaship/pixi-animate-runtime - v0.1.1
3
3
  *
4
4
  * @author tawaship (makazu.mori@gmail.com)
5
5
  * @license MIT
@@ -446,6 +446,12 @@ this.PIXI = this.PIXI || {};
446
446
  this._maskHost = null;
447
447
  /** The objects this object masks (while they are on a display list) */
448
448
  this._maskTargets = [];
449
+ /**
450
+ * Set on a root when a timeline under it jumped outside the playing (a goto):
451
+ * its clips are to be settled before Pixi draws it (settleForDrawing), as a
452
+ * createjs draw would. The resolve phase of a frame clears it
453
+ */
454
+ this._pendingResolve = false;
449
455
  this.id = nextId++;
450
456
  this.pixi = pixi;
451
457
  pixi.owner = this;
@@ -1240,6 +1246,13 @@ this.PIXI = this.PIXI || {};
1240
1246
  if (position != null) {
1241
1247
  this._t = 0;
1242
1248
  this._updateTimeline(position, true);
1249
+ // The clips it placed (synched ones, ones to start over) are settled by createjs when it
1250
+ // draws: the root is to be settled before Pixi draws it, if no frame is played before
1251
+ var root = this;
1252
+ while (root.parent) {
1253
+ root = root.parent;
1254
+ }
1255
+ root._pendingResolve = true;
1243
1256
  }
1244
1257
  };
1245
1258
  MovieClip.prototype._reset = function _reset () {
@@ -2684,7 +2697,7 @@ this.PIXI = this.PIXI || {};
2684
2697
  }
2685
2698
 
2686
2699
  /** The version of this package (written in from package.json when the package is built) */
2687
- var VERSION = "0.1.0";
2700
+ var VERSION = "0.1.1";
2688
2701
 
2689
2702
  /**
2690
2703
  * The eases of CreateJS (createjs.Ease), computed as CreateJS computes them,
@@ -3331,6 +3344,7 @@ this.PIXI = this.PIXI || {};
3331
3344
  * reverse order), without playing a frame.
3332
3345
  */
3333
3346
  function resolveState(node) {
3347
+ node._pendingResolve = false;
3334
3348
  if (node instanceof MovieClip) {
3335
3349
  node._updateState();
3336
3350
  }
@@ -3343,6 +3357,34 @@ this.PIXI = this.PIXI || {};
3343
3357
  }
3344
3358
  }
3345
3359
  }
3360
+ /**
3361
+ * Settles a display tree for drawing without playing it on, as a createjs
3362
+ * stage draw shows it (MovieClip.draw settles each clip): the synched and
3363
+ * single frame clips are placed at the frame their parent gives, and a clip
3364
+ * waiting to start over (an independent clip reset when its parent placed it
3365
+ * again) is shown at its first frame the way a new clip is (no frame script,
3366
+ * its playhead left to start on the next frame, as in the template, where
3367
+ * createjs draws only after a frame). Children after their parent, in reverse
3368
+ * order as the resolve phase.
3369
+ */
3370
+ function settleForDrawing(node) {
3371
+ if (node instanceof MovieClip) {
3372
+ if (node.mode !== INDEPENDENT) {
3373
+ node._updateState();
3374
+ }
3375
+ else if (node._rawPosition === -1) {
3376
+ node._renderFirstFrame();
3377
+ }
3378
+ }
3379
+ if (node instanceof Container) {
3380
+ var children = node.children.slice();
3381
+ for (var i = children.length - 1; i >= 0; i--) {
3382
+ if (children[i] instanceof MovieClip) {
3383
+ settleForDrawing(children[i]);
3384
+ }
3385
+ }
3386
+ }
3387
+ }
3346
3388
 
3347
3389
  /** The frame rate a root plays at when its content does not give one */
3348
3390
  var DEFAULT_FPS = 60;
@@ -3368,7 +3410,7 @@ this.PIXI = this.PIXI || {};
3368
3410
  * on only settles it on its first frame.
3369
3411
  */
3370
3412
  var AnimateController = function AnimateController(container) {
3371
- /** Playback speed (1 is the content's own frame rate) */
3413
+ /** Playback speed (1 is the content's own frame rate, 0 stops; a value below 0 is taken as 0) */
3372
3414
  this.speed = 1;
3373
3415
  /** Whether one call may play more than one frame (when the display runs slower than the content) */
3374
3416
  this.overSpeed = true;
@@ -3380,12 +3422,34 @@ this.PIXI = this.PIXI || {};
3380
3422
  this._deltas = [];
3381
3423
  this._nextDelta = 0;
3382
3424
  this._container = container;
3425
+ // Pixi updates the transforms of the tree before every draw: the roots a goto changed outside
3426
+ // the playing are settled then, as a createjs draw settles them (frames played meanwhile settle them first)
3427
+ var updateTransform = container.updateTransform;
3428
+ var controller = this;
3429
+ container.updateTransform = function () {
3430
+ controller._settleForDrawing();
3431
+ updateTransform.call(this);
3432
+ };
3433
+ };
3434
+ /** Settles the roots marked by a goto since they were last resolved */
3435
+ AnimateController.prototype._settleForDrawing = function _settleForDrawing () {
3436
+ var targets = this._targets;
3437
+ Object.keys(targets).forEach(function (key) {
3438
+ var target = targets[Number(key)];
3439
+ if (target && target.root._pendingResolve) {
3440
+ target.root._pendingResolve = false;
3441
+ settleForDrawing(target.root);
3442
+ }
3443
+ });
3383
3444
  };
3384
3445
  AnimateController.prototype.handleTick = function handleTick (delta) {
3385
3446
  var this$1$1 = this;
3386
3447
 
3387
- var d = delta * this.speed;
3388
- var usual = this._usualDelta(delta) * this.speed;
3448
+ // A speed below 0 plays as 0 does (nothing is played backward): the frames owed stay where they
3449
+ // were, and the playing goes on from there once the speed is above 0 again
3450
+ var speed = Math.max(this.speed, 0);
3451
+ var d = delta * speed;
3452
+ var usual = this._usualDelta(delta) * speed;
3389
3453
  var targets = this._targets;
3390
3454
  Object.keys(targets).forEach(function (key) {
3391
3455
  var target = targets[Number(key)];
@@ -3491,7 +3555,7 @@ this.PIXI = this.PIXI || {};
3491
3555
  AnimateContainer.prototype.constructor = AnimateContainer;
3492
3556
 
3493
3557
  var prototypeAccessors = { speed: { configurable: true },overSpeed: { configurable: true },smooth: { configurable: true } };
3494
- /** Playback speed (1 is the content's own frame rate) */
3558
+ /** Playback speed (1 is the content's own frame rate, 0 stops; a value below 0 is taken as 0) */
3495
3559
  prototypeAccessors.speed.get = function () { return this._controller.speed; };
3496
3560
  prototypeAccessors.speed.set = function (value) { this._controller.speed = value; };
3497
3561
  /** Whether one call may play more than one frame (when the display runs slower than the content) */