diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/src/core/utils/eventTarget.js b/src/core/utils/eventTarget.js deleted file mode 100644 index 95d23ca..0000000 --- a/src/core/utils/eventTarget.js +++ /dev/null @@ -1,211 +0,0 @@ -var EventData = require('./EventData'); - -var tempEventObject = new EventData(null, null, {}); - -/** - * Mixins event emitter functionality to an object. - * - * @mixin - * @memberof PIXI.utils - * @example - * function MyEmitter() {} - * - * eventTarget.mixin(MyEmitter.prototype); - * - * var em = new MyEmitter(); - * em.emit('eventName', 'some data', 'some more data', {}, null, ...); - */ -function eventTarget(obj) -{ - /** - * Return a list of assigned event listeners. - * - * @memberof eventTarget - * @param eventName {string} The events that should be listed. - * @return {Array} An array of listener functions - */ - obj.listeners = function listeners(eventName) - { - this._listeners = this._listeners || {}; - - return this._listeners[eventName] ? this._listeners[eventName].slice() : []; - }; - - /** - * Emit an event to all registered event listeners. - * - * @memberof eventTarget - * @alias dispatchEvent - * @param eventName {string} The name of the event. - * @return {boolean} Indication if we've emitted an event. - */ - obj.emit = obj.dispatchEvent = function emit(eventName, data) - { - this._listeners = this._listeners || {}; - - // fast return when there are no listeners - if (!this._listeners[eventName]) - { - return; - } - - //backwards compat with old method ".emit({ type: 'something' })" - //lets not worry about old ways of using stuff for v3 - /* - if (typeof eventName === 'object') - { - data = eventName; - eventName = eventName.type; - } - */ - - //ensure we are using a real pixi event - //instead of creating a new object lets use an the temp one ( save new creation for each event ) - if ( !data || !data.__isEventObject ) - { - tempEventObject.target= this; - tempEventObject.type = eventName; - tempEventObject.data = data; - - data = tempEventObject; - } - - //iterate the listeners - var listeners = this._listeners[eventName].slice(0), - length = listeners.length, - fn = listeners[0], - i; - - for (i = 0; i < length; fn = listeners[++i]) - { - //call the event listener scope is currently determined by binding the listener - //way faster than 'call' - fn(data); - - //if "stopImmediatePropagation" is called, stop calling sibling events - if (data.stoppedImmediate) - { - return this; - } - } - - //if "stopPropagation" is called then don't bubble the event - if (data.stopped) - { - return this; - } - - return this; - }; - - /** - * Register a new EventListener for the given event. - * - * @memberof eventTarget - * @alias addEventListener - * @param eventName {string} Name of the event. - * @param callback {Functon} fn Callback function. - */ - obj.on = obj.addEventListener = function on(eventName, fn) - { - this._listeners = this._listeners || {}; - - (this._listeners[eventName] = this._listeners[eventName] || []) - .push(fn); - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @memberof eventTarget - * @param eventName {string} Name of the event. - * @param callback {Function} Callback function. - */ - obj.once = function once(eventName, fn) - { - this._listeners = this._listeners || {}; - - var self = this; - function onceHandlerWrapper() - { - fn.apply(self.off(eventName, onceHandlerWrapper), arguments); - } - onceHandlerWrapper._originalHandler = fn; - - return this.on(eventName, onceHandlerWrapper); - }; - - /** - * Remove event listeners. - * - * @memberof eventTarget - * @alias removeEventListener - * @param eventName {string} The event we want to remove. - * @param callback {Function} The listener that we need to find. - */ - obj.off = obj.removeEventListener = function off(eventName, fn) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - var list = this._listeners[eventName], - i = fn ? list.length : 0; - - while (i-- > 0) - { - if (list[i] === fn || list[i]._originalHandler === fn) - { - list.splice(i, 1); - } - } - - if (list.length === 0) - { - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @memberof eventTarget - * @param eventName {string} The event you want to remove all listeners for. - */ - obj.removeAllListeners = function removeAllListeners(eventName) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - - return this; - }; -} - -module.exports = { - /** - * Mixes in the properties of the eventTarget into another object - * - * @param object {object} The obj to mix into - */ - mixin: function mixin(obj) - { - eventTarget(obj); - } -}; diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/src/core/utils/eventTarget.js b/src/core/utils/eventTarget.js deleted file mode 100644 index 95d23ca..0000000 --- a/src/core/utils/eventTarget.js +++ /dev/null @@ -1,211 +0,0 @@ -var EventData = require('./EventData'); - -var tempEventObject = new EventData(null, null, {}); - -/** - * Mixins event emitter functionality to an object. - * - * @mixin - * @memberof PIXI.utils - * @example - * function MyEmitter() {} - * - * eventTarget.mixin(MyEmitter.prototype); - * - * var em = new MyEmitter(); - * em.emit('eventName', 'some data', 'some more data', {}, null, ...); - */ -function eventTarget(obj) -{ - /** - * Return a list of assigned event listeners. - * - * @memberof eventTarget - * @param eventName {string} The events that should be listed. - * @return {Array} An array of listener functions - */ - obj.listeners = function listeners(eventName) - { - this._listeners = this._listeners || {}; - - return this._listeners[eventName] ? this._listeners[eventName].slice() : []; - }; - - /** - * Emit an event to all registered event listeners. - * - * @memberof eventTarget - * @alias dispatchEvent - * @param eventName {string} The name of the event. - * @return {boolean} Indication if we've emitted an event. - */ - obj.emit = obj.dispatchEvent = function emit(eventName, data) - { - this._listeners = this._listeners || {}; - - // fast return when there are no listeners - if (!this._listeners[eventName]) - { - return; - } - - //backwards compat with old method ".emit({ type: 'something' })" - //lets not worry about old ways of using stuff for v3 - /* - if (typeof eventName === 'object') - { - data = eventName; - eventName = eventName.type; - } - */ - - //ensure we are using a real pixi event - //instead of creating a new object lets use an the temp one ( save new creation for each event ) - if ( !data || !data.__isEventObject ) - { - tempEventObject.target= this; - tempEventObject.type = eventName; - tempEventObject.data = data; - - data = tempEventObject; - } - - //iterate the listeners - var listeners = this._listeners[eventName].slice(0), - length = listeners.length, - fn = listeners[0], - i; - - for (i = 0; i < length; fn = listeners[++i]) - { - //call the event listener scope is currently determined by binding the listener - //way faster than 'call' - fn(data); - - //if "stopImmediatePropagation" is called, stop calling sibling events - if (data.stoppedImmediate) - { - return this; - } - } - - //if "stopPropagation" is called then don't bubble the event - if (data.stopped) - { - return this; - } - - return this; - }; - - /** - * Register a new EventListener for the given event. - * - * @memberof eventTarget - * @alias addEventListener - * @param eventName {string} Name of the event. - * @param callback {Functon} fn Callback function. - */ - obj.on = obj.addEventListener = function on(eventName, fn) - { - this._listeners = this._listeners || {}; - - (this._listeners[eventName] = this._listeners[eventName] || []) - .push(fn); - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @memberof eventTarget - * @param eventName {string} Name of the event. - * @param callback {Function} Callback function. - */ - obj.once = function once(eventName, fn) - { - this._listeners = this._listeners || {}; - - var self = this; - function onceHandlerWrapper() - { - fn.apply(self.off(eventName, onceHandlerWrapper), arguments); - } - onceHandlerWrapper._originalHandler = fn; - - return this.on(eventName, onceHandlerWrapper); - }; - - /** - * Remove event listeners. - * - * @memberof eventTarget - * @alias removeEventListener - * @param eventName {string} The event we want to remove. - * @param callback {Function} The listener that we need to find. - */ - obj.off = obj.removeEventListener = function off(eventName, fn) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - var list = this._listeners[eventName], - i = fn ? list.length : 0; - - while (i-- > 0) - { - if (list[i] === fn || list[i]._originalHandler === fn) - { - list.splice(i, 1); - } - } - - if (list.length === 0) - { - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @memberof eventTarget - * @param eventName {string} The event you want to remove all listeners for. - */ - obj.removeAllListeners = function removeAllListeners(eventName) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - - return this; - }; -} - -module.exports = { - /** - * Mixes in the properties of the eventTarget into another object - * - * @param object {object} The obj to mix into - */ - mixin: function mixin(obj) - { - eventTarget(obj); - } -}; diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 69ab4e2..4dae982 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -7,8 +7,6 @@ _uid: 0, _saidHello: false, - EventData: require('./EventData'), - eventTarget: require('./eventTarget'), pluginTarget: require('./pluginTarget'), PolyK: require('./PolyK'), diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/src/core/utils/eventTarget.js b/src/core/utils/eventTarget.js deleted file mode 100644 index 95d23ca..0000000 --- a/src/core/utils/eventTarget.js +++ /dev/null @@ -1,211 +0,0 @@ -var EventData = require('./EventData'); - -var tempEventObject = new EventData(null, null, {}); - -/** - * Mixins event emitter functionality to an object. - * - * @mixin - * @memberof PIXI.utils - * @example - * function MyEmitter() {} - * - * eventTarget.mixin(MyEmitter.prototype); - * - * var em = new MyEmitter(); - * em.emit('eventName', 'some data', 'some more data', {}, null, ...); - */ -function eventTarget(obj) -{ - /** - * Return a list of assigned event listeners. - * - * @memberof eventTarget - * @param eventName {string} The events that should be listed. - * @return {Array} An array of listener functions - */ - obj.listeners = function listeners(eventName) - { - this._listeners = this._listeners || {}; - - return this._listeners[eventName] ? this._listeners[eventName].slice() : []; - }; - - /** - * Emit an event to all registered event listeners. - * - * @memberof eventTarget - * @alias dispatchEvent - * @param eventName {string} The name of the event. - * @return {boolean} Indication if we've emitted an event. - */ - obj.emit = obj.dispatchEvent = function emit(eventName, data) - { - this._listeners = this._listeners || {}; - - // fast return when there are no listeners - if (!this._listeners[eventName]) - { - return; - } - - //backwards compat with old method ".emit({ type: 'something' })" - //lets not worry about old ways of using stuff for v3 - /* - if (typeof eventName === 'object') - { - data = eventName; - eventName = eventName.type; - } - */ - - //ensure we are using a real pixi event - //instead of creating a new object lets use an the temp one ( save new creation for each event ) - if ( !data || !data.__isEventObject ) - { - tempEventObject.target= this; - tempEventObject.type = eventName; - tempEventObject.data = data; - - data = tempEventObject; - } - - //iterate the listeners - var listeners = this._listeners[eventName].slice(0), - length = listeners.length, - fn = listeners[0], - i; - - for (i = 0; i < length; fn = listeners[++i]) - { - //call the event listener scope is currently determined by binding the listener - //way faster than 'call' - fn(data); - - //if "stopImmediatePropagation" is called, stop calling sibling events - if (data.stoppedImmediate) - { - return this; - } - } - - //if "stopPropagation" is called then don't bubble the event - if (data.stopped) - { - return this; - } - - return this; - }; - - /** - * Register a new EventListener for the given event. - * - * @memberof eventTarget - * @alias addEventListener - * @param eventName {string} Name of the event. - * @param callback {Functon} fn Callback function. - */ - obj.on = obj.addEventListener = function on(eventName, fn) - { - this._listeners = this._listeners || {}; - - (this._listeners[eventName] = this._listeners[eventName] || []) - .push(fn); - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @memberof eventTarget - * @param eventName {string} Name of the event. - * @param callback {Function} Callback function. - */ - obj.once = function once(eventName, fn) - { - this._listeners = this._listeners || {}; - - var self = this; - function onceHandlerWrapper() - { - fn.apply(self.off(eventName, onceHandlerWrapper), arguments); - } - onceHandlerWrapper._originalHandler = fn; - - return this.on(eventName, onceHandlerWrapper); - }; - - /** - * Remove event listeners. - * - * @memberof eventTarget - * @alias removeEventListener - * @param eventName {string} The event we want to remove. - * @param callback {Function} The listener that we need to find. - */ - obj.off = obj.removeEventListener = function off(eventName, fn) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - var list = this._listeners[eventName], - i = fn ? list.length : 0; - - while (i-- > 0) - { - if (list[i] === fn || list[i]._originalHandler === fn) - { - list.splice(i, 1); - } - } - - if (list.length === 0) - { - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @memberof eventTarget - * @param eventName {string} The event you want to remove all listeners for. - */ - obj.removeAllListeners = function removeAllListeners(eventName) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - - return this; - }; -} - -module.exports = { - /** - * Mixes in the properties of the eventTarget into another object - * - * @param object {object} The obj to mix into - */ - mixin: function mixin(obj) - { - eventTarget(obj); - } -}; diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 69ab4e2..4dae982 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -7,8 +7,6 @@ _uid: 0, _saidHello: false, - EventData: require('./EventData'), - eventTarget: require('./eventTarget'), pluginTarget: require('./pluginTarget'), PolyK: require('./PolyK'), diff --git a/src/extras/MovieClip.js b/src/extras/MovieClip.js index 9db67ff..fccdf7c 100644 --- a/src/extras/MovieClip.js +++ b/src/extras/MovieClip.js @@ -186,10 +186,10 @@ * Updates the object transform for rendering * @private */ -MovieClip.prototype.update = function ( event ) +MovieClip.prototype.update = function (deltaTime) { - this.currentFrame += this.animationSpeed * event.data.deltaTime; + this.currentFrame += this.animationSpeed * deltaTime; var floor = Math.floor(this.currentFrame); diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/src/core/utils/eventTarget.js b/src/core/utils/eventTarget.js deleted file mode 100644 index 95d23ca..0000000 --- a/src/core/utils/eventTarget.js +++ /dev/null @@ -1,211 +0,0 @@ -var EventData = require('./EventData'); - -var tempEventObject = new EventData(null, null, {}); - -/** - * Mixins event emitter functionality to an object. - * - * @mixin - * @memberof PIXI.utils - * @example - * function MyEmitter() {} - * - * eventTarget.mixin(MyEmitter.prototype); - * - * var em = new MyEmitter(); - * em.emit('eventName', 'some data', 'some more data', {}, null, ...); - */ -function eventTarget(obj) -{ - /** - * Return a list of assigned event listeners. - * - * @memberof eventTarget - * @param eventName {string} The events that should be listed. - * @return {Array} An array of listener functions - */ - obj.listeners = function listeners(eventName) - { - this._listeners = this._listeners || {}; - - return this._listeners[eventName] ? this._listeners[eventName].slice() : []; - }; - - /** - * Emit an event to all registered event listeners. - * - * @memberof eventTarget - * @alias dispatchEvent - * @param eventName {string} The name of the event. - * @return {boolean} Indication if we've emitted an event. - */ - obj.emit = obj.dispatchEvent = function emit(eventName, data) - { - this._listeners = this._listeners || {}; - - // fast return when there are no listeners - if (!this._listeners[eventName]) - { - return; - } - - //backwards compat with old method ".emit({ type: 'something' })" - //lets not worry about old ways of using stuff for v3 - /* - if (typeof eventName === 'object') - { - data = eventName; - eventName = eventName.type; - } - */ - - //ensure we are using a real pixi event - //instead of creating a new object lets use an the temp one ( save new creation for each event ) - if ( !data || !data.__isEventObject ) - { - tempEventObject.target= this; - tempEventObject.type = eventName; - tempEventObject.data = data; - - data = tempEventObject; - } - - //iterate the listeners - var listeners = this._listeners[eventName].slice(0), - length = listeners.length, - fn = listeners[0], - i; - - for (i = 0; i < length; fn = listeners[++i]) - { - //call the event listener scope is currently determined by binding the listener - //way faster than 'call' - fn(data); - - //if "stopImmediatePropagation" is called, stop calling sibling events - if (data.stoppedImmediate) - { - return this; - } - } - - //if "stopPropagation" is called then don't bubble the event - if (data.stopped) - { - return this; - } - - return this; - }; - - /** - * Register a new EventListener for the given event. - * - * @memberof eventTarget - * @alias addEventListener - * @param eventName {string} Name of the event. - * @param callback {Functon} fn Callback function. - */ - obj.on = obj.addEventListener = function on(eventName, fn) - { - this._listeners = this._listeners || {}; - - (this._listeners[eventName] = this._listeners[eventName] || []) - .push(fn); - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @memberof eventTarget - * @param eventName {string} Name of the event. - * @param callback {Function} Callback function. - */ - obj.once = function once(eventName, fn) - { - this._listeners = this._listeners || {}; - - var self = this; - function onceHandlerWrapper() - { - fn.apply(self.off(eventName, onceHandlerWrapper), arguments); - } - onceHandlerWrapper._originalHandler = fn; - - return this.on(eventName, onceHandlerWrapper); - }; - - /** - * Remove event listeners. - * - * @memberof eventTarget - * @alias removeEventListener - * @param eventName {string} The event we want to remove. - * @param callback {Function} The listener that we need to find. - */ - obj.off = obj.removeEventListener = function off(eventName, fn) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - var list = this._listeners[eventName], - i = fn ? list.length : 0; - - while (i-- > 0) - { - if (list[i] === fn || list[i]._originalHandler === fn) - { - list.splice(i, 1); - } - } - - if (list.length === 0) - { - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @memberof eventTarget - * @param eventName {string} The event you want to remove all listeners for. - */ - obj.removeAllListeners = function removeAllListeners(eventName) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - - return this; - }; -} - -module.exports = { - /** - * Mixes in the properties of the eventTarget into another object - * - * @param object {object} The obj to mix into - */ - mixin: function mixin(obj) - { - eventTarget(obj); - } -}; diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 69ab4e2..4dae982 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -7,8 +7,6 @@ _uid: 0, _saidHello: false, - EventData: require('./EventData'), - eventTarget: require('./eventTarget'), pluginTarget: require('./pluginTarget'), PolyK: require('./PolyK'), diff --git a/src/extras/MovieClip.js b/src/extras/MovieClip.js index 9db67ff..fccdf7c 100644 --- a/src/extras/MovieClip.js +++ b/src/extras/MovieClip.js @@ -186,10 +186,10 @@ * Updates the object transform for rendering * @private */ -MovieClip.prototype.update = function ( event ) +MovieClip.prototype.update = function (deltaTime) { - this.currentFrame += this.animationSpeed * event.data.deltaTime; + this.currentFrame += this.animationSpeed * deltaTime; var floor = Math.floor(this.currentFrame); diff --git a/src/extras/Ticker.js b/src/extras/Ticker.js index d8ddfcf..e938c64 100644 --- a/src/extras/Ticker.js +++ b/src/extras/Ticker.js @@ -1,5 +1,4 @@ -var eventTarget = require('../core/utils/eventTarget'), - EventData = require('../core/utils/EventData'); +var EventEmitter = require('eventemitter3').EventEmitter; /** * A Ticker class that runs an update loop that other objects listen to @@ -9,6 +8,8 @@ */ var Ticker = function() { + EventEmitter.call(this); + this.updateBind = this.update.bind(this); /** @@ -19,13 +20,6 @@ this.active = false; /** - * the event data for this ticker to dispatch the tick event - * - * @member {EventData} - */ - this.eventData = new EventData( this, 'tick', { deltaTime:1 } ); - - /** * The deltaTime * * @member {number} @@ -57,7 +51,8 @@ this.start(); }; -eventTarget.mixin(Ticker.prototype); +Ticker.prototype = Object.create(EventEmitter.prototype); +Ticker.prototype.constructor = Ticker; /** * Starts the ticker, automatically called by the constructor @@ -111,9 +106,7 @@ this.deltaTime *= this.speed; - this.eventData.data.deltaTime = this.deltaTime; - - this.emit( 'tick', this.eventData ); + this.emit('tick', this.deltaTime); this.lastTime = currentTime; } diff --git a/package.json b/package.json index 7639364..192dd8f 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,12 @@ "test": "gulp test", "docs": "./node_modules/.bin/jsdoc -c ./gulp/util/jsdoc.conf.json" }, + "dependencies": { + "async": "^0.9.0", + "resource-loader": "^1.3.0", + "brfs": "^1.2.0", + "eventemitter3": "^0.1.6" + }, "devDependencies": { "browserify": "^8.0.2", "chai": "^1.10.0", @@ -50,11 +56,6 @@ "vinyl-source-stream": "^1.0.0", "watchify": "^2.2.1" }, - "dependencies": { - "async": "^0.9.0", - "resource-loader": "^1.3.0", - "brfs": "^1.2.0" - }, "browserify": { "transform": [ "brfs" diff --git a/src/core/display/DisplayObject.js b/src/core/display/DisplayObject.js index 5fbb708..e3115be 100644 --- a/src/core/display/DisplayObject.js +++ b/src/core/display/DisplayObject.js @@ -1,6 +1,6 @@ var math = require('../math'), - utils = require('../utils'), RenderTexture = require('../textures/RenderTexture'), + EventEmitter = require('eventemitter3').EventEmitter, _tempMatrix = new math.Matrix(); /** @@ -12,6 +12,8 @@ */ function DisplayObject() { + EventEmitter.call(this); + /** * The coordinate of the object relative to the local coordinates of the parent. * @@ -149,8 +151,8 @@ } // constructor +DisplayObject.prototype = Object.create(EventEmitter.prototype); DisplayObject.prototype.constructor = DisplayObject; -utils.eventTarget.mixin(DisplayObject.prototype); module.exports = DisplayObject; Object.defineProperties(DisplayObject.prototype, { diff --git a/src/core/renderers/SystemRenderer.js b/src/core/renderers/SystemRenderer.js index 34c8db6..bc3cebe 100644 --- a/src/core/renderers/SystemRenderer.js +++ b/src/core/renderers/SystemRenderer.js @@ -1,6 +1,7 @@ var utils = require('../utils'), math = require('../math'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * The CanvasRenderer draws the scene and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. @@ -22,6 +23,8 @@ */ function SystemRenderer(system, width, height, options) { + EventEmitter.call(this); + utils.sayHello(system); // prepare options @@ -163,11 +166,10 @@ } // constructor +SystemRenderer.prototype = Object.create(EventEmitter.prototype); SystemRenderer.prototype.constructor = SystemRenderer; module.exports = SystemRenderer; -utils.eventTarget.mixin(SystemRenderer.prototype); - Object.defineProperties(SystemRenderer.prototype, { /** * The background color to fill if not transparent diff --git a/src/core/renderers/webgl/managers/WebGLManager.js b/src/core/renderers/webgl/managers/WebGLManager.js index dfb5573..c39ad26 100644 --- a/src/core/renderers/webgl/managers/WebGLManager.js +++ b/src/core/renderers/webgl/managers/WebGLManager.js @@ -13,7 +13,7 @@ this.renderer = renderer; var self = this; - this.renderer.on('context', this._onContextChangeFn = function(){ + this.renderer.on('context', this._onContextChangeFn = function () { self.onContextChange(); diff --git a/src/core/sprites/Sprite.js b/src/core/sprites/Sprite.js index 7fa2218..896cefc 100644 --- a/src/core/sprites/Sprite.js +++ b/src/core/sprites/Sprite.js @@ -189,6 +189,9 @@ { this.scale.y = this._height / this.texture.frame.height; } + + // reset bounds + this._currentBounds = null; }; /** @@ -213,7 +216,6 @@ { if(!this._currentBounds) { - var width = this._texture._frame.width; var height = this._texture._frame.height; diff --git a/src/core/textures/BaseTexture.js b/src/core/textures/BaseTexture.js index 02a3423..767635b 100644 --- a/src/core/textures/BaseTexture.js +++ b/src/core/textures/BaseTexture.js @@ -1,11 +1,11 @@ var utils = require('../utils'), - CONST = require('../const'); + CONST = require('../const'), + EventEmitter = require('eventemitter3').EventEmitter; /** * A texture stores the information that represents an image. All textures have a base texture. * * @class - * @mixes eventTarget * @memberof PIXI * @param source {Image|Canvas} the source object of the texture. * @param [scaleMode=scaleModes.DEFAULT] {number} See {@link SCALE_MODES} for possible values @@ -13,6 +13,8 @@ */ function BaseTexture(source, scaleMode, resolution) { + EventEmitter.call(this); + this.uuid = utils.uuid(); /** @@ -155,17 +157,17 @@ */ } +BaseTexture.prototype = Object.create(EventEmitter.prototype); BaseTexture.prototype.constructor = BaseTexture; module.exports = BaseTexture; -utils.eventTarget.mixin(BaseTexture.prototype); - /** * Updates the texture on all the webgl renderers. * * @fires update */ -BaseTexture.prototype.update = function () { +BaseTexture.prototype.update = function () +{ this.emit('update', this); }; diff --git a/src/core/textures/Texture.js b/src/core/textures/Texture.js index a13962d..050d2b0 100644 --- a/src/core/textures/Texture.js +++ b/src/core/textures/Texture.js @@ -1,7 +1,7 @@ var BaseTexture = require('./BaseTexture'), VideoBaseTexture = require('./VideoBaseTexture'), TextureUvs = require('./TextureUvs'), - eventTarget = require('../utils/eventTarget'), + EventEmitter = require('eventemitter3').EventEmitter, math = require('../math'), utils = require('../utils'); @@ -18,7 +18,6 @@ * ``` * * @class - * @mixes eventTarget * @memberof PIXI * @param baseTexture {BaseTexture} The base texture source to create the texture from * @param [frame] {Rectangle} The rectangle frame of the texture to show @@ -28,6 +27,8 @@ */ function Texture(baseTexture, frame, crop, trim, rotate) { + EventEmitter.call(this); + /** * Does this Texture have any frame data assigned to it? * @@ -136,11 +137,10 @@ } } +Texture.prototype = Object.create(EventEmitter.prototype); Texture.prototype.constructor = Texture; module.exports = Texture; -eventTarget.mixin(Texture.prototype); - Object.defineProperties(Texture.prototype, { frame: { get: function () diff --git a/src/core/utils/EventData.js b/src/core/utils/EventData.js deleted file mode 100644 index 42e34e6..0000000 --- a/src/core/utils/EventData.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Creates an homogenous object for tracking events so users can know what to expect. - * - * @class - * @memberof PIXI.utils - * @param target {object} The target object that the event is called on - * @param name {string} The string name of the event that was triggered - * @param data {object} Arbitrary event data to pass along - */ -function EventData(target, name, data) -{ - // for duck typing in the ".on()" function - this.__isEventObject = true; - - /** - * Tracks the state of bubbling propagation. Do not - * set this directly, instead use `event.stopPropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stopped = false; - - /** - * Tracks the state of sibling listener propagation. Do not - * set this directly, instead use `event.stopImmediatePropagation()` - * - * @member {boolean} - * @private - * @readonly - */ - this.stoppedImmediate = false; - - /** - * The original target the event triggered on. - * - * @member {object} - * @readonly - */ - this.target = target; - - /** - * The string name of the event that this represents. - * - * @member {string} - * @readonly - */ - this.type = name; - - /** - * The data that was passed in with this event. - * - * @member {object} - * @readonly - */ - this.data = data; - - /** - * The timestamp when the event occurred. - * - * @member {number} - * @readonly - */ - this.timeStamp = Date.now(); -} - -EventData.prototype.constructor = EventData; -module.exports = EventData; - -/** - * Stops the propagation of events up the scene graph (prevents bubbling). - * - */ -EventData.prototype.stopPropagation = function stopPropagation() -{ - this.stopped = true; -}; - -/** - * Stops the propagation of events to sibling listeners (no longer calls any listeners). - * - */ -EventData.prototype.stopImmediatePropagation = function stopImmediatePropagation() -{ - this.stoppedImmediate = true; -}; diff --git a/src/core/utils/eventTarget.js b/src/core/utils/eventTarget.js deleted file mode 100644 index 95d23ca..0000000 --- a/src/core/utils/eventTarget.js +++ /dev/null @@ -1,211 +0,0 @@ -var EventData = require('./EventData'); - -var tempEventObject = new EventData(null, null, {}); - -/** - * Mixins event emitter functionality to an object. - * - * @mixin - * @memberof PIXI.utils - * @example - * function MyEmitter() {} - * - * eventTarget.mixin(MyEmitter.prototype); - * - * var em = new MyEmitter(); - * em.emit('eventName', 'some data', 'some more data', {}, null, ...); - */ -function eventTarget(obj) -{ - /** - * Return a list of assigned event listeners. - * - * @memberof eventTarget - * @param eventName {string} The events that should be listed. - * @return {Array} An array of listener functions - */ - obj.listeners = function listeners(eventName) - { - this._listeners = this._listeners || {}; - - return this._listeners[eventName] ? this._listeners[eventName].slice() : []; - }; - - /** - * Emit an event to all registered event listeners. - * - * @memberof eventTarget - * @alias dispatchEvent - * @param eventName {string} The name of the event. - * @return {boolean} Indication if we've emitted an event. - */ - obj.emit = obj.dispatchEvent = function emit(eventName, data) - { - this._listeners = this._listeners || {}; - - // fast return when there are no listeners - if (!this._listeners[eventName]) - { - return; - } - - //backwards compat with old method ".emit({ type: 'something' })" - //lets not worry about old ways of using stuff for v3 - /* - if (typeof eventName === 'object') - { - data = eventName; - eventName = eventName.type; - } - */ - - //ensure we are using a real pixi event - //instead of creating a new object lets use an the temp one ( save new creation for each event ) - if ( !data || !data.__isEventObject ) - { - tempEventObject.target= this; - tempEventObject.type = eventName; - tempEventObject.data = data; - - data = tempEventObject; - } - - //iterate the listeners - var listeners = this._listeners[eventName].slice(0), - length = listeners.length, - fn = listeners[0], - i; - - for (i = 0; i < length; fn = listeners[++i]) - { - //call the event listener scope is currently determined by binding the listener - //way faster than 'call' - fn(data); - - //if "stopImmediatePropagation" is called, stop calling sibling events - if (data.stoppedImmediate) - { - return this; - } - } - - //if "stopPropagation" is called then don't bubble the event - if (data.stopped) - { - return this; - } - - return this; - }; - - /** - * Register a new EventListener for the given event. - * - * @memberof eventTarget - * @alias addEventListener - * @param eventName {string} Name of the event. - * @param callback {Functon} fn Callback function. - */ - obj.on = obj.addEventListener = function on(eventName, fn) - { - this._listeners = this._listeners || {}; - - (this._listeners[eventName] = this._listeners[eventName] || []) - .push(fn); - - return this; - }; - - /** - * Add an EventListener that's only called once. - * - * @memberof eventTarget - * @param eventName {string} Name of the event. - * @param callback {Function} Callback function. - */ - obj.once = function once(eventName, fn) - { - this._listeners = this._listeners || {}; - - var self = this; - function onceHandlerWrapper() - { - fn.apply(self.off(eventName, onceHandlerWrapper), arguments); - } - onceHandlerWrapper._originalHandler = fn; - - return this.on(eventName, onceHandlerWrapper); - }; - - /** - * Remove event listeners. - * - * @memberof eventTarget - * @alias removeEventListener - * @param eventName {string} The event we want to remove. - * @param callback {Function} The listener that we need to find. - */ - obj.off = obj.removeEventListener = function off(eventName, fn) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - var list = this._listeners[eventName], - i = fn ? list.length : 0; - - while (i-- > 0) - { - if (list[i] === fn || list[i]._originalHandler === fn) - { - list.splice(i, 1); - } - } - - if (list.length === 0) - { - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - } - - return this; - }; - - /** - * Remove all listeners or only the listeners for the specified event. - * - * @memberof eventTarget - * @param eventName {string} The event you want to remove all listeners for. - */ - obj.removeAllListeners = function removeAllListeners(eventName) - { - this._listeners = this._listeners || {}; - - if (!this._listeners[eventName]) - { - return this; - } - - // delete causes deoptimization - // lets set it to null - this._listeners[eventName] = null; - - return this; - }; -} - -module.exports = { - /** - * Mixes in the properties of the eventTarget into another object - * - * @param object {object} The obj to mix into - */ - mixin: function mixin(obj) - { - eventTarget(obj); - } -}; diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 69ab4e2..4dae982 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -7,8 +7,6 @@ _uid: 0, _saidHello: false, - EventData: require('./EventData'), - eventTarget: require('./eventTarget'), pluginTarget: require('./pluginTarget'), PolyK: require('./PolyK'), diff --git a/src/extras/MovieClip.js b/src/extras/MovieClip.js index 9db67ff..fccdf7c 100644 --- a/src/extras/MovieClip.js +++ b/src/extras/MovieClip.js @@ -186,10 +186,10 @@ * Updates the object transform for rendering * @private */ -MovieClip.prototype.update = function ( event ) +MovieClip.prototype.update = function (deltaTime) { - this.currentFrame += this.animationSpeed * event.data.deltaTime; + this.currentFrame += this.animationSpeed * deltaTime; var floor = Math.floor(this.currentFrame); diff --git a/src/extras/Ticker.js b/src/extras/Ticker.js index d8ddfcf..e938c64 100644 --- a/src/extras/Ticker.js +++ b/src/extras/Ticker.js @@ -1,5 +1,4 @@ -var eventTarget = require('../core/utils/eventTarget'), - EventData = require('../core/utils/EventData'); +var EventEmitter = require('eventemitter3').EventEmitter; /** * A Ticker class that runs an update loop that other objects listen to @@ -9,6 +8,8 @@ */ var Ticker = function() { + EventEmitter.call(this); + this.updateBind = this.update.bind(this); /** @@ -19,13 +20,6 @@ this.active = false; /** - * the event data for this ticker to dispatch the tick event - * - * @member {EventData} - */ - this.eventData = new EventData( this, 'tick', { deltaTime:1 } ); - - /** * The deltaTime * * @member {number} @@ -57,7 +51,8 @@ this.start(); }; -eventTarget.mixin(Ticker.prototype); +Ticker.prototype = Object.create(EventEmitter.prototype); +Ticker.prototype.constructor = Ticker; /** * Starts the ticker, automatically called by the constructor @@ -111,9 +106,7 @@ this.deltaTime *= this.speed; - this.eventData.data.deltaTime = this.deltaTime; - - this.emit( 'tick', this.eventData ); + this.emit('tick', this.deltaTime); this.lastTime = currentTime; } diff --git a/src/interaction/InteractionManager.js b/src/interaction/InteractionManager.js index d09f66e..8bb7477 100644 --- a/src/interaction/InteractionManager.js +++ b/src/interaction/InteractionManager.js @@ -52,8 +52,12 @@ * * @member {EventData} */ - this.eventData = new core.utils.EventData(); - this.eventData.data = this.mouse; + this.eventData = { + stopped: false, + target: null, + type: null, + data: this.mouse + }; /** * Tiny little interactiveData pool !