diff --git a/README.md b/README.md index 97bc4c0..9ee4da9 100644 --- a/README.md +++ b/README.md @@ -79,8 +79,8 @@ Most actions implement specific predefined animations that are ready to use. If const razzleDazzle = Action.sequence([ Action.unhide(), Action.fadeIn(0.3), - Action.scaleTo(2, 0.3).withTimingMode(TimingMode.easeInSine), - Action.scaleTo(1, 0.3).withTimingMode(TimingMode.easeOutSine), + Action.scaleTo(2, 0.3).easeIn(), + Action.scaleTo(1, 0.3).easeOut(), ]); // ✨ Show mySprite with some flair! @@ -89,10 +89,12 @@ mySprite.run(razzleDazzle); | Action | Description | Reversible? | | :----- | :---------- | :---------- | +|***Chaining Actions***||| | `Action.group(actions)` | Run multiple actions in parallel. | Yes | | `Action.sequence(actions)` | Run multiple actions sequentially. | Yes | | `Action.repeat(action, count)` | Repeat an action a specified number of times. | Yes | | `Action.repeatForever(action)` | Repeat an action indefinitely. | Yes | +|***Animating a Node's Position in a Linear Path***||| | `Action.moveBy(dx, dy, duration)` | Move a node by a relative amount. | Yes | | `Action.moveByVector(vector, duration)` | Move a node by a relative vector (e.g. `PIXI.Point`). | Yes | | `Action.moveByX(dx, duration)` | Move a node horizontally by a relative amount. | Yes | @@ -101,60 +103,97 @@ mySprite.run(razzleDazzle); | `Action.moveToPoint(point, duration)` | Move a node to a specified position (e.g. `PIXI.Point`). | _*No_ | | `Action.moveToX(x, duration)` | Move a node to a specified horizontal position. | _*No_ | | `Action.moveToY(y, duration)` | Move a node to a specified vertical position. | _*No_ | -| `Action.scaleBy(delta, duration)` | Scale a node by a relative amount. | Yes | -| `Action.scaleBy(dx, dy, duration)` | Scale a node by a relative amount. | Yes | +|***Animating a Node's Position Along a Custom Path***||| +| `Action.follow(path, duration)` | Move a node along a path, optionally orienting the node to the path. | Yes | Yes | +| `Action.followAtSpeed(path, speed)` | Move a node along a path at a specified speed, optionally orienting the node to the path. | Yes | +|***Animating the Rotation of a Node***||| +| `Action.rotateBy(delta, duration)` | Rotate a node by a relative value (in radians). | Yes | +| `Action.rotateByDegrees(delta, duration)` | Rotate a node by a relative value (in degrees). | Yes | +| `Action.rotateTo(radians, duration)` | Rotate a node to a specified value (in radians). | _*No_ | +| `Action.rotateToDegrees(degrees, duration)` | Rotate a node to a specified value (in degrees). | _*No_ | +|***Animating the Scaling of a Node***||| +| `Action.scaleBy(delta, duration)` | Scale a node by a relative value. | Yes | +| `Action.scaleBy(dx, dy, duration)` | Scale a node by a relative value. | Yes | | `Action.scaleByVector(vector, duration)` | Scale a node by a given vector (e.g. `PIXI.Point`). | Yes | -| `Action.scaleXBy(dx, duration)` | Scale a node by a relative amount. | Yes | -| `Action.scaleYBy(dy, duration)` | Scale a node by a relative amount. | Yes | +| `Action.scaleByX(dx, duration)` | Scale a node by a relative value. | Yes | +| `Action.scaleByY(dy, duration)` | Scale a node by a relative value. | Yes | | `Action.scaleTo(scale, duration)` | Scale a node to a specified value. | _*No_ | | `Action.scaleTo(x, y, duration)` | Scale a node to a specified value. | _*No_ | | `Action.scaleToSize(vector, duration)` | Scale a node to a specified size (e.g. `PIXI.Point`). | _*No_ | -| `Action.scaleXTo(x, duration)` | Scale a node to a specified value in the X-axis. | _*No_ | -| `Action.scaleYTo(y, duration)` | Scale a node to a specified value in the Y-axis. | _*No_ | +| `Action.scaleToX(x, duration)` | Scale a node to a specified value in the X-axis. | _*No_ | +| `Action.scaleToY(y, duration)` | Scale a node to a specified value in the Y-axis. | _*No_ | +|***Animating the Transparency of a Node***||| | `Action.fadeIn(duration)` | Fade the alpha to `1.0`. | Yes | | `Action.fadeOut(duration)` | Fade the alpha to `0.0`. | Yes | | `Action.fadeAlphaBy(delta, duration)` | Fade the alpha by a relative value. | Yes | | `Action.fadeAlphaTo(alpha, duration)` | Fade the alpha to a specified value. | _*No_ | -| `Action.rotateBy(delta, duration)` | Rotate a node by a relative value (in radians). | Yes | -| `Action.rotateByDegrees(delta, duration)` | Rotate a node by a relative value (in degrees). | Yes | -| `Action.rotateTo(radians, duration)` | Rotate a node to a specified value (in radians). | _*No_ | -| `Action.rotateToDegrees(degrees, duration)` | Rotate a node to a specified value (in degrees). | _*No_ | -| `Action.speedBy(delta, duration)` | Change how fast a node executes actions by a relative value. | Yes | -| `Action.speedTo(speed, duration)` | Set how fast a node executes actions. | _*No_ | -| `Action.hide()` | Set a node's `visible` property to `false`. | Yes | -| `Action.unhide()` | Set a node's `visible` property to `true`. | Yes | -| `Action.removeFromParent()` | Remove a node from its parent. | _†Identical_ | -| `Action.waitForDuration(duration)` | Idle for a specified interval. | _†Identical_ | +|***Controlling Node Visibility***||| +| `Action.unhide()` | Instant. Set a node's `visible` property to `true`. | Yes | +| `Action.hide()` | Instant. Set a node's `visible` property to `false`. | Yes | +|***Removing a Node from the Canvas***||| +| `Action.removeFromParent()` | Instant. Remove a node from its parent. | _†Identical_ | +|***Delaying Actions***||| +| `Action.waitForDuration(duration)` | Idle for a specified period of time. | _†Identical_ | | `Action.waitForDurationWithRange(duration, range)` | Idle for a randomized period of time. | _†Identical_ | -| `Action.run(block)` | Execute a block of code immediately. | _†Identical_ | -| `Action.customAction(duration, stepHandler)` | Execute a custom stepping function over the duration. | _†Identical_ | - -#### Reversing Actions +|***Triggers and Custom Actions***||| +| `Action.run(callback)` | Instant. Execute a block. | _†Identical_ | +| `Action.customAction(duration, stepHandler)` | Execute a custom stepping function over the action duration. | _†Identical_ | +|***Controlling the Node's Action Speed***||| +| `Action.speedBy(delta, duration)` | Change how fast a node executes its actions by a relative value. | Yes | +| `Action.speedTo(speed, duration)` | Set how fast a node executes actions to a specified value. | _*No_ | + +### About Reversing Actions All actions have a `.reversed()` method which will return an action with the reverse action on it. Some actions are **not reversible**, and these cases are noted in the table above: -- _**†Identical:**_ The reverse action will be identical to the action. -- _**\*No:**_ The reverse action will idle for the equivalent duration. +- _**†Identical:**_ The reversed action will be identical to the original action. +- _**\*No:**_ The reversed action will only idle for the equivalent duration. + +## Timing Modes + +All actions have a `timingMode` which controls the speed curve of its execution. -### TimingMode +The default timingMode for all actions is `TimingMode.linear`, which causes an animation to occur evenly over its duration. -The default timing mode for actions is `TimingMode.linear`. +> Note: The `timingMode` property of `.group()`, `.sequence()`, `.repeat()`, and `.repeatForever()` has no effect on the underlying action(s). -You can set a custom `TimingMode` (see options below), or you can provide a custom timing mode function. +You can customize the speed curve of actions like so: -| | InOut | In | Out | Description | +```ts +// Use the defaults +Action.fadeIn(0.3).easeInOut(); +Action.fadeIn(0.3).easeIn(); +Action.fadeIn(0.3).easeOut(); + +// Set a TimingMode +Action.fadeIn(0.3).setTimingMode(TimingMode.easeInOutCubic); + +// Provide a custom function +Action.fadeIn(0.3).setTimingMode(x => x * x); +``` + +### Global Defaults + +The `.easeInOut()`, `.easeIn()`, and `.easeOut()` methods set the timing mode of the action to the global default timing for that curve type. + +You can set any global defaults for these by updating `Action.DefaultTimingModeEaseInOut`, `Action.DefaultTimingModeEaseIn`, and `Action.DefaultTimingModeEaseOut`. The default timing modes for these easings are `TimingMode.easeInOutSine`, `TimingMode.easeInSine`, and `TimingMode.easeOutSine` respectively. + +### Built-in TimingMode Options + +See the following table for default `TimingMode` options. + +| Pattern | Ease In, Ease Out | Ease In | Ease Out | Description | | --------------- | ----- | -- | --- | ----------- | | **Linear** | `linear` | - | - | Constant motion with no acceleration or deceleration. | | **Sine** | `easeInOutSine` | `easeInSine` | `easeOutSine` | Gentle start and end, with accelerated motion in the middle. | -| **Circ** | `easeInOutCirc` | `easeInCirc` | `easeOutCirc` | Smooth start and end, faster acceleration in the middle, circular motion. | +| **Circular** | `easeInOutCirc` | `easeInCirc` | `easeOutCirc` | Smooth start and end, faster acceleration in the middle, circular motion. | | **Cubic** | `easeInOutCubic` | `easeInCubic` | `easeOutCubic` | Gradual acceleration and deceleration, smooth motion throughout. | -| **Quad** | `easeInOutQuad` | `easeInQuad` | `easeOutQuad` | Smooth acceleration and deceleration, starts and ends slowly, faster in the middle. | +| **Quadratic** | `easeInOutQuad` | `easeInQuad` | `easeOutQuad` | Smooth acceleration and deceleration, starts and ends slowly, faster in the middle. | | **Quartic** | `easeInOutQuart` | `easeInQuart` | `easeOutQuart` | Slower start and end, increased acceleration in the middle. | | **Quintic** | `easeInOutQuint` | `easeInQuint` | `easeOutQuint` | Very gradual start and end, smoother acceleration in the middle. | -| **Expo** | `easeInOutExpo` | `easeInExpo` | `easeOutExpo` | Very slow start, exponential acceleration, slow end. | +| **Exponential** | `easeInOutExpo` | `easeInExpo` | `easeOutExpo` | Very slow start, exponential acceleration, slow end. | | **Back** | `easeInOutBack` | `easeInBack` | `easeOutBack` | Starts slowly, overshoots slightly, settles into final position. | | **Bounce** | `easeInOutBounce` | `easeInBounce` | `easeOutBounce` | Bouncy effect at the start or end, with multiple rebounds. | | **Elastic** | `easeInOutElastic` | `easeInElastic` | `easeOutElastic` | Stretchy motion with overshoot and multiple oscillations. | - ### Custom actions Actions are reusable, so you can create complex animations once, and then run them on many display objects. @@ -164,17 +203,17 @@ Actions are reusable, so you can create complex animations once, and then run th const rockBackAndForth = Action.repeatForever( Action.sequence([ Action.group([ - Action.moveXBy(5, 0.33), - Action.rotateByDegrees(-2, 0.33), - ]).setTimingMode(TimingMode.easeOutQuad), + Action.moveXBy(5, 0.33).easeOut(), + Action.rotateByDegrees(-2, 0.33).easeOut(), + ]), Action.group([ - Action.moveXBy(-10, 0.34), - Action.rotateByDegrees(4, 0.34), - ]).setTimingMode(TimingMode.easeInOutQuad), + Action.moveXBy(-10, 0.34).easeInOut(), + Action.rotateByDegrees(4, 0.34).easeInOut(), + ]), Action.group([ - Action.moveXBy(5, 0.33), - Action.rotateByDegrees(-2, 0.33), - ]).setTimingMode(TimingMode.easeInQuad), + Action.moveXBy(5, 0.33).easeIn(), + Action.rotateByDegrees(-2, 0.33).easeIn(), + ]), ]) ); @@ -190,12 +229,12 @@ You can combine these with dynamic actions for more variety: ```ts const MyActions = { squash: (amount: number, duration: number = 0.3) => Action.sequence([ - Action.scaleTo(amount, 1 / amount, duration / 2).setTimingMode(TimingMode.easeOutSine), - Action.scaleTo(1, duration / 2).setTimingMode(TimingMode.easeInSine) + Action.scaleTo(amount, 1 / amount, duration / 2).easeOut(), + Action.scaleTo(1, duration / 2).easeIn() ]), stretch: (amount: number, duration: number = 0.3) => Action.sequence([ - Action.scaleTo(1 / amount, amount, duration / 2).setTimingMode(TimingMode.easeOutSine), - Action.scaleTo(1, duration / 2).setTimingMode(TimingMode.easeInSine) + Action.scaleTo(1 / amount, amount, duration / 2).easeOut(), + Action.scaleTo(1, duration / 2).easeIn() ]), squashAndStretch: (amount: number, duration: number = 0.3) => Action.sequence([ MyActions.squash(amount, duration / 2), diff --git a/dist/Action.d.ts b/dist/Action.d.ts index 39277c4..c4662d9 100644 --- a/dist/Action.d.ts +++ b/dist/Action.d.ts @@ -9,6 +9,10 @@ interface VectorLike { x: number; y: number; } +/** Any object containing an array of points. */ +interface PathLike { + points: VectorLike[]; +} /** * Action is an animation that is executed by a display object in the scene. * Actions are used to change a display object in some way (like move its position over time). @@ -19,10 +23,38 @@ interface VectorLike { * (i.e. UI and Game World). */ export declare abstract class Action { + /** The duration required to complete an action. */ readonly duration: TimeInterval; + /** A speed factor that modifies how fast an action runs. */ speed: number; + /** A setting that controls the speed curve of an animation. */ timingMode: TimingModeFn; + /** @deprecated A global category bitmask which can be used to group actions. */ categoryMask: number; + /** + * Default timing mode used for ease-in pacing. + * + * Set this to update the default `easeIn()` timing mode. + * + * @see TimingMode.easeInSine - Default value. + */ + static DefaultTimingModeEaseIn: (x: number) => number; + /** + * Default timing mode used for ease-out pacing. + * + * Set this to update the default `easeOut()` timing mode. + * + * @see TimingMode.easeOutSine - Default value. + */ + static DefaultTimingModeEaseOut: (x: number) => number; + /** + * Default timing mode used for ease-in, ease-out pacing. + * + * Set this to update the default `easeInOut()` timing mode. + * + * @see TimingMode.easeInOutSine - Default value. + */ + static DefaultTimingModeEaseInOut: (x: number) => number; /** All currently running actions. */ protected static readonly _actions: Action[]; /** @@ -140,6 +172,32 @@ export declare abstract class Action { * move the node. */ static moveToY(y: number, duration: TimeInterval): Action; + /** + * Creates an action that moves the node along a path, optionally orienting the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same duration. + * + * @param path A path to follow, or an object containing an array of points called `points`. + * @param duration The duration of the animation. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath When true, the node’s rotation turns to follow the path. + * @param fixedSpeed When true, the node's speed is consistent across different length segments. + */ + static follow(path: VectorLike[] | PathLike, duration: number, asOffset?: boolean, orientToPath?: boolean, fixedSpeed?: boolean): Action; + /** + * Creates an action that moves the node along a path at a specified speed, optionally orienting + * the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same speed. + * + * @param path A path to follow. + * @param speed The velocity at which the node should move in world units per second. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath If true, the node’s rotation turns to follow the path. + */ + static followAtSpeed(path: VectorLike[] | PathLike, speed: number, asOffset?: boolean, orientToPath?: boolean): Action; /** * Creates an action that rotates the node by a relative value (in radians). * @@ -197,13 +255,13 @@ export declare abstract class Action { * * This action is reversible. */ - static scaleXBy(x: number, duration: TimeInterval): Action; + static scaleByX(x: number, duration: TimeInterval): Action; /** * Creates an action that changes the y scale of a node by a relative value. * * This action is reversible. */ - static scaleYBy(y: number, duration: TimeInterval): Action; + static scaleByY(y: number, duration: TimeInterval): Action; /** * Creates an action that changes the x and y scale values of a node. * @@ -225,14 +283,14 @@ export declare abstract class Action { * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - static scaleXTo(x: number, duration: TimeInterval): Action; + static scaleToX(x: number, duration: TimeInterval): Action; /** * Creates an action that changes the x scale values of a node. * * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - static scaleYTo(y: number, duration: TimeInterval): Action; + static scaleToY(y: number, duration: TimeInterval): Action; /** * Creates an action that changes the alpha value of the node to 1.0. * @@ -301,7 +359,7 @@ export declare abstract class Action { * * This action is not reversible; the reverse action executes the same block. */ - static customAction(duration: number, stepFn: (target: TargetNode, x: number) => void): Action; + static customAction(duration: number, stepFn: (target: TargetNode, t: number, dt: number) => void): Action; /** * Tick all actions forward. * @@ -310,7 +368,15 @@ export declare abstract class Action { * @param onErrorHandler (Optional) Handler errors from each action's tick. */ static tick(deltaTimeMs: number, categoryMask?: number | undefined, onErrorHandler?: (error: any) => void): void; - constructor(duration: TimeInterval, speed?: number, timingMode?: TimingModeFn, categoryMask?: number); + constructor( + /** The duration required to complete an action. */ + duration: TimeInterval, + /** A speed factor that modifies how fast an action runs. */ + speed?: number, + /** A setting that controls the speed curve of an animation. */ + timingMode?: TimingModeFn, + /** @deprecated A global category bitmask which can be used to group actions. */ + categoryMask?: number); /** * Update function for the action. * @@ -331,23 +397,57 @@ export declare abstract class Action { */ abstract reversed(): Action; /** - * Do first time setup here. + * @deprecated To be removed soon. Modify node and action speed directly instead. * - * Anything you return here will be available as `ticker.data`. + * Set a category mask for this action. + * Use this to tick different categories of actions separately (e.g. separate different UI). + */ + setCategory(categoryMask: number): this; + /** + * Set the action's speed scale. Default: `1.0`. */ - protected _setupTicker(target: TargetNode, ticker: ActionTicker): any; - /** Set the action's speed scale. Defaults to 1.0. */ setSpeed(speed: number): this; - /** Set a timing mode function for this action. Defaults to TimingMode.linear. */ + /** + * Adjust the speed curve of an animation. Default: `TimingMode.linear`. + * + * @see {TimingMode} + */ setTimingMode(timingMode: TimingModeFn): this; /** - * Set a category mask for this action. + * Sets the speed curve of the action to linear pacing (the default). Linear pacing causes an + * animation to occur evenly over its duration. * - * Use this to tick different categories of actions separately (e.g. separate different UI). + * @see {TimingMode.linear} + */ + linear(): this; + /** + * Sets the speed curve of the action to the default ease-in pacing. Ease-in pacing causes the + * animation to begin slowly and then speed up as it progresses. * - * @deprecated use speed instead + * @see {Action.DefaultTimingModeEaseIn} */ - setCategory(categoryMask: number): this; + easeIn(): this; + /** + * Sets the speed curve of the action to the default ease-out pacing. Ease-out pacing causes the + * animation to begin quickly and then slow as it completes. + * + * @see {Action.DefaultTimingModeEaseOut} + */ + easeOut(): this; + /** + * Sets the speed curve of the action to the default ease-in, ease-out pacing. Ease-in, ease-out + * pacing causes the animation to begin slowly, accelerate through the middle of its duration, + * and then slow again before completing. + * + * @see {Action.DefaultTimingModeEaseInOut} + */ + easeInOut(): this; + /** + * Do first time setup here. + * + * Anything you return here will be available as `ticker.data`. + */ + protected _setupTicker(target: TargetNode, ticker: ActionTicker): any; } declare class ActionTicker { key: string | undefined; diff --git a/dist/Action.js b/dist/Action.js index c4ea843..81abd61 100644 --- a/dist/Action.js +++ b/dist/Action.js @@ -3,6 +3,7 @@ import { getIsPaused, getSpeed } from './util'; const EPSILON = 0.0000000001; const EPSILON_ONE = 1 - EPSILON; const DEG_TO_RAD = Math.PI / 180; +const HALF_PI = Math.PI / 2; // // ----- Action: ----- // @@ -170,6 +171,42 @@ export class Action { return new MoveToAction(undefined, y, duration); } // + // ----------------- Custom Path Actions: ----------------- + // + /** + * Creates an action that moves the node along a path, optionally orienting the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same duration. + * + * @param path A path to follow, or an object containing an array of points called `points`. + * @param duration The duration of the animation. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath When true, the node’s rotation turns to follow the path. + * @param fixedSpeed When true, the node's speed is consistent across different length segments. + */ + static follow(path, duration, asOffset = true, orientToPath = true, fixedSpeed = true) { + const _path = FollowPathAction.getPath(path); + return new FollowPathAction(_path, duration, asOffset, orientToPath, fixedSpeed); + } + /** + * Creates an action that moves the node along a path at a specified speed, optionally orienting + * the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same speed. + * + * @param path A path to follow. + * @param speed The velocity at which the node should move in world units per second. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath If true, the node’s rotation turns to follow the path. + */ + static followAtSpeed(path, speed, asOffset = true, orientToPath = true) { + const _path = FollowPathAction.getPath(path); + const _length = FollowPathAction.getLength(_path); + return new FollowPathAction(_path, _length[0] / speed, asOffset, orientToPath, true); + } + // // ----------------- Rotation Actions: ----------------- // /** @@ -244,7 +281,7 @@ export class Action { * * This action is reversible. */ - static scaleXBy(x, duration) { + static scaleByX(x, duration) { return Action.scaleBy(x, 0.0, duration); } /** @@ -252,7 +289,7 @@ export class Action { * * This action is reversible. */ - static scaleYBy(y, duration) { + static scaleByY(y, duration) { return Action.scaleBy(0.0, y, duration); } static scaleTo(x, y, duration) { @@ -275,7 +312,7 @@ export class Action { * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - static scaleXTo(x, duration) { + static scaleToX(x, duration) { return new ScaleToAction(x, undefined, duration); } /** @@ -284,7 +321,7 @@ export class Action { * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - static scaleYTo(y, duration) { + static scaleToY(y, duration) { return new ScaleToAction(undefined, y, duration); } // @@ -396,7 +433,15 @@ export class Action { static tick(deltaTimeMs, categoryMask = undefined, onErrorHandler) { ActionTicker.stepAllActionsForward(deltaTimeMs, categoryMask, onErrorHandler); } - constructor(duration, speed = 1.0, timingMode = TimingMode.linear, categoryMask = 0x1) { + constructor( + /** The duration required to complete an action. */ + duration, + /** A speed factor that modifies how fast an action runs. */ + speed = 1.0, + /** A setting that controls the speed curve of an animation. */ + timingMode = TimingMode.linear, + /** @deprecated A global category bitmask which can be used to group actions. */ + categoryMask = 0x1) { this.duration = duration; this.speed = speed; this.timingMode = timingMode; @@ -407,38 +452,104 @@ export class Action { return this.duration / this.speed; } /** - * Do first time setup here. + * @deprecated To be removed soon. Modify node and action speed directly instead. * - * Anything you return here will be available as `ticker.data`. + * Set a category mask for this action. + * Use this to tick different categories of actions separately (e.g. separate different UI). */ - _setupTicker(target, ticker) { - return undefined; + setCategory(categoryMask) { + this.categoryMask = categoryMask; + return this; } - /** Set the action's speed scale. Defaults to 1.0. */ + /** + * Set the action's speed scale. Default: `1.0`. + */ setSpeed(speed) { this.speed = speed; return this; } - /** Set a timing mode function for this action. Defaults to TimingMode.linear. */ + /** + * Adjust the speed curve of an animation. Default: `TimingMode.linear`. + * + * @see {TimingMode} + */ setTimingMode(timingMode) { this.timingMode = timingMode; return this; } /** - * Set a category mask for this action. + * Sets the speed curve of the action to linear pacing (the default). Linear pacing causes an + * animation to occur evenly over its duration. * - * Use this to tick different categories of actions separately (e.g. separate different UI). + * @see {TimingMode.linear} + */ + linear() { + return this.setTimingMode(TimingMode.linear); + } + /** + * Sets the speed curve of the action to the default ease-in pacing. Ease-in pacing causes the + * animation to begin slowly and then speed up as it progresses. * - * @deprecated use speed instead + * @see {Action.DefaultTimingModeEaseIn} */ - setCategory(categoryMask) { - this.categoryMask = categoryMask; - return this; + easeIn() { + return this.setTimingMode(Action.DefaultTimingModeEaseIn); + } + /** + * Sets the speed curve of the action to the default ease-out pacing. Ease-out pacing causes the + * animation to begin quickly and then slow as it completes. + * + * @see {Action.DefaultTimingModeEaseOut} + */ + easeOut() { + return this.setTimingMode(Action.DefaultTimingModeEaseOut); + } + /** + * Sets the speed curve of the action to the default ease-in, ease-out pacing. Ease-in, ease-out + * pacing causes the animation to begin slowly, accelerate through the middle of its duration, + * and then slow again before completing. + * + * @see {Action.DefaultTimingModeEaseInOut} + */ + easeInOut() { + return this.setTimingMode(Action.DefaultTimingModeEaseInOut); + } + /** + * Do first time setup here. + * + * Anything you return here will be available as `ticker.data`. + */ + _setupTicker(target, ticker) { + return undefined; } } // // ----------------- Global Settings: ----------------- // +/** + * Default timing mode used for ease-in pacing. + * + * Set this to update the default `easeIn()` timing mode. + * + * @see TimingMode.easeInSine - Default value. + */ +Action.DefaultTimingModeEaseIn = TimingMode.easeInSine; +/** + * Default timing mode used for ease-out pacing. + * + * Set this to update the default `easeOut()` timing mode. + * + * @see TimingMode.easeOutSine - Default value. + */ +Action.DefaultTimingModeEaseOut = TimingMode.easeOutSine; +/** + * Default timing mode used for ease-in, ease-out pacing. + * + * Set this to update the default `easeInOut()` timing mode. + * + * @see TimingMode.easeInOutSine - Default value. + */ +Action.DefaultTimingModeEaseInOut = TimingMode.easeInOutSine; /** All currently running actions. */ Action._actions = []; // @@ -658,6 +769,102 @@ class SpeedByAction extends Action { return new SpeedByAction(-this._speed, this.duration); } } +class FollowPathAction extends Action { + constructor(path, duration, asOffset, orientToPath, fixedSpeed) { + super(duration); + this.asOffset = asOffset; + this.orientToPath = orientToPath; + this.fixedSpeed = fixedSpeed; + this.path = path; + this.lastIndex = path.length - 1; + // Precalculate segment lengths, if needed. + if (orientToPath || fixedSpeed) { + const [totalDist, segmentLengths] = FollowPathAction.getLength(path); + this.segmentLengths = segmentLengths; + if (fixedSpeed) { + this.segmentWeights = segmentLengths.map(v => v / (totalDist || 1)); + } + } + } + // ----- Static helpers: ----- + static getPath(path) { + return Array.isArray(path) ? [...path] : [...path.points]; + } + static getLength(path) { + let totalLength = 0; + const segmentLengths = []; + for (let i = 0; i < path.length - 1; i++) { + const directionX = path[i + 1].x - path[i].x; + const directionY = path[i + 1].y - path[i].y; + const length = Math.sqrt(directionX * directionX + directionY * directionY); + segmentLengths.push(length); + totalLength += length; + } + return [totalLength, segmentLengths]; + } + // ----- Methods: ----- + updateAction(target, progress, progressDelta, ticker) { + var _a; + if (this.lastIndex < 0) { + return; // Empty path. + } + const [index, t] = this.fixedSpeed + ? this._getFixedSpeedProgress(progress) + : this._getDynamicSpeedProgress(progress); + const startPoint = this.path[index]; + const endPoint = (_a = this.path[index + 1]) !== null && _a !== void 0 ? _a : startPoint; + target.position.set(ticker.data.x + startPoint.x + (endPoint.x - startPoint.x) * t, ticker.data.y + startPoint.y + (endPoint.y - startPoint.y) * t); + if (this.orientToPath) { + const length = this.segmentLengths[index] || 1; + const ndx = (endPoint.x - startPoint.x) / length; + const ndy = (endPoint.y - startPoint.y) / length; + const rotation = HALF_PI + Math.atan2(ndy, ndx); + target.rotation = rotation; + } + } + reversed() { + return new FollowPathAction(this._reversePath(), this.duration, this.asOffset, this.orientToPath, this.fixedSpeed) + .setTimingMode(this.timingMode) + .setSpeed(this.speed); + } + _setupTicker(target) { + return { + x: this.asOffset ? target.x : 0, + y: this.asOffset ? target.y : 0, + }; + } + _reversePath() { + if (this.asOffset && this.path.length > 0) { + // Calculate the relative delta offset when first and last are flipped. + const first = this.path[0], last = this.path[this.path.length - 1]; + const dx = last.x + first.x, dy = last.y + first.y; + return this.path.map(({ x, y }) => ({ x: x - dx, y: y - dy })).reverse(); + } + // Absolute path is the path backwards. + return [...this.path].reverse(); + } + _getDynamicSpeedProgress(progress) { + const index = Math.max(Math.min(Math.floor(progress * this.lastIndex), this.lastIndex - 1), 0); + const lastIndexNonZero = this.lastIndex || 1; + const t = (progress - index / lastIndexNonZero) * lastIndexNonZero; + return [index, t]; + } + _getFixedSpeedProgress(progress) { + let remainingProgress = progress; + let index = 0; + let t = 0; + for (let i = 0; i < this.lastIndex; i++) { + const segmentWeight = this.segmentWeights[i]; + if (segmentWeight > remainingProgress || i === this.lastIndex - 1) { + t = remainingProgress / segmentWeight || 1; + break; + } + remainingProgress -= segmentWeight; + index++; + } + return [index, t]; + } +} class RotateToAction extends Action { constructor(rotation, duration) { super(duration); @@ -861,9 +1068,14 @@ class ActionTicker { } catch (error) { // Isolate individual action errors. - if (onErrorHandler !== undefined) { + if (onErrorHandler === undefined) { + console.error('Action failed with error: ', error); + } + else { onErrorHandler(error); } + // Remove offending ticker. + ActionTicker.removeAction(actionTicker); } } } diff --git a/dist/Action.js.map b/dist/Action.js.map index 466b215..8e05e4b 100644 --- a/dist/Action.js.map +++ b/dist/Action.js.map @@ -1 +1 @@ -{"version":3,"file":"Action.js","sourceRoot":"","sources":["../src/Action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Action.js","sourceRoot":"","sources":["../src/Action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 396fd8e..0d7d59f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pixijs-actions", - "version": "0.9.0", + "version": "1.0.0", "author": "Reece Como ", "authors": [ "Reece Como ", diff --git a/src/Action.ts b/src/Action.ts index 9e935c9..1c11908 100644 --- a/src/Action.ts +++ b/src/Action.ts @@ -6,6 +6,7 @@ import { getIsPaused, getSpeed } from './util'; const EPSILON = 0.0000000001; const EPSILON_ONE = 1 - EPSILON; const DEG_TO_RAD = Math.PI / 180; +const HALF_PI = Math.PI / 2; /** Time measured in seconds. */ type TimeInterval = number; @@ -19,6 +20,11 @@ interface VectorLike { y: number; } +/** Any object containing an array of points. */ +interface PathLike { + points: VectorLike[]; +} + // // ----- Action: ----- // @@ -38,6 +44,33 @@ export abstract class Action { // ----------------- Global Settings: ----------------- // + /** + * Default timing mode used for ease-in pacing. + * + * Set this to update the default `easeIn()` timing mode. + * + * @see TimingMode.easeInSine - Default value. + */ + public static DefaultTimingModeEaseIn = TimingMode.easeInSine; + + /** + * Default timing mode used for ease-out pacing. + * + * Set this to update the default `easeOut()` timing mode. + * + * @see TimingMode.easeOutSine - Default value. + */ + public static DefaultTimingModeEaseOut = TimingMode.easeOutSine; + + /** + * Default timing mode used for ease-in, ease-out pacing. + * + * Set this to update the default `easeInOut()` timing mode. + * + * @see TimingMode.easeInOutSine - Default value. + */ + public static DefaultTimingModeEaseInOut = TimingMode.easeInOutSine; + /** All currently running actions. */ protected static readonly _actions: Action[] = []; @@ -211,6 +244,57 @@ export abstract class Action { return new MoveToAction(undefined, y, duration); } + // + // ----------------- Custom Path Actions: ----------------- + // + + /** + * Creates an action that moves the node along a path, optionally orienting the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same duration. + * + * @param path A path to follow, or an object containing an array of points called `points`. + * @param duration The duration of the animation. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath When true, the node’s rotation turns to follow the path. + * @param fixedSpeed When true, the node's speed is consistent across different length segments. + */ + public static follow( + path: VectorLike[] | PathLike, + duration: number, + asOffset: boolean = true, + orientToPath: boolean = true, + fixedSpeed: boolean = true, + ): Action { + const _path = FollowPathAction.getPath(path); + return new FollowPathAction(_path, duration, asOffset, orientToPath, fixedSpeed); + } + + /** + * Creates an action that moves the node along a path at a specified speed, optionally orienting + * the node to the path. + * + * This action is reversible; the resulting action creates a reversed path and then follows it, + * with the same speed. + * + * @param path A path to follow. + * @param speed The velocity at which the node should move in world units per second. + * @param asOffset When true, the path is relative to the node's current position. + * @param orientToPath If true, the node’s rotation turns to follow the path. + */ + public static followAtSpeed( + path: VectorLike[] | PathLike, + speed: number, + asOffset: boolean = true, + orientToPath: boolean = true, + ): Action { + const _path = FollowPathAction.getPath(path); + const _length = FollowPathAction.getLength(_path); + + return new FollowPathAction(_path, _length[0] / speed, asOffset, orientToPath, true); + } + // // ----------------- Rotation Actions: ----------------- // @@ -308,7 +392,7 @@ export abstract class Action { * * This action is reversible. */ - public static scaleXBy(x: number, duration: TimeInterval): Action { + public static scaleByX(x: number, duration: TimeInterval): Action { return Action.scaleBy(x, 0.0, duration); } @@ -317,7 +401,7 @@ export abstract class Action { * * This action is reversible. */ - public static scaleYBy(y: number, duration: TimeInterval): Action { + public static scaleByY(y: number, duration: TimeInterval): Action { return Action.scaleBy(0.0, y, duration); } @@ -351,7 +435,7 @@ export abstract class Action { * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - public static scaleXTo(x: number, duration: TimeInterval): Action { + public static scaleToX(x: number, duration: TimeInterval): Action { return new ScaleToAction(x, undefined, duration); } @@ -361,7 +445,7 @@ export abstract class Action { * This action is not reversible; the reverse of this action has the same duration but does not * change anything. */ - public static scaleYTo(y: number, duration: TimeInterval): Action { + public static scaleToY(y: number, duration: TimeInterval): Action { return new ScaleToAction(undefined, y, duration); } @@ -469,7 +553,7 @@ export abstract class Action { * * This action is not reversible; the reverse action executes the same block. */ - public static customAction(duration: number, stepFn: (target: TargetNode, x: number) => void): Action { + public static customAction(duration: number, stepFn: (target: TargetNode, t: number, dt: number) => void): Action { return new CustomAction(duration, stepFn); } @@ -489,9 +573,13 @@ export abstract class Action { } public constructor( + /** The duration required to complete an action. */ public readonly duration: TimeInterval, + /** A speed factor that modifies how fast an action runs. */ public speed: number = 1.0, + /** A setting that controls the speed curve of an animation. */ public timingMode: TimingModeFn = TimingMode.linear, + /** @deprecated A global category bitmask which can be used to group actions. */ public categoryMask: number = 0x1, ) {} @@ -530,36 +618,82 @@ export abstract class Action { public abstract reversed(): Action; /** - * Do first time setup here. + * @deprecated To be removed soon. Modify node and action speed directly instead. * - * Anything you return here will be available as `ticker.data`. + * Set a category mask for this action. + * Use this to tick different categories of actions separately (e.g. separate different UI). */ - protected _setupTicker(target: TargetNode, ticker: ActionTicker): any { - return undefined; + public setCategory(categoryMask: number): this { + this.categoryMask = categoryMask; + return this; } - /** Set the action's speed scale. Defaults to 1.0. */ + /** + * Set the action's speed scale. Default: `1.0`. + */ public setSpeed(speed: number): this { this.speed = speed; return this; } - /** Set a timing mode function for this action. Defaults to TimingMode.linear. */ + /** + * Adjust the speed curve of an animation. Default: `TimingMode.linear`. + * + * @see {TimingMode} + */ public setTimingMode(timingMode: TimingModeFn): this { this.timingMode = timingMode; return this; } /** - * Set a category mask for this action. + * Sets the speed curve of the action to linear pacing (the default). Linear pacing causes an + * animation to occur evenly over its duration. * - * Use this to tick different categories of actions separately (e.g. separate different UI). + * @see {TimingMode.linear} + */ + public linear(): this { + return this.setTimingMode(TimingMode.linear); + } + + /** + * Sets the speed curve of the action to the default ease-in pacing. Ease-in pacing causes the + * animation to begin slowly and then speed up as it progresses. * - * @deprecated use speed instead + * @see {Action.DefaultTimingModeEaseIn} */ - public setCategory(categoryMask: number): this { - this.categoryMask = categoryMask; - return this; + public easeIn(): this { + return this.setTimingMode(Action.DefaultTimingModeEaseIn); + } + + /** + * Sets the speed curve of the action to the default ease-out pacing. Ease-out pacing causes the + * animation to begin quickly and then slow as it completes. + * + * @see {Action.DefaultTimingModeEaseOut} + */ + public easeOut(): this { + return this.setTimingMode(Action.DefaultTimingModeEaseOut); + } + + /** + * Sets the speed curve of the action to the default ease-in, ease-out pacing. Ease-in, ease-out + * pacing causes the animation to begin slowly, accelerate through the middle of its duration, + * and then slow again before completing. + * + * @see {Action.DefaultTimingModeEaseInOut} + */ + public easeInOut(): this { + return this.setTimingMode(Action.DefaultTimingModeEaseInOut); + } + + /** + * Do first time setup here. + * + * Anything you return here will be available as `ticker.data`. + */ + protected _setupTicker(target: TargetNode, ticker: ActionTicker): any { + return undefined; } } @@ -869,6 +1003,145 @@ class SpeedByAction extends Action { } } +class FollowPathAction extends Action { + protected readonly path: VectorLike[]; + protected readonly lastIndex: number; + protected readonly segmentLengths!: number[]; + protected readonly segmentWeights!: number[]; + + public constructor( + path: VectorLike[], + duration: number, + protected readonly asOffset: boolean, + protected readonly orientToPath: boolean, + protected readonly fixedSpeed: boolean, + ) { + super(duration); + this.path = path; + this.lastIndex = path.length - 1; + + // Precalculate segment lengths, if needed. + if (orientToPath || fixedSpeed) { + const [totalDist, segmentLengths] = FollowPathAction.getLength(path); + this.segmentLengths = segmentLengths; + if (fixedSpeed) { + this.segmentWeights = segmentLengths.map(v => v / (totalDist || 1)); + } + } + } + + // ----- Static helpers: ----- + + public static getPath(path: VectorLike[] | { points: VectorLike[] }): VectorLike[] { + return Array.isArray(path) ? [...path] : [...path.points]; + } + + public static getLength(path: VectorLike[]): [length: number, segmentLengths: number[]] { + let totalLength = 0; + const segmentLengths: number[] = []; + + for (let i = 0; i < path.length - 1; i++) { + const directionX = path[i + 1]!.x - path[i]!.x; + const directionY = path[i + 1]!.y - path[i]!.y; + const length = Math.sqrt(directionX * directionX + directionY * directionY); + + segmentLengths.push(length); + totalLength += length; + } + + return [totalLength, segmentLengths]; + } + + // ----- Methods: ----- + + public updateAction(target: any, progress: number, progressDelta: number, ticker: any): void { + if (this.lastIndex < 0) { + return; // Empty path. + } + + const [index, t] = this.fixedSpeed + ? this._getFixedSpeedProgress(progress) + : this._getDynamicSpeedProgress(progress); + + const startPoint = this.path[index]!; + const endPoint = this.path[index + 1] ?? startPoint; + + target.position.set( + ticker.data.x + startPoint.x + (endPoint.x - startPoint.x) * t, + ticker.data.y + startPoint.y + (endPoint.y - startPoint.y) * t + ); + + if (this.orientToPath) { + const length = this.segmentLengths[index]! || 1; + const ndx = (endPoint.x - startPoint.x) / length; + const ndy = (endPoint.y - startPoint.y) / length; + const rotation = HALF_PI + Math.atan2(ndy, ndx); + + target.rotation = rotation; + } + } + + public reversed(): Action { + return new FollowPathAction( + this._reversePath(), + this.duration, + this.asOffset, + this.orientToPath, + this.fixedSpeed, + ) + .setTimingMode(this.timingMode) + .setSpeed(this.speed); + } + + protected _setupTicker(target: any): any { + return { + x: this.asOffset ? target.x : 0, + y: this.asOffset ? target.y : 0, + }; + } + + protected _reversePath(): VectorLike[] { + if (this.asOffset && this.path.length > 0) { + // Calculate the relative delta offset when first and last are flipped. + const first = this.path[0]!, last = this.path[this.path.length - 1]!; + const dx = last.x + first.x, dy = last.y + first.y; + + return this.path.map(({x, y}) => ({ x: x - dx, y: y - dy })).reverse(); + } + + // Absolute path is the path backwards. + return [...this.path].reverse(); + } + + protected _getDynamicSpeedProgress(progress: number): [index: number, t: number] { + const index = Math.max(Math.min(Math.floor(progress * this.lastIndex), this.lastIndex - 1), 0); + const lastIndexNonZero = this.lastIndex || 1; + const t = (progress - index / lastIndexNonZero) * lastIndexNonZero; + + return [index, t]; + } + + protected _getFixedSpeedProgress(progress: number): [index: number, t: number] { + let remainingProgress = progress; + let index = 0; + let t = 0; + + for (let i = 0; i < this.lastIndex; i++) { + const segmentWeight = this.segmentWeights[i]!; + + if (segmentWeight! > remainingProgress || i === this.lastIndex - 1) { + t = remainingProgress / segmentWeight || 1; + break; + } + + remainingProgress -= segmentWeight; + index++; + } + + return [index, t]; + } +} + class RotateToAction extends Action { public constructor( protected readonly rotation: number, @@ -1145,9 +1418,15 @@ class ActionTicker { } catch (error) { // Isolate individual action errors. - if (onErrorHandler !== undefined) { + if (onErrorHandler === undefined) { + console.error('Action failed with error: ', error); + } + else { onErrorHandler(error); } + + // Remove offending ticker. + ActionTicker.removeAction(actionTicker); } } }