diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/prepare/src/BasePrepare.js b/packages/prepare/src/BasePrepare.js index 08c9d6c..8979870 100644 --- a/packages/prepare/src/BasePrepare.js +++ b/packages/prepare/src/BasePrepare.js @@ -161,7 +161,7 @@ if (!this.ticking) { this.ticking = true; - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } else if (done) @@ -231,7 +231,7 @@ else { // if we are not finished, on the next rAF do this again - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } @@ -308,7 +308,7 @@ { if (this.ticking) { - Ticker.shared.remove(this.tick, this); + Ticker.system.remove(this.tick, this); } this.ticking = false; this.addHooks = null; diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/prepare/src/BasePrepare.js b/packages/prepare/src/BasePrepare.js index 08c9d6c..8979870 100644 --- a/packages/prepare/src/BasePrepare.js +++ b/packages/prepare/src/BasePrepare.js @@ -161,7 +161,7 @@ if (!this.ticking) { this.ticking = true; - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } else if (done) @@ -231,7 +231,7 @@ else { // if we are not finished, on the next rAF do this again - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } @@ -308,7 +308,7 @@ { if (this.ticking) { - Ticker.shared.remove(this.tick, this); + Ticker.system.remove(this.tick, this); } this.ticking = false; this.addHooks = null; diff --git a/packages/prepare/test/BasePrepare.js b/packages/prepare/test/BasePrepare.js index de93a2b..4c6fff8 100644 --- a/packages/prepare/test/BasePrepare.js +++ b/packages/prepare/test/BasePrepare.js @@ -159,7 +159,7 @@ prep.destroy(); }); - it('should attach to SharedTicker', function (done) + it('should attach to the system ticker', function (done) { const prep = new BasePrepare(); diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/prepare/src/BasePrepare.js b/packages/prepare/src/BasePrepare.js index 08c9d6c..8979870 100644 --- a/packages/prepare/src/BasePrepare.js +++ b/packages/prepare/src/BasePrepare.js @@ -161,7 +161,7 @@ if (!this.ticking) { this.ticking = true; - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } else if (done) @@ -231,7 +231,7 @@ else { // if we are not finished, on the next rAF do this again - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } @@ -308,7 +308,7 @@ { if (this.ticking) { - Ticker.shared.remove(this.tick, this); + Ticker.system.remove(this.tick, this); } this.ticking = false; this.addHooks = null; diff --git a/packages/prepare/test/BasePrepare.js b/packages/prepare/test/BasePrepare.js index de93a2b..4c6fff8 100644 --- a/packages/prepare/test/BasePrepare.js +++ b/packages/prepare/test/BasePrepare.js @@ -159,7 +159,7 @@ prep.destroy(); }); - it('should attach to SharedTicker', function (done) + it('should attach to the system ticker', function (done) { const prep = new BasePrepare(); diff --git a/packages/ticker/src/Ticker.js b/packages/ticker/src/Ticker.js index 8e39e78..2546cee 100644 --- a/packages/ticker/src/Ticker.js +++ b/packages/ticker/src/Ticker.js @@ -537,11 +537,13 @@ } /** - * The shared ticker instance used by {@link PIXI.AnimatedSprite}. - * and by {@link PIXI.interaction.InteractionManager}. - * The property {@link PIXI.Ticker#autoStart} is set to `true` - * for this instance. Please follow the examples for usage, including - * how to opt-out of auto-starting the shared ticker. + * The shared ticker instance used by {@link PIXI.AnimatedSprite} and by + * {@link PIXI.VideoResource} to update animation frames / video textures. + * + * It may also be used by {@link PIXI.Application} if created with the `sharedTicker` option property set to true. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * Please follow the examples for usage, including how to opt-out of auto-starting the shared ticker. * * @example * let ticker = PIXI.Ticker.shared; @@ -558,7 +560,6 @@ * // You may use the shared ticker to render... * let renderer = PIXI.autoDetectRenderer(800, 600); * let stage = new PIXI.Container(); - * let interactionManager = PIXI.interaction.InteractionManager(renderer); * document.body.appendChild(renderer.view); * ticker.add(function (time) { * renderer.render(stage); @@ -590,4 +591,27 @@ return Ticker._shared; } + + /** + * The system ticker instance used by {@link PIXI.interaction.InteractionManager} and by + * {@link PIXI.BasePrepare} for core timing functionality that shouldn't usually need to be paused, + * unlike the `shared` ticker which drives visual animations and rendering which may want to be paused. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * + * @member {PIXI.Ticker} + * @static + */ + static get system() + { + if (!Ticker._system) + { + const system = Ticker._system = new Ticker(); + + system.autoStart = true; + system._protected = true; + } + + return Ticker._system; + } } diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/prepare/src/BasePrepare.js b/packages/prepare/src/BasePrepare.js index 08c9d6c..8979870 100644 --- a/packages/prepare/src/BasePrepare.js +++ b/packages/prepare/src/BasePrepare.js @@ -161,7 +161,7 @@ if (!this.ticking) { this.ticking = true; - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } else if (done) @@ -231,7 +231,7 @@ else { // if we are not finished, on the next rAF do this again - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } @@ -308,7 +308,7 @@ { if (this.ticking) { - Ticker.shared.remove(this.tick, this); + Ticker.system.remove(this.tick, this); } this.ticking = false; this.addHooks = null; diff --git a/packages/prepare/test/BasePrepare.js b/packages/prepare/test/BasePrepare.js index de93a2b..4c6fff8 100644 --- a/packages/prepare/test/BasePrepare.js +++ b/packages/prepare/test/BasePrepare.js @@ -159,7 +159,7 @@ prep.destroy(); }); - it('should attach to SharedTicker', function (done) + it('should attach to the system ticker', function (done) { const prep = new BasePrepare(); diff --git a/packages/ticker/src/Ticker.js b/packages/ticker/src/Ticker.js index 8e39e78..2546cee 100644 --- a/packages/ticker/src/Ticker.js +++ b/packages/ticker/src/Ticker.js @@ -537,11 +537,13 @@ } /** - * The shared ticker instance used by {@link PIXI.AnimatedSprite}. - * and by {@link PIXI.interaction.InteractionManager}. - * The property {@link PIXI.Ticker#autoStart} is set to `true` - * for this instance. Please follow the examples for usage, including - * how to opt-out of auto-starting the shared ticker. + * The shared ticker instance used by {@link PIXI.AnimatedSprite} and by + * {@link PIXI.VideoResource} to update animation frames / video textures. + * + * It may also be used by {@link PIXI.Application} if created with the `sharedTicker` option property set to true. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * Please follow the examples for usage, including how to opt-out of auto-starting the shared ticker. * * @example * let ticker = PIXI.Ticker.shared; @@ -558,7 +560,6 @@ * // You may use the shared ticker to render... * let renderer = PIXI.autoDetectRenderer(800, 600); * let stage = new PIXI.Container(); - * let interactionManager = PIXI.interaction.InteractionManager(renderer); * document.body.appendChild(renderer.view); * ticker.add(function (time) { * renderer.render(stage); @@ -590,4 +591,27 @@ return Ticker._shared; } + + /** + * The system ticker instance used by {@link PIXI.interaction.InteractionManager} and by + * {@link PIXI.BasePrepare} for core timing functionality that shouldn't usually need to be paused, + * unlike the `shared` ticker which drives visual animations and rendering which may want to be paused. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * + * @member {PIXI.Ticker} + * @static + */ + static get system() + { + if (!Ticker._system) + { + const system = Ticker._system = new Ticker(); + + system.autoStart = true; + system._protected = true; + } + + return Ticker._system; + } } diff --git a/packages/ticker/src/TickerPlugin.js b/packages/ticker/src/TickerPlugin.js index 834ac48..360581f 100644 --- a/packages/ticker/src/TickerPlugin.js +++ b/packages/ticker/src/TickerPlugin.js @@ -3,10 +3,12 @@ /** * Middleware for for Application Ticker. + * * @example * import {TickerPlugin} from '@pixi/ticker'; * import {Application} from '@pixi/app'; * Application.registerPlugin(TickerPlugin); + * * @class * @memberof PIXI */ @@ -14,6 +16,7 @@ { /** * Initialize the plugin with scope of application instance + * * @static * @private * @param {object} [options] - See application options @@ -49,6 +52,7 @@ /** * Convenience method for stopping the render. + * * @method PIXI.Application#stop */ this.stop = () => @@ -58,6 +62,7 @@ /** * Convenience method for starting the render. + * * @method PIXI.Application#start */ this.start = () => @@ -66,7 +71,8 @@ }; /** - * Internal reference to the ticker + * Internal reference to the ticker. + * * @type {PIXI.Ticker} * @name _ticker * @memberof PIXI.Application# @@ -76,6 +82,7 @@ /** * Ticker for doing render updates. + * * @type {PIXI.Ticker} * @name ticker * @memberof PIXI.Application# @@ -91,7 +98,8 @@ } /** - * Clean up the ticker, scoped to application + * Clean up the ticker, scoped to application. + * * @static * @private */ diff --git a/packages/interaction/src/InteractionManager.js b/packages/interaction/src/InteractionManager.js index f8ba5e0..4f33499 100644 --- a/packages/interaction/src/InteractionManager.js +++ b/packages/interaction/src/InteractionManager.js @@ -711,7 +711,7 @@ return; } - Ticker.shared.add(this.update, this, UPDATE_PRIORITY.INTERACTION); + Ticker.system.add(this.update, this, UPDATE_PRIORITY.INTERACTION); if (window.navigator.msPointerEnabled) { @@ -774,7 +774,7 @@ return; } - Ticker.shared.remove(this.update, this); + Ticker.system.remove(this.update, this); if (window.navigator.msPointerEnabled) { @@ -819,7 +819,7 @@ /** * Updates the state of interactive objects. - * Invoked by a throttled ticker update from {@link PIXI.Ticker.shared}. + * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}. * * @param {number} deltaTime - time delta since last tick */ diff --git a/packages/interaction/test/MockPointer.js b/packages/interaction/test/MockPointer.js index 67ff7e7..ca2f554 100644 --- a/packages/interaction/test/MockPointer.js +++ b/packages/interaction/test/MockPointer.js @@ -1,7 +1,7 @@ const { CanvasRenderer } = require('@pixi/canvas-renderer'); const { Ticker } = require('@pixi/ticker'); const { Rectangle } = require('@pixi/math'); -const { shared } = Ticker; +const { system } = Ticker; /** * Use this to mock mouse/touch/pointer events @@ -39,7 +39,7 @@ this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; this.interaction.supportsTouchEvents = true; - shared.remove(this.interaction.update, this.interaction); + system.remove(this.interaction.update, this.interaction); } /** diff --git a/packages/prepare/src/BasePrepare.js b/packages/prepare/src/BasePrepare.js index 08c9d6c..8979870 100644 --- a/packages/prepare/src/BasePrepare.js +++ b/packages/prepare/src/BasePrepare.js @@ -161,7 +161,7 @@ if (!this.ticking) { this.ticking = true; - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } else if (done) @@ -231,7 +231,7 @@ else { // if we are not finished, on the next rAF do this again - Ticker.shared.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); + Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY); } } @@ -308,7 +308,7 @@ { if (this.ticking) { - Ticker.shared.remove(this.tick, this); + Ticker.system.remove(this.tick, this); } this.ticking = false; this.addHooks = null; diff --git a/packages/prepare/test/BasePrepare.js b/packages/prepare/test/BasePrepare.js index de93a2b..4c6fff8 100644 --- a/packages/prepare/test/BasePrepare.js +++ b/packages/prepare/test/BasePrepare.js @@ -159,7 +159,7 @@ prep.destroy(); }); - it('should attach to SharedTicker', function (done) + it('should attach to the system ticker', function (done) { const prep = new BasePrepare(); diff --git a/packages/ticker/src/Ticker.js b/packages/ticker/src/Ticker.js index 8e39e78..2546cee 100644 --- a/packages/ticker/src/Ticker.js +++ b/packages/ticker/src/Ticker.js @@ -537,11 +537,13 @@ } /** - * The shared ticker instance used by {@link PIXI.AnimatedSprite}. - * and by {@link PIXI.interaction.InteractionManager}. - * The property {@link PIXI.Ticker#autoStart} is set to `true` - * for this instance. Please follow the examples for usage, including - * how to opt-out of auto-starting the shared ticker. + * The shared ticker instance used by {@link PIXI.AnimatedSprite} and by + * {@link PIXI.VideoResource} to update animation frames / video textures. + * + * It may also be used by {@link PIXI.Application} if created with the `sharedTicker` option property set to true. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * Please follow the examples for usage, including how to opt-out of auto-starting the shared ticker. * * @example * let ticker = PIXI.Ticker.shared; @@ -558,7 +560,6 @@ * // You may use the shared ticker to render... * let renderer = PIXI.autoDetectRenderer(800, 600); * let stage = new PIXI.Container(); - * let interactionManager = PIXI.interaction.InteractionManager(renderer); * document.body.appendChild(renderer.view); * ticker.add(function (time) { * renderer.render(stage); @@ -590,4 +591,27 @@ return Ticker._shared; } + + /** + * The system ticker instance used by {@link PIXI.interaction.InteractionManager} and by + * {@link PIXI.BasePrepare} for core timing functionality that shouldn't usually need to be paused, + * unlike the `shared` ticker which drives visual animations and rendering which may want to be paused. + * + * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance. + * + * @member {PIXI.Ticker} + * @static + */ + static get system() + { + if (!Ticker._system) + { + const system = Ticker._system = new Ticker(); + + system.autoStart = true; + system._protected = true; + } + + return Ticker._system; + } } diff --git a/packages/ticker/src/TickerPlugin.js b/packages/ticker/src/TickerPlugin.js index 834ac48..360581f 100644 --- a/packages/ticker/src/TickerPlugin.js +++ b/packages/ticker/src/TickerPlugin.js @@ -3,10 +3,12 @@ /** * Middleware for for Application Ticker. + * * @example * import {TickerPlugin} from '@pixi/ticker'; * import {Application} from '@pixi/app'; * Application.registerPlugin(TickerPlugin); + * * @class * @memberof PIXI */ @@ -14,6 +16,7 @@ { /** * Initialize the plugin with scope of application instance + * * @static * @private * @param {object} [options] - See application options @@ -49,6 +52,7 @@ /** * Convenience method for stopping the render. + * * @method PIXI.Application#stop */ this.stop = () => @@ -58,6 +62,7 @@ /** * Convenience method for starting the render. + * * @method PIXI.Application#start */ this.start = () => @@ -66,7 +71,8 @@ }; /** - * Internal reference to the ticker + * Internal reference to the ticker. + * * @type {PIXI.Ticker} * @name _ticker * @memberof PIXI.Application# @@ -76,6 +82,7 @@ /** * Ticker for doing render updates. + * * @type {PIXI.Ticker} * @name ticker * @memberof PIXI.Application# @@ -91,7 +98,8 @@ } /** - * Clean up the ticker, scoped to application + * Clean up the ticker, scoped to application. + * * @static * @private */ diff --git a/packages/ticker/test/Ticker.js b/packages/ticker/test/Ticker.js index 8a6637e..26cfb95 100644 --- a/packages/ticker/test/Ticker.js +++ b/packages/ticker/test/Ticker.js @@ -1,5 +1,5 @@ const { Ticker, UPDATE_PRIORITY } = require('../'); -const { shared } = Ticker; +const { shared, system } = Ticker; describe('PIXI.Ticker', function () { @@ -31,6 +31,7 @@ { expect(Ticker).to.be.a.function; expect(shared).to.be.an.instanceof(Ticker); + expect(system).to.be.an.instanceof(Ticker); }); it('should create a new ticker and destroy it', function () @@ -64,6 +65,16 @@ expect(shared.started).to.be.true; }); + it('should protect destroying system ticker', function () + { + const listener = sinon.spy(); + + system.add(listener); // needed to autoStart + system.destroy(); + expect(system._head).to.not.be.null; + expect(system.started).to.be.true; + }); + it('should add and remove listener', function () { const listener = sinon.spy();